Guten Tag zusammen,
ich habe an diesen Post einmal das Script angehangen um welches es geht.
Ich wollte gerne das die Zeile Position eine Mehrspaltige Zeile ist. Die Zeile wird sich auf das AD-Feld Beschreibung beziehen.
Habt ihr vllt eine Idee wie man das umsetzen kann?
Vielen Dank im voraus.
Marco Werkmeister
ich habe an diesen Post einmal das Script angehangen um welches es geht.
Ich wollte gerne das die Zeile Position eine Mehrspaltige Zeile ist. Die Zeile wird sich auf das AD-Feld Beschreibung beziehen.
Habt ihr vllt eine Idee wie man das umsetzen kann?
Vielen Dank im voraus.
Marco Werkmeister
Quellcode
- <HTML>
- <HEAD>
- <LINK REL="stylesheet" type="text/css" href="styles.css">
- <TITLE></TITLE>
- <META NAME="author" CONTENT="Marco Werkmeister">
- <META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes">
- <HTA:APPLICATION ID="oHTA"
- APPLICATIONNAME="Adressbearbeitung"
- CAPTION="yes"
- ICON="rgb.jpg"
- >
- </HEAD>
- <BODY onload="beschriften();" application="yes">
- <img src="rgb.jpg">
- <H2 id="head"></H2>
- <FORM name = "SearchForm" onsubmit="suche();">
- <table>
- <TR>
- <TD width="150px" id="lQuelle">[B]enutzer:</TD>
- <TD id="lUser"><INPUT type="text" name="fuser" size="70" accesskey="b">
- <BUTTON onclick="suche()" accesskey="f"><SPAN class="symb">$</SPAN> Benutzer [f]inden</BUTTON>
- </TD>
- </TR>
- <tr>
- <td colspan="2"><P id="ergebnis"></P>
- <hr />
- </td>
- </tr>
- </TABLE>
- </FORM>
- <form name="AddressForm">
- <div id="formUserData">
- </div>
- <div id="saveButton"></div>
- <button onclick="location.reload();"><SPAN class="symb">û</SPAN> Abbrechen</button>
- </form>
- <BR clear="all">
- <HR>
- <SCRIPT language="VBScript">
- '''''''''''''''''''''''''''''''''''''''''''''
- ' KUKA-Adressbearbeitung: Applikation zum Bearbeiten von Adressdaten in AD
- ' Version 1.0 vom 04.03.2015
- ' Änderung:
- '
- ' Von Marco Werkmeister
- '
- ' Keine Gewähr! Nutzung auf eigene Gefahr!
- '
- '''''''''''''''''''''''''''''''''''''''''''''
- titel = "Adressbearbeitung 1.0"
- ' ***** Feldnamen für die Oberfläche
- ' Anzahl der Felder (minus 1) in der ersten Dimension angeben
- Dim arrFeld(6,1)
- ' Feldnamen definieren
- ' Format:
- ' x, 0: LDAP-Feldname in AD
- ' x, 1: Anzeigename für den Benutzer
- arrFeld(0, 0) = "initials"
- arrFeld(0, 1) = "Vollmachtszusatz"
- arrFeld(1, 0) = "description"
- arrFeld(1, 1) = "Position"
- arrFeld(2, 0) = "physicalDeliveryOfficeName"
- arrFeld(2, 1) = "Gebäude/Stockwerk"
- arrFeld(3, 0) = "department"
- arrFeld(3, 1) = "Abteilung"
- arrFeld(4, 0) = "telephoneNumber"
- arrFeld(4, 1) = "Rufnummer"
- arrFeld(5, 0) = "facsimileTelephoneNumber"
- arrFeld(5, 1) = "Fax"
- arrFeld(6, 0) = "mobile"
- arrFeld(6, 1) = "Mobilnummer"
- ' **** Ende Feldnamen
- Const ADS_PROPERTY_CLEAR = 1
- Const ADS_PROPERTY_APPEND = 3
- ' Globale Variablen und Objekte
- Dim objRS
- Dim objConn
- Dim dictChanges
- ' Dictionary-Objekt, das die geänderten Daten hält
- Set dictChanges = CreateObject("Scripting.Dictionary")
- Sub suche()
- strANRString = document.SearchForm.fuser.value
- document.all.ergebnis.innerHTML = ""
- If strANRString = "" Then
- showItems "Kein Suchtext angegeben!"
- Exit Sub
- End If
- ' Domäne ansprechen
- On Error Resume Next
- Set objRoot = GetObject("LDAP://rootDSE")
- strDomainName = objRoot.Get("DefaultNamingContext")
- ' Set objDomain = GetObject("LDAP://" & strDomainName)
- If checkit("Keine Domäne ansprechbar!") Then
- Exit Sub
- End If
- On Error Goto 0
- strSQL = "SELECT AdsPath, displayName, sAMAccountName, mail FROM 'LDAP://" _
- & strDomainName & "' WHERE anr='" _
- & strANRString & "' AND objectClass='user' AND objectCategory='person'"
- 'Create ADO connection object for Active Directory
- Set Con = CreateObject("ADODB.Connection")
- Con.Provider = "ADsDSOObject"
- Con.Open "Active Directory Provider"
- If checkit("Fehler bei ADO-Connection!") Then
- Exit Sub
- End If
- 'Create ADO command object for the connection.
- Set ocommand = CreateObject("ADODB.Command")
- ocommand.ActiveConnection = Con
- If checkit("Fehler bei ADO-Command!") Then
- Exit Sub
- End If
- 'Assemble the commandtext.
- ocommand.CommandText = strSQL
- 'Execute the query.
- Set objRS = ocommand.Execute
- If checkit("Fehler bei SQL-Kommando!") Then
- Exit Sub
- End If
- On Error Goto 0
- intNumDisplay = 0
- intCount = 0
- displayResult objRS, 100, 100
- End Sub
- Sub displayResult(rs, intMaxLines, intMaxChars)
- ' Funktion:
- ' Eingabeparameter:
- ' Kommentar:
- document.all.ergebnis.innerHTML = ""
- intCount = rs.RecordCount
- Select Case intCount
- Case 0 showItems "Kein Eintrag entspricht dem Suchbegriff."
- Case 1 showItems "1 Eintrag entspricht dem Suchbegriff."
- Case Else showItems intCount & " Einträge entsprechen dem Suchbegriff."
- End Select
- On Error Resume Next
- intCount = 0
- ' Navigate the record set
- strText = strText & "<TABLE border=""0""><TR>"
- For Each feld In rs.fields
- If feld.Name <> "AdsPath" Then
- strText = strText & "<TD valign=""top""><B>" & feld.name & "</B></TD>"
- End If
- Next
- strText = strText & "<TD> </TD>"
- If rs.EOF Then
- strText = strText & "</TR><TR><TD colspan=""" & rs.fields.count+1 & """><I>Keine Benutzer gefunden.</I>"
- End If
- While (Not rs.EOF) And (intCount < intMaxLines)
- intCount = intCount + 1
- strText = strText & "</TR><TR class=""row" & intCount Mod 2 & """>"
- For i = 0 To rs.Fields.Count - 1
- If rs.Fields(i).Name <> "AdsPath" Then
- strText = strText & "<TD valign=""top"">"
- If (IsNull(rs.Fields(i).Value)) Then
- strValue = "<I>(leer)</I>"
- ElseIf rs.Fields(i).type = 128 Or rs.Fields(i).type = 204 Or rs.Fields(i).type = 205 Then
- strValue = "<I>binär</I>"
- Else
- wert = rs.Fields(i).Value
- strValue = CStr(wert)
- if len(strValue) > intMaxChars then strValue = Left(strValue, intMaxChars) & "<I>(...)</I>"
- End If
- strText = strText & Trim(strValue)
- strText = strText & "</TD>"
- End If
- Next
- ' adsPath maskieren, um JavaScript-Übergabe zu ermöglichen
- strAdsPath = Replace(objRS.Fields("AdsPath").Value, "\", "\\")
- strText = strText & "<TD><BUTTON onclick=""selectUser('" & strAdsPath _
- & "');"">Benutzer auswählen</BUTTON></TD>"
- rs.MoveNext
- If checkit("Fehler bei Verarbeitung des Recordsets, Zeile: " & intCount) Then
- Exit Sub
- End If
- Wend
- strText = strText & "</TR></TABLE>"
- showItems strText
- if not(intCount < intMaxLines) then showItems "<I>Ausgabe bei " & intMaxLines & " Zeilen abgebrochen.</I><BR>"
- On Error Goto 0
- End Sub
- Sub showItems(strText)
- ' Funktion: Ausgabe der Ergebnisse
- ' Eingabeparameter:
- ' Kommentar:
- document.all.ergebnis.innerHTML = document.all.ergebnis.innerHTML & strText
- End Sub
- Sub selectUser(strUserDN)
- Set objUser = GetObject(strUserDN)
- objUser.GetInfo
- strDisplayname = objUser.displayName
- strgivenName = objUser.givenName
- strsn = objUser.sn
- strmail = objUser.mail
- strcompany = objUser.company
- strstreetAddress = objUser.streetAddress
- strpostalCode = objUser.postalCode
- strl = objUser.l
- strwwwHomePage = objUser.wwwHomePage
- document.all.ergebnis.innerHTML = ""
- document.SearchForm.fuser.value = ""
- showItems "<br>"
- showItems "<B>Gewählter Benutzer: </B><br>"
- showItems "" & strsn & "<br>"
- showItems "" & strgivenName & "<br>"
- showItems "" & strmail & "<br>"
- showItems "" & strcompany & "<br>"
- showItems "" & strstreetAddress & "<br>"
- showItems "" & strpostalCode & "<br>"
- showItems "" & strl & "<br>"
- showItems "" & strwwwHomePage & "<br>"
- ErzeugeFelder(objUser)
- End Sub
- Sub ErzeugeFelder(objUser)
- strFelderCode = "<TABLE>"
- For i = 0 To UBound(arrFeld)
- ' Felder können leer sein, daher Fehler abfangen
- On Error Resume Next
- strData = ""
- strData = objUser.get(arrFeld(i, 0))
- strAdsPath = Replace(objUser.AdsPath, "\", "\\")
- On Error Goto 0
- strFelderCode = strFelderCode & "<TR><TD width=""150px"">" _
- & arrFeld(i, 1) & ":</TD><TD>"
- strFelderCode = strFelderCode & "<INPUT type=""text"" id=""f" _
- & arrFeld(i, 0) & """ size=""70"" value=""" & strData _
- & """ onchange=""changeValue('f" &arrFeld(i, 0) & "');"">"
- strFelderCode = strFelderCode & "</TD></TR>"
- Next
- strFelderCode = strFelderCode & "</TABLE>"
- document.all.formUserData.innerHTML = strFelderCode
- document.all.saveButton.innerHTML = "<button onclick=""speichereDaten('" _
- & strAdsPath & "');"" accesskey=""s""><SPAN class=""symb"">ü</SPAN> Änderungen [s]peichern!</button>"
- End Sub
- Sub changeValue(strFeldID)
- document.getElementById(strFeldID).className = "changed"
- strNewData = document.getElementById(strFeldID).value
- strFeldName = Mid(strFeldID, 2)
- ' Änderungen in Dictionary aufzeichnen
- If dictChanges.Exists(strFeldName) Then
- dictChanges.Remove strFeldName
- End If
- dictChanges.Add strFeldName, strNewData
- End Sub
- Sub speichereDaten(strDN)
- If dictChanges.Count = 0 Then
- MsgBox "Keine Änderungen vorhanden, die gespeichert werden können.", vbOKOnly + vbCritical, titel
- Exit Sub
- End If
- Set objUser = GetObject(strDN)
- strSAMName = objUser.sAMAccountName
- ' Änderungen durchführen
- On Error Resume Next
- For Each key In dictChanges.Keys
- If dictChanges.Item(key) <> "" Then
- objUser.Put key, dictChanges.Item(key)
- Else
- objUser.PutEx ADS_PROPERTY_CLEAR, key, vbNullString
- End If
- checkit "Fehler bei " & key & "!"
- Next
- objUser.SetInfo
- If checkit("Fehler beim Schreiben der Eigenschaften!") Then
- Exit Sub
- Else
- strMsg = "Änderungen erfolgreich geschrieben." & VbCrLf
- End If
- On Error Goto 0
- ' Oberfläche zurücksetzen
- For Each key In dictChanges.Keys
- document.getElementById("f" & key).className = ""
- Next
- ' Änderungs-Collection löschen
- For Each key In dictChanges.Keys
- dictChanges.Remove(key)
- Next
- MsgBox strMsg, vbOKOnly + vbInformation, titel
- End Sub
- Sub beschriften()
- parent.document.title = titel
- document.all.head.innerText = titel
- End Sub
- ' Fehlerprüfung
- Function checkit(Nachricht)
- checkit = False
- If Err.number <>0 Then
- Nachricht = Nachricht & " [" & Err.description & " (" & Err.number & ")]"
- MsgBox Nachricht, vbOKOnly+vbCritical, titel & ": Fehler!"
- Err.clear
- checkit=True
- End If
- End Function
- </SCRIPT>
- </BODY>
- </HTML>