<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://share.intelliem.com/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Dan Holme : HTA</title><link>http://share.intelliem.com/cs/blogs/danholme/archive/tags/HTA/default.aspx</link><description>Tags: HTA</description><dc:language>en</dc:language><generator>CommunityServer 2008 (Build: 30417.1769)</generator><item><title>Create a drop-down list in an HTA populated with objects from Active Directory</title><link>http://share.intelliem.com/cs/blogs/danholme/archive/2008/05/20/create-a-drop-down-list-in-an-hta-populated-with-objects-from-active-directory.aspx</link><pubDate>Tue, 20 May 2008 17:28:23 GMT</pubDate><guid isPermaLink="false">a490a765-4c85-490a-a798-e10148c74a46:80</guid><dc:creator>danholme</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://share.intelliem.com/cs/blogs/danholme/rsscomments.aspx?PostID=80</wfw:commentRss><comments>http://share.intelliem.com/cs/blogs/danholme/archive/2008/05/20/create-a-drop-down-list-in-an-hta-populated-with-objects-from-active-directory.aspx#comments</comments><description>&lt;p&gt;The following code demonstrates how to create a drop-down list (also called a &amp;quot;combo box&amp;quot;) in an HTA that is automatically populated by querying Active Directory.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;This HTA demonstrates how to build a combo box filled with objects from Active Directory.&lt;br /&gt;Note there may need to be optimizations made for environments with large numbers of records,&lt;br /&gt;not just for search performance but to make the combo box a reasonable size.&lt;br /&gt;--&amp;gt;  &lt;p&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;My Title&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;HTA:APPLICATION &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID=&amp;quot;oHTA&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; body, tr, td, table, p, input {font-family: arial; font-size: 9pt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; textarea {font-family: arial; font-size: 8pt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; td {vertical-align:top;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .trodd {background-color: #cccccc;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .treven {background-color: #ffffff;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .tdlabel {width: 30%}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .tdvalue {width: 70%}&lt;br /&gt;&amp;lt;/style&amp;gt;  &lt;p&gt;&amp;lt;script language=&amp;quot;vbscript&amp;quot;&amp;gt;&lt;br /&gt;Option Explicit  &lt;p&gt;Sub Window_Onload&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call FillResources&lt;br /&gt;End Sub  &lt;p&gt;Sub FillResources()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Version 080520&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Creates a drop-down list based on an AD query  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim sHTML&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim rsObjects&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim sLDAPQuery, sSearchDN, sProperties, sSortProperty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim sLabel, sValue&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Define the query for the drop-down list&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sLDAPQuery = &amp;quot;(&amp;amp;(objectCategory=person)(cn=*))&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Define the scope of the search&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSearchDN = &amp;quot;ou=people,dc=contoso,dc=com&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Which properties do you want to bring back&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sProperties = &amp;quot;sAMAccountName,displayName&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Which property do you want to sort by (must be in sProperties as well)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSortProperty = &amp;quot;displayName&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set rsObjects = AD_Query (sLDAPQuery, sSearchDN, &amp;quot;subtree&amp;quot;, sProperties, sSortProperty)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If rsObjects Is Nothing Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; This is debug code--you&amp;#39;ll want to change this (probably just keep it &amp;#39;silent&amp;#39;) in production&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &amp;quot;No objects found&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Sub&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rsObjects.MoveFirst&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Do Until rsObjects.EOF&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Build each entry (&amp;lt;option&amp;gt; tag) in the drop down list&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; the VALUE is what is actually stored as the selected item in the drop-down list,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; and should be unique&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; the LABEL is what is actually displayed in the drop-down list.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Note that IE6 does not allow separation of the two (value vs. label)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; so you need IE7 to view the HTA&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sLabel = rsObjects.Fields(&amp;quot;displayName&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sValue = rsObjects.Fields(&amp;quot;samAccountName&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sHTML = sHTML &amp;amp; &amp;quot;&amp;lt;option value=&amp;quot;&amp;quot;&amp;quot; &amp;amp; sValue &amp;amp; &amp;quot;&amp;quot;&amp;quot;&amp;gt;&amp;quot; &amp;amp; sLabel &amp;amp; &amp;quot;&amp;lt;/option&amp;gt;&amp;quot; &amp;amp; VbCrLf&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rsObjects.MoveNext&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loop&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Build the drop-down list (the &amp;lt;select&amp;gt; tag) around the &amp;lt;option&amp;gt;s&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; note the onchange event is hard wired in.&amp;nbsp; Because you are &amp;#39;recreating&amp;#39; the drop-down list,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; the name of the subroutine itself (cboList_OnChange) is not enough--it has to be specified&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; in the &amp;lt;select&amp;gt; tag.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sHTML = &amp;quot;&amp;lt;select id=&amp;quot;&amp;quot;cboList&amp;quot;&amp;quot; name=&amp;quot;&amp;quot;cboList&amp;quot;&amp;quot; onchange=&amp;quot;&amp;quot;cboList_OnChange()&amp;quot;&amp;quot;&amp;gt;&amp;quot; &amp;amp; VbCrLf &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sHTML&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sHTML = sHTML &amp;amp; &amp;quot;&amp;lt;/select&amp;gt;&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; You need to have a &amp;lt;div&amp;gt; in your HTML with the ID and NAME of divCboList&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; divCboList.innerHTML = sHTML&lt;br /&gt;End Sub  &lt;p&gt;Function AD_Query(ByVal sLDAPQuery, ByVal sSearchDN, ByVal sSearchScope, ByVal sProperties, ByVal sSortProperty)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; VERSION 080520&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Inputs:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; sLDAPQuery: an LDAP query&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; sSearchDN: the DN within which to search (often, the DN of the domain, e.g. dc=contoso, dc=com)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; sSearchScope: the AD Search scope, which can be subtree or onelevel or base (subtree most common)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; sProperties: the attributes to return from matching objects, comma-delimited.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if blank, ADsPath is returned&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; sSortProperty: the property to sort on - must be included in sProperties as well&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Can NOT be distinguished name see KB 842637 for alternate method&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Change log 080520&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Added SORT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Cleaned up code per KB 842637 example&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim oConnection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim oCommand&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim oRecordset&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If trim(sProperties) = &amp;quot;&amp;quot; then sProperties = &amp;quot;ADsPath&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Open an ADO connection using null credentials&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set oConnection = CreateObject(&amp;quot;ADODB.Connection&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oConnection.Provider = &amp;quot;ADsDSOObject&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oConnection.Properties(&amp;quot;Encrypt Password&amp;quot;) = True&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oConnection.Properties(&amp;quot;ADSI Flag&amp;quot;) = 1 &amp;#39; adSecureAuthentication&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;On Error Resume Next&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oConnection.Open &amp;quot;Active Directory Provider&amp;quot;, vbNullString, vbNullString&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If oConnection.State = 0 Then &amp;#39; adStateClosed&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Error handling code&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; WScript.Echo &amp;quot;ERROR: Connection to AD failed.&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Function&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Build the LDAP Query&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sLDAPQuery = &amp;quot;&amp;lt;LDAP://&amp;quot; &amp;amp; sSearchDN &amp;amp; &amp;quot;&amp;gt;;&amp;quot; &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sLDAPQuery &amp;amp; &amp;quot;;&amp;quot; &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sProperties &amp;amp; &amp;quot;;&amp;quot; &amp;amp; sSearchScope&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set oCommand = CreateObject(&amp;quot;ADODB.Command&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oCommand.ActiveConnection = oConnection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oCommand.Properties(&amp;quot;Sort On&amp;quot;) = sSortProperty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oCommand.CommandType = 1 &amp;#39; adCmdText&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oCommand.CommandText = sLDAPQuery&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Debug code&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; MsgBox sLDAPQuery&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set oRecordset = CreateObject(&amp;quot;ADODB.Recordset&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oRecordset.Open oCommand, , 3, 1 &amp;#39; adUseClient, adLockReadOnly&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Check to make sure we received at least one result&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If oRecordset.EOF and oRecordset.BOF Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; Error handling code&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; WScript.Echo &amp;quot;ERROR: No objects found.&amp;quot; &amp;amp; VbCrLf &amp;amp; sLDAPQuery &amp;amp; vbCrLf &amp;amp; VbCrLf&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set AD_Query = Nothing&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set AD_Query = oRecordset.clone&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oRecordset.Close&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;oConnection.Close&lt;br /&gt;End Function  &lt;p&gt;Sub CboList_OnChange()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim sSelected&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sSelected = cboList.value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39; TEST CODE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &amp;quot;You selected: &amp;quot; &amp;amp; sSelected&lt;br /&gt;End Sub  &lt;p&gt;&amp;lt;/script&amp;gt;  &lt;p&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;  &lt;p&gt;&amp;lt;div id=&amp;quot;divCboList&amp;quot; name=&amp;quot;divCboList&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;  &lt;p&gt;&amp;lt;/body&amp;gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://share.intelliem.com/cs/aggbug.aspx?PostID=80" width="1" height="1"&gt;</description><category domain="http://share.intelliem.com/cs/blogs/danholme/archive/tags/HTA/default.aspx">HTA</category><category domain="http://share.intelliem.com/cs/blogs/danholme/archive/tags/Active+Directory/default.aspx">Active Directory</category></item></channel></rss>