Häufig werden in elektronischen Workflow-Prozeßen auf Intranetbasis die Daten eines Benutzers oder des Antragstellers benötigt. So z.B. wenn ein Mitarbeiter für seinen Antrag ein elektronisches Formular ausfüllen muss.
Um auf der einen Seite dem Benutzer die Eingabe seiner Benutzerdaten wie Name, Vorname, E-Mail-Adresse, Telefonnummer und Abteilung etc zu ersparen und auf der anderen Seite Schreibfehler zu vermeiden können diese Benutzerdaten im Intranet aus dem Exchange-Sever ausgelesen und in das Formular übertragen werden.
Das folgende kleine Beispiel soll dies verdeutlichen. Wir gehen hierbei davon aus, dass das Verzeichnis auf dem Webserver zum einen NT-authentifiziert ist und zum anderen die notwendigen Rechte besitzt um auf den Exchange-Server lesend zugreifen zu können. Der Zugriff auf Exchange selbst erfolgt über LDAP (siehe hierzu auch den Artikel …).
Beim Aufruf der Seite Benutzerdaten_beispiel.asp wird mit „Request.ServerVariables("AUTH_USER")“ die UserID ermittelt, per Javascript ein neues Fenster geöffnet und dem Skript Benutzerdaten_ermitteln.asp die UserID übergeben.
<script language="javascript">
window.open('Benutzerdaten_ermitteln.asp?uid=<%=uid%>','fenster','width=300,height=200')
</script>
Das Skript Benutzerdaten_ermitteln.asp überprüft zunächst ob diese UserID in Exchange existiert. Wenn ja werden die Felder Name, Vorname, E-Mail-Adresse und Telefonnummer aus Exchange ausgelesen und per Javascript in das Formular übertragen und das Javascript-Fenster wieder automatisch geschlossen. Wenn diese UserID in Exchange nicht gefunden werden konnte wird ein entsprechender Hinweis ausgegeben.
<%
option explicit
dim strServerName
dim strUID
dim oConn
dim oCommand
dim strQuery
dim ors
response.write "<b>Ihre Benutzerdaten werden ermittelt</b><BR><BR>"
'***Variablen und Konstanten
strServerName = "Exchange-Server"
strUID = Request.QueryString("UID")
set oConn = CreateObject("ADODB.Connection")
set oCommand = CreateObject("ADODB.Command")
oConn.Provider = "ADsDSOObject"
oConn.Open "Ads Provider"
set oCommand.ActiveConnection = oConn
'***Select-String zusammensetzen
strQuery = "<LDAP://" & strServername & ">;(&(objectClass=*)(uid=" & strUID & "));ADsPath,mail,department,telephonenumber,sn,givenname,uid;subtree"
oCommand.CommandText = strQuery
set oRS = oCommand.Execute
if not ors.eof then
'*** UserID wurde in Exchange gefunden
Response.Write "Ihre Userdaten wurden gefunden!" & vbcrlf
'***die Textfelder im aufrufenden Fenster ausfüllen
Response.Write "<script language=""JavaScript"">" & vbcrlf
Response.Write "window.opener.formular.name.value=""" & oRS.Fields("sn") &", " & oRS.Fields("givenname") & """;" & vbcrlf
Response.Write "window.opener.formular.vorname.value=""" & oRS.Fields("sn") &", " & oRS.Fields("givenname") & """;" & vbcrlf
Response.Write "window.opener.formular.email.value=""" & oRS.Fields("mail") & """;" & vbcrlf
Response.Write "window.opener.formular.telefon.value=""" & oRS.Fields("telephonenumber") & """;" & vbcrlf
Response.Write "window.close();" & vbcrlf
Response.Write "</script>" & vbcrlf
else
'*** UserID wurde in Exchange nicht gefunden
Response.Write ""
Response.Write "<font color=""red""><b>Diese Benutzerkennung existiert in Exchange nicht.<BR>" & vbcrlf
Response.Write "Sie müssen die Felder von Hand ausfüllen.</b></font><BR>" & vbcrlf
Response.Write "<form>"
Response.Write "<input type=""button"" value="" OK "" onclick=""window.close()"">"
Response.Write "</form>"
end if
oConn.close
set oCommand = nothing
set ors = nothing
%>
Die beiden Skripts findet man in der Datei benutzer.zip
benutzer.zip (1,78 KB)