Der Form Editor in ACMP unterstützt auch die Verwendung der LDAP-Befehle Search und Modify. Im folgenden wird aufgezeigt, wie Sie ein entsprechendes Formular erstellen.
Sie werden kennenlernen, wie Sie ein Formular erstellen und einen LDAP-Suchfilter einrichten und wie Sie bei LDAP-Attribute über das Formular ändern können.
Wechseln Sie in die Code-Ansicht des Formulars und fügen Sie zunächst die folgenden Units hinzu: Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, SysUtils, Buttons, AagonLDAP;
Anschließend definieren Sie globale Variablen vom Typ String für den Host, den Port, den User, das Passwort, die Basis der Suche, den Suchfilter und für eine Fehlermeldung sowie eine gloabale Variable vom Typ TStringList für die Ergebnissliste.
Codebeispiel |
uses Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, SysUtils, Buttons, AagonLDAP; var llist : TStringList; strHost, strPort, strUser, strPwd, strBaseDN, strFilter, strError: String; |
Erstellen Sie eine Funktion, mit welcher Sie eingegebene Strings escapen können.
Codebeispiel |
function escapevalues(Value: String) : String; begin Value := '"'+StringReplace(Value,',','","')+'"'; Result := StringReplace(Value, '","","', ','); end; |
Hinweis: |
Diese Funktion muss sich immer oberhalb der erstellten Prozeduren befinden. |
Erstellen Sie nun eine Prozedur, in der Sie für die Variablen Werte festlegen:
Wert |
Beschreibung |
Codebeispiel |
Host |
Domänencontroller an den die Anfrage gestellt wird |
procedure formActivate(Sender: TObject); begin strHost := '192.168.1.1'; strPort := '389'; strUser := 'MeinBenutzer@meine.domäne'; strPwd := 'meinGeheimesPasswort123'; strBaseDN := 'dc=meine,dc=domäne'; strFilter := '';
llist := TStringList.Create(); end; |
Port |
Für die Anfrage verwendeter Port (Port 389: LDAP, Port 3268: Global Katalog) |
|
User |
Benutzer für die Anfrage |
|
Passwort |
Passwort des Benutzers |
|
BaseDN |
Basis der Suche (DistinguishedName) |
|
Filter |
LDAP-Suchfilter |
Zusätzlich legen Sie eine Liste an, in welcher Ihre Ergebnisse gespeichert werden sollen um diese im Formular anzuzeigen.
Wechseln Sie in die Design-Ansicht des Formulars und erstellen Sie ein Formular mit den folgenden Elementen:
• | Ein Textfeld zur Eingabe des Suchfilters (hier kann optional ein beschreibendes Label eingefügt werden) |
• | Einen Button, mit dem Sie den Suchfilter ausführen |
• | Eine Textarea, in der Ihnen die Suchergebnisse angezeigt werden (hier kann optional ein beschreibendes Label eingefügt werden) |
Beispiel des Formulars - Suche
Damit Sie den Suchfilter nicht bei jedem Aufruf erneut vollständig eintragen müssen, markieren Sie das Feld und wählen am linken Fensterrand die Eigenschaft Text aus. Tragen Sie nun Ihren Suchfilter ein. In diesem Bespiel wird der folgende Filter verwendet:
(&(ObjectClass=User)(!(objectClass=Computer)))
Das Textfeld ist nun schon mit dem Suchfilter vorgefüllt.
Damit Sie die LDAP-Suche ausführen können, müssen Sie den Suchen-Button konfigurieren. Wechseln Sie hierzu in die Code-Ansicht des Formulars. Hier erstellen Sie nun die Prozedur SearchLdapClick.
Definieren Sie zunächst eine temporäre Liste sowie einen Integer. Damit Sie den im Textfeld edfilter bereitbestellten Suchfilter benutzen, weisen Sie den Text des Suchfilterfeldes Ihrer Filter-Variable zu. Führen Sie einen LDAPsearch aus. Hierbei geben Sie den Host, den Port, die Authentifizierungsmethode, den User, das Passwort, Ihren Einstiegspunkt, den Filter, den Suchbereich, die Ergebnisliste und einen String für eventuelle Fehlermeldungen an.
Die in der Variable llist enthaltenen Ergebnisse werden nun durchlaufen und der listbox1 hinzugefügt.
Codebeispiel |
Procedure SearchLdapClick; var ltemp : TStringList; i : Interger; begin ltemp := TStringList.Create(); strFilter := edfilter.Text; llist.Clear(); ListBox1.Clear(); LDAPSearch(strHost, strPort, 2, strUser, strPwd, strBaseDN, strFilter, 2, llist, strError); for i := 0 to llist.count-1 do begin ltemp.commatext := escapevalues(llist.Strings[i]); listbox1.items.Add(ltemp.values['CN']); end ltemp.free(); end; |
Wechseln Sie nun zurück in die Design-Ansicht und markieren den Suchen-Button. In der Event-Übersicht wählen Sie für das Event OnClick die soeben erstelle Prozedur aus der Liste aus.
Wenn Sie nun im Formular den Button Suchen klicken, werden Ihnen die Ergebnisse im Suchergebnisfeld angezeigt.
Damit Sie sich einzelne ausgelesene Werte für die Ergebnisse anzeigen lassen können, erstellen Sie nun in der Design-Ansicht die entsprechender Felder. Im Beispiel werden die Felder Vorname, Nachname und Telefonnummer angelegt.
Beispiel des Formulars - Anzeige
Damit Ihnen nun zu einem Ergebnis auch die richtigen Werte angezeigt werden, müssen Sie in der Code-Ansicht die folgende Prozedur erstellen:
Codebeispiel |
procedure UserSelect; var ltemp : TStringList; begin ltemp := TStringList.Create(); if ((ListBox1.ItemIndex > -1) AND (ListBox1.Count > 0)) then begin ltemp.commatext := escapevalues(llist.Strings[ListBox1.ItemIndex]); edGivenname.Text := ltemp.Values['givenName']; edSN.Text := ltemp.Values['SN']; edTelephonenumber.Text := ltemp.Values['telephoneNumber']; end ltemp.Free(); end; |
Zum Anzeigen der Werte wechseln Sie nun in die Design-Ansicht und markieren das Suchergebnisfeld. Im linken Fensterbereich wählen Sie den Reiter Events und tragen bei OnClick die gerade erstellte Prozedur ein.
Erstellen Sie nun einen Button in der Design-Ansicht, mit dem Sie die Daten ändern wollen. Im Beispiel wird nur die Telefonnummer aktualisiert.
Beispiel des Formulars - Ändern
Führen Sie nun in der Design-Ansicht einen Doppelklick auf den neu erstellten Button aus um in die Code-Ansicht zu wechseln.
Definieren Sie nun je eine Liste für das Attribut und die Ergebnismenge sowie einen Integer. Nachdem Sie geprüft haben, welches Ergebnis ausgewählt und angezeigt wurde, können Sie den im Anzeigefeld eingetragenen Wert (in diesem Beispiel die Telefonnummer) im markierten Ergebnis aktualisieren. Hierzu führen Sie einen LDAPmodify aus. Als notwendige Parameter geben Sie den Host, den Port, die Authentifizierungsmethode, den User, das Passwort, das anzupassende AD-Object und den anzupassenden Wert an. Abschließend geben Sie an, ob der eingegebene Wert den vorhandenen überschreiben soll (true) oder ob der eingegebene Wert an den bereits vorhandenen angefügt werden soll (false).
Codebeispiel |
procedure ModifyLDAPObjectTelephonenumberClick; var lattrib, ltemp : TStringList; strUserDN : String; intEC : Integer; begin lattrib := TStringList.Create(); ltemp := TStringList.Create(); strUserDN := '';
ltemp.commatext := escapevalues(llist.Strings[ListBox1.ItemIndex]);
strUserDN := ltemp.Values['distinguishedName']; lattrib.Add('telephonenumber='+edTelephonenumber.text);
intEC := LDAPModifyAttributes(strHost, strPort, 2, strUser, strPwd, strUserDN, lattrib, false);
lattrib.Free(); ltemp.Free(); end; |
Zuletzt bearbeitet am 01.09.2017