Überprüfung von Eingaben Sinnvoll

  • Moin Jungs,

    benötige Hilfe sowie verbesserungs Vorschläge.

    Ich habe die Telefonnummer,Faxnummer, Sowie die Mobilfunknummer mit hilfe meiner Funktion func _wrong_chars_in_phonenumber überprüft das Funktioniert auch. Jetzt ist es so das ich 3 Möglichkeiten habe in der Funktion Mobilfunknummer sowie Homenummer funktioner das abscheichern der Nummer nicht richtig.

    3 Fälle:

    1. Error Buchstaben oder Sonderzeichen
    => Meldung in die Statusbar
    2. Er scheidet die Null Vorne weg
    3. Er Speichert es leer ab.
    Wie bekomme ich das am Sinnvollsten hin ?


    [autoit]


    #AutoIt3Wrapper_AU3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y
    ;--------------INCLUD ANFANG ----------------------
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <AD.au3>
    #Include <Array.au3>
    #include <GuiStatusBar.au3>
    ;--------------INCLUD ENDE ----------------------

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Global $SDNSDomain, $SHostServer, $SConfiguration, $SPassword, $SUserId, $aTEMP , $status, $statusleiste , $templeer

    [/autoit][autoit][/autoit][autoit]

    ; Username+Passwort fuer Domainadmin
    $SUserID = ""
    $SPassword = ""

    [/autoit][autoit][/autoit][autoit]

    ; Open Connection to the Active Directory
    _AD_Open()
    $SDNSDomain = $sAD_DNSDomain
    $SHostServer = $sAD_HostServer
    $SConfiguration = $sAD_Configuration
    _AD_Close()

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; Open Connection to the Active Directory
    If _AD_Open($SUserId, $SPassword, $SDNSDomain, $SHostServer, $SConfiguration) THEN
    ElseIf @error <= 8 Then
    MsgBox(16, "Adressbuch AD-Tool", "The logon was not succcessful!" & @CRLF & @CRLF & "@error: " & @error & ", @extended: " & @extended)
    Else
    MsgBox(16, "Adressbuch AD-Tool", "The logon was not succcessful!" & @CRLF & @CRLF & "@error: " & @error & ", @extended: " & @extended & _
    @CRLF & @CRLF & "Extended error information will be displayed")
    Global $aError = _AD_GetLastADSIError()
    _ArrayDisplay($aError)
    EndIf

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Global $sUser = @UserName
    Global $displayname = _AD_GetObjectAttribute(@UserName, "displayName")
    Global $mail = _AD_GetObjectAttribute(@UserName, "mail")

    [/autoit][autoit][/autoit][autoit]

    #Region ### START Koda GUI section ### Form=
    Global $Form1_1 = GUICreate("Adressbuch AD-Tool", 447, 466, 299, 127)
    GUISetFont(10, 400, 0, "Arial")
    Global $name = GUICtrlCreateLabel("Name:", 8, 12, 120, 21)
    Global $nameanzeige = GUICtrlCreateLabel(_AD_GetObjectAttribute(@UserName, "givenName") & " " & _AD_GetObjectAttribute(@UserName, "sn"), 170, 12, 259, 21)

    [/autoit][autoit][/autoit][autoit]

    Global $durchwahllabel = GUICtrlCreateLabel("Durchwahl:", 8, 44, 72, 21)
    Global $durchwahltemp = GUICtrlCreateInput(_AD_GetObjectAttribute(@UserName, "telephoneNumber"), 170, 40, 259, 21)
    GUICtrlSetLimit ($durchwahltemp,4)

    [/autoit][autoit][/autoit][autoit]

    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")

    [/autoit][autoit][/autoit][autoit]

    Global $telefonnummerlabel = GUICtrlCreateLabel("Telefonnummer:", 8, 76, 112, 21)
    Global $homenrtemp = GUICtrlCreateInput(_AD_GetObjectAttribute(@UserName, "homePhone"), 170, 72, 259, 21)

    [/autoit][autoit][/autoit][autoit]

    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    Global $faxdurchwahllabel = GUICtrlCreateLabel("FAX-Durchwahl:", 8, 110, 104, 21)
    Global $faxdurchwahltemp = GUICtrlCreateInput(_AD_GetObjectAttribute(@UserName, "facsimileTelephoneNumber"), 170, 104, 259, 21)
    GUICtrlSetLimit ($faxdurchwahltemp,4)

    [/autoit][autoit][/autoit][autoit]

    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    Global $Mobilfunknummerlabel = GUICtrlCreateLabel("Mobilfunknummer:", 8, 140, 112, 21)
    Global $mobilfunknummertemp = GUICtrlCreateInput(_AD_GetObjectAttribute(@UserName, "mobile"), 170, 136, 259, 21)
    GUICtrlSetLimit ($mobilfunknummertemp,13)

    [/autoit][autoit][/autoit][autoit]

    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    Global $bueronummerlabel = GUICtrlCreateLabel("Raumnummer:", 8, 172, 88, 21)
    Global $raumnummertemp = GUICtrlCreateInput(_AD_GetObjectAttribute(@UserName, "physicalDeliveryOfficeName"), 170, 168, 60, 21)

    [/autoit][autoit][/autoit][autoit]

    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")

    [/autoit][autoit][/autoit][autoit]

    ;Hier werden die 4 Schaltflächen erstellt sowie die Labels für die Statuszeile
    Global $BOK = GUICtrlCreateButton("Speichern", 136, 200, 73, 33, $BS_ICON)
    Global $Anzeige = GUICtrlCreateButton("Anzeige", 24, 200, 73, 33, $BS_ICON)
    Global $BCancel = GUICtrlCreateButton("Schließen", 256, 200, 73, 33, $BS_ICON)
    Global $Copyright = GUICtrlCreateLabel("Copyright by LichtBlick AG", 144, 360, 161, 20)
    Global $Softwarename = GUICtrlCreateLabel("LichtBlick Adressbuch AD-Tool", 96, 384, 243, 23)
    GUICtrlSetFont(-1, 12, 800, 0, "Arial")
    Global $Version = GUICtrlCreateLabel("Version: 1.0", 176, 408, 74, 20)
    $status = _GUICtrlStatusBar_Create($Form1_1)
    _GUICtrlStatusBar_SetText($status)
    _GUICtrlStatusBar_SetBkColor($status,0xFF0000)

    [/autoit][autoit][/autoit][autoit]

    Global $Pic1 = GUICtrlCreatePic("G:\Allg.Informationen, Formulare, Vorlagen\Vorlagen\LB_Logo\Logo Farbe 72.jpg", 0, 240, 444, 113, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit][autoit][/autoit][autoit]

    ;--------------ARRAY Anfang ----------------------
    GLOBAL $array_attribute[11][3]
    $array_attribute[0][0] = "company"
    $array_attribute[1][0] = "streetAddress"
    $array_attribute[2][0] = "postalCode"
    $array_attribute[3][0] = "l"
    $array_attribute[4][0] = "title"
    $array_attribute[5][0] = "info"
    $array_attribute[6][0] = "telephoneNumber"
    $array_attribute[7][0] = "homePhone"
    $array_attribute[8][0] = "facsimileTelephoneNumber"
    $array_attribute[9][0] = "pager"
    $array_attribute[10][0] = "mobile"

    [/autoit][autoit][/autoit][autoit]

    $array_attribute[0][1] = _AD_GetObjectAttribute(@UserName, "company")
    $array_attribute[1][1] = _AD_GetObjectAttribute(@UserName, "streetAddress")
    $array_attribute[2][1] = _AD_GetObjectAttribute(@UserName, "postalCode")
    $array_attribute[3][1] = _AD_GetObjectAttribute(@UserName, "l")
    $array_attribute[4][1] = _AD_GetObjectAttribute(@UserName, "title")
    $array_attribute[5][1] = _AD_GetObjectAttribute(@UserName, "info")
    $array_attribute[6][1] = _AD_GetObjectAttribute(@UserName, "telephoneNumber")
    $array_attribute[7][1] = _AD_GetObjectAttribute(@UserName, "homePhone")
    $array_attribute[8][1] = _AD_GetObjectAttribute(@UserName, "facsimileTelephoneNumber")
    $array_attribute[9][1] = _AD_GetObjectAttribute(@UserName, "pager")
    $array_attribute[10][1] = _AD_GetObjectAttribute(@UserName, "mobile")

    [/autoit][autoit][/autoit][autoit]

    $array_attribute[0][2] = _AD_GetObjectAttribute(@UserName, "company")
    $array_attribute[1][2] = _AD_GetObjectAttribute(@UserName, "streetAddress")
    $array_attribute[2][2] = _AD_GetObjectAttribute(@UserName, "postalCode")
    $array_attribute[3][2] = _AD_GetObjectAttribute(@UserName, "l")
    $array_attribute[4][2] = _AD_GetObjectAttribute(@UserName, "title")
    $array_attribute[5][2] = _AD_GetObjectAttribute(@UserName, "info")
    $array_attribute[6][2] = _AD_GetObjectAttribute(@UserName, "telephoneNumber")
    $array_attribute[7][2] = _AD_GetObjectAttribute(@UserName, "homePhone")
    $array_attribute[8][2] = _AD_GetObjectAttribute(@UserName, "facsimileTelephoneNumber")
    $array_attribute[9][2] = _AD_GetObjectAttribute(@UserName, "pager")
    $array_attribute[10][2] = _AD_GetObjectAttribute(@UserName, "mobile")

    [/autoit][autoit][/autoit][autoit]

    ;--------------ARRAY ENDE ----------------------

    [/autoit][autoit][/autoit][autoit]

    ;------Überprüfung der Rufnummern------------------------------------------
    func _wrong_chars_in_phonenumber($text)

    [/autoit][autoit][/autoit][autoit]

    local $test_string = $text

    [/autoit][autoit][/autoit][autoit]

    $test_string = StringReplace($test_string, "0", "")
    $test_string = StringReplace($test_string, "1", "")
    $test_string = StringReplace($test_string, "2", "")
    $test_string = StringReplace($test_string, "3", "")
    $test_string = StringReplace($test_string, "4", "")
    $test_string = StringReplace($test_string, "5", "")
    $test_string = StringReplace($test_string, "6", "")
    $test_string = StringReplace($test_string, "7", "")
    $test_string = StringReplace($test_string, "8", "")
    $test_string = StringReplace($test_string, "9", "")

    [/autoit][autoit][/autoit][autoit]

    if $test_string<>"" THEN
    RETURN TRUE
    ELSE
    RETURN FALSE
    EndIf
    endfunc
    ;--------------------------------------------------------
    ;Func changetelefondurchwahl

    [/autoit][autoit][/autoit][autoit]

    ;EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _DisplayError($message)
    GUICtrlSetBkColor($statusleiste,0xFF0000)
    GUICtrlSetColor($statusleiste,0x000000)
    GUICtrlSetData($statusleiste,$message)
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    While 1
    Global $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $BCancel
    Exit

    [/autoit][autoit][/autoit][autoit]

    Case $BOK

    [/autoit][autoit][/autoit][autoit]

    If Not IsDeclared("iMsgBoxAnswer") Then Global $iMsgBoxAnswer
    $iMsgBoxAnswer = MsgBox($MB_YESNO + $MB_ICONEXCLAMATION,"LichtBlick Adressbuch AD-Tool","Möchten Sie die am Benutzer vorgenommenen Änderungen Speichern ?",5)
    Select
    Case $iMsgBoxAnswer = $IDYES

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;Für die Durchwahl
    $array_attribute[6][2] = GUICtrlRead($durchwahltemp)
    IF $array_attribute[6][1] <> $array_attribute[6][2] THEN
    IF _wrong_chars_in_phonenumber($array_attribute[6][2]) THEN
    GUICtrlSetBkColor($durchwahltemp,0xFF0000)
    _GUICtrlStatusBar_SetText($status,"Bitte im Feld Durchwahl nur Zahlen eintragen Beispiel: 1337")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ELSE
    IF $array_attribute[6][2] = "" Then
    $templeer = ""
    _AD_ModifyAttribute($sUser, "telephoneNumber", $templeer)
    Else

    [/autoit][autoit][/autoit][autoit]

    global $temp2 = "+49 (0)40 /6360 -"
    _AD_ModifyAttribute($sUser, "telephoneNumber", $array_attribute[6][2])
    $array_attribute[7][2] = $temp2 & $array_attribute[6][2]
    _AD_ModifyAttribute($sUser, "homePhone", $array_attribute[7][2])
    MsgBox(64, "Fehlermeldung", "mit string")
    EndIf
    ENDIF
    EndIf

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;Für die Homenummer
    Global $internationvorwahl = "+49"
    $array_attribute[7][2] = GUICtrlRead($homenrtemp)
    IF $array_attribute[7][1] <> $array_attribute[7][2] THEN
    IF _wrong_chars_in_phonenumber($array_attribute[7][2]) THEN
    GUICtrlSetBkColor($homenrtemp,0xFF0000)
    _GUICtrlStatusBar_SetText($status,"Bitte im Feld Telef nur Zahlen eintragen Beispiel: 2130")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Else
    IF stringleft($array_attribute[7][2],1) = 0 THEN
    $array_attribute[7][2] = stringtrimleft($array_attribute[7][2],1)

    [/autoit][autoit][/autoit][autoit]

    $templeer = ""
    If $array_attribute[7][2] == $templeer THEN
    _GUICtrlStatusBar_SetText($status,"Wenn Leer")
    _AD_ModifyAttribute($sUser, "homePhone", $templeer)
    EndIf
    $array_attribute[7][2] = $internationvorwahl & $array_attribute[7][2]
    _AD_ModifyAttribute($sUser, "homePhone", $array_attribute[7][2])
    Else
    $array_attribute[7][2] = $internationvorwahl & $array_attribute[7][2]
    _AD_ModifyAttribute($sUser, "homePhone", $array_attribute[7][2])
    EndIf

    [/autoit][autoit][/autoit][autoit]

    EndIf
    ENDIF

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;Für die Faxdurchwahl
    $array_attribute[8][2] = GUICtrlRead($faxdurchwahltemp)
    IF $array_attribute[8][1] <> $array_attribute[8][2] THEN
    IF _wrong_chars_in_phonenumber($array_attribute[8][2]) THEN
    GUICtrlSetBkColor($faxdurchwahltemp,0xFF0000)
    _GUICtrlStatusBar_SetText($status,"Bitte im Feld Faxdurchwahl nur Zahlen eintragen Beispiel: 2130")

    [/autoit][autoit][/autoit][autoit]

    ELSE
    Global $temp3 = "+49 (0)40 /6360 -"
    global $faxtempnummer1 = $temp3 & $array_attribute[8][2]
    _AD_ModifyAttribute($sUser, "facsimileTelephoneNumber", $faxtempnummer1)
    ENDIF
    ENDIF

    [/autoit][autoit][/autoit][autoit]

    ;Für die Mobilfunknummer
    Global $vorwahlint = "+49"
    $array_attribute[10][2] = GUICtrlRead($mobilfunknummertemp)
    IF $array_attribute[10][1] <> $array_attribute[10][2] THEN
    IF _wrong_chars_in_phonenumber($array_attribute[10][2]) THEN
    MsgBox(64, "Fehlermeldung", "Bitte im Feld Mobilfunknummer nur Zahlen eintragen Beispiel: 017640203481")
    ELSE
    IF stringleft($array_attribute[10][2],1) = 0 THEN
    $array_attribute[10][2] = stringtrimleft($array_attribute[10][2],1)
    $templeer =""
    IF $array_attribute[10][2] == $templeer THEN
    _AD_ModifyAttribute($sUser, "mobile", $templeer)
    ENDIF
    ELSE
    $array_attribute[10][2] = $vorwahlint & $array_attribute[10][2]
    _AD_ModifyAttribute($sUser, "mobile", $array_attribute[10][2])

    [/autoit][autoit][/autoit][autoit]

    ENDIF
    ENDIF
    ENDIF

    [/autoit][autoit][/autoit][autoit]

    ;Für die Raumnummer
    Global $roomnummber = GUICtrlRead($raumnummertemp)
    IF $roomnummber = "" THEN
    $templeer =""
    _AD_ModifyAttribute($sUser, "physicalDeliveryOfficeName", $templeer)
    ELSE
    _AD_ModifyAttribute($sUser, "physicalDeliveryOfficeName", $roomnummber)
    ENDIF

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Case $iMsgBoxAnswer = $IDNO
    Exit
    Case $iMsgBoxAnswer = -1 ;Timeout
    Exit

    [/autoit][autoit][/autoit][autoit]

    EndSelect

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;--------------Funktion Adresse Fuellen Ende ----------------------
    ;MsgBox(64, "Adressbuch AD-Tool", "Daten für '" & $displayname & "' erfolgreich geändert ! ")
    Case $Anzeige
    MsgBox(64, "Anzeige für "& $displayname &"", @CRLF & "Titel( Akademischen Grad):" & @CRLF & $array_attribute[5][2] & @CRLF & "Windows Anmeldename:" & @CRLF &$sUser & @CRLF & "Durchwahl:" & @CRLF & $array_attribute[6][2] & @CRLF & "FAX-Druchwahl:" & @CRLF & $array_attribute[8][2] & @CRLF & "Mobilfunknummer:" & @CRLF & $array_attribute[10][2] & @CRLF & "Vollmacht:" & @CRLF & $array_attribute[9][2])
    EndSwitch
    WEnd
    _AD_Close()

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]

    Einmal editiert, zuletzt von scenix (16. Juni 2011 um 09:15)

  • Finde es mehr als anstrengend deinen Quellcode zu lesen. Es wäre sowohl in deinem als auch in unserem Interesse, wenn du das ganze besser strukturierst und die Zeilen sinnvoll mit Tabulatoren einrückst. Gerade bei verschachtelten if Bedingungen verliert man sonst sehr leicht den Überblick. Es ist auch unübersichtlich wenn man längere Codepassagen in den Case Fällen der GUI unterbringt. Besser wäre es in der While Schleife der GUI nur Funktionen aufzurufen. Funktionen folgen dann alphabetisch geordnet nach der while Schleife. Das erleichtert es ungemein den Ablauf des Programms zu verstehen.

    Mir ist auch nicht ganz klar was nun nicht so funktioniert wie du es gerne hättest, da ich weder die notwendige ad.au3 noch aktiviertes Active Directory hier habe, also schwer zu testen, falls dein Problem bei den AD Funktionen liegen sollte.

    Angeschaut habe ich mir jetzt mal den Code zur Homenummer. Da fällt auf, dass du für den Fall, dass jemand keine Nummer einträgt zweimal den Inhalt des Telefonbuches oder was auch immer die AD Funktion macht setzt. Zuerst schreibst du dort einen Leerestring rein, unmittelbar danach dann aber nochmals deine internationale Vorwahl plus den leeren String. Das Resultat ist bei keiner Angabe einer Telefonnummer also eine +49. Ob das so von dir gewollt war weiss ich nicht.

    Spoiler anzeigen
    [autoit]


    ;Für die Homenummer
    Global $internationvorwahl = "+49"
    Global $array_attribute[10][5]
    $array_attribute[7][1] = "+4955588155478"; old
    $array_attribute[7][2] = "" ; GUICtrlRead($homenrtemp)

    [/autoit] [autoit][/autoit] [autoit]

    IF $array_attribute[7][1] <> $array_attribute[7][2] THEN
    IF _wrong_chars_in_phonenumber($array_attribute[7][2]) THEN
    ;GUICtrlSetBkColor($homenrtemp,0xFF0000)
    ;_GUICtrlStatusBar_SetText($status,"Bitte im Feld Telef nur Zahlen eintragen Beispiel: 2130")
    MsgBox(0,"fehler","Bitte im Feld Telef nur Zahlen eintragen Beispiel: 2130")
    Else
    IF stringleft($array_attribute[7][2],1) = 0 THEN
    $array_attribute[7][2] = stringtrimleft($array_attribute[7][2],1)

    [/autoit] [autoit][/autoit] [autoit]

    $templeer = ""
    If $array_attribute[7][2] == $templeer THEN
    ;_GUICtrlStatusBar_SetText($status,"Wenn Leer")
    ;_AD_ModifyAttribute($sUser, "homePhone", $templeer)
    MsgBox(0,"","wenn leer") ; diese if bedingung sollte an dieser Stelle doch zum Abbruch führen, denn 4 Zeilen weiter unten ersetzt du das ganze nochmals...
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $array_attribute[7][2] = $internationvorwahl & $array_attribute[7][2] ; wäre wohl korrekter das ganze in der obigen if bedingung als else zweig zu verwenden
    ;_AD_ModifyAttribute($sUser, "homePhone", $array_attribute[7][2])

    [/autoit] [autoit][/autoit] [autoit]

    Else
    $array_attribute[7][2] = $internationvorwahl & $array_attribute[7][2]
    ;_AD_ModifyAttribute($sUser, "homePhone", $array_attribute[7][2])
    MsgBox(0,"","else zweig unten")
    EndIf
    EndIf
    ENDIF
    MsgBox(0,"","neue nummer: " & $array_attribute[7][2])

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    func _wrong_chars_in_phonenumber($text)

    [/autoit] [autoit][/autoit] [autoit]

    local $test_string = $text

    [/autoit] [autoit][/autoit] [autoit]

    $test_string = StringReplace($test_string, "0", "")
    $test_string = StringReplace($test_string, "1", "")
    $test_string = StringReplace($test_string, "2", "")
    $test_string = StringReplace($test_string, "3", "")
    $test_string = StringReplace($test_string, "4", "")
    $test_string = StringReplace($test_string, "5", "")
    $test_string = StringReplace($test_string, "6", "")
    $test_string = StringReplace($test_string, "7", "")
    $test_string = StringReplace($test_string, "8", "")
    $test_string = StringReplace($test_string, "9", "")

    [/autoit] [autoit][/autoit] [autoit]

    if $test_string<>"" THEN
    RETURN TRUE
    ELSE
    RETURN FALSE
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Ich würde ausserdem Leerzeichen in der gegebenen Telefonnummer einfach vor den restlichen Zeichenprüfungen mit stringreplace ersetzen/entfernen, denn sonst wird eine eingabe wie "04344 32325234" als falsch angesehen. Das selbe könntest du auch mit "-" und "/" machen. Eleganter lässt sich das auch mit regulären Ausdrücken prüfen bzw. ersetzen falls notwendig. StringRegExpReplace wäre da eine passende Funktion.

    Was mir aber nun noch nicht ganz klar ist ist die Sache ob und was nun letzten Endes mit den AD Funktion geschrieben wird. Enspricht das dem was im Array steht nachdem die Strings geprüft und überarbeitet wurden oder ist dem nicht so?
    Wolltest du nur wissen wie man den Code optimieren kann oder ist der code wirklich fehlerhaft?

    EDIT: Achja und verwende bitte den Spoiler Tag wenn du längere Quellcodes hier postest, sonst muss man sehr lange scrollen.

  • Hallo Misterspeed,


    der Quelltext zieht sich so langsam in die Länge und er wird unübersichtlich deswegen wollte ich das was ich fast wie bei Homenr, Mobilnummer drine habe als Funktion auslagern bloß wie :D

    desweitern habe ich die Frage ich möchte wenn alles OK ist wenn die Daten z.B. aus dem AD Richtig geladen wurden die Statusbar unten siehe Bild Grün einfärben wie im Bild.


    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #AutoIt3Wrapper_AU3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y
    ;--------------INCLUD ANFANG ----------------------
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <AD.au3>
    #Include <Array.au3>
    #include <GuiStatusBar.au3>
    #include "RestrictControlRegExp.au3"
    ;--------------INCLUD ENDE ----------------------

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $SDNSDomain, $SHostServer, $SConfiguration, $SPassword, $SUserId, $aTEMP , $status, $statusleiste , $templeer

    [/autoit] [autoit][/autoit] [autoit]

    ; Username+Passwort fuer Domainadmin
    $SUserID = ""
    $SPassword = ""

    [/autoit] [autoit][/autoit] [autoit]

    ; Open Connection to the Active Directory
    _AD_Open()
    $SDNSDomain = $sAD_DNSDomain
    $SHostServer = $sAD_HostServer
    $SConfiguration = $sAD_Configuration
    _AD_Close()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Open Connection to the Active Directory
    If _AD_Open($SUserId, $SPassword, $SDNSDomain, $SHostServer, $SConfiguration) THEN
    ElseIf @error <= 8 Then
    MsgBox(16, "Adressbuch AD-Tool", "The logon was not succcessful!" & @CRLF & @CRLF & "@error: " & @error & ", @extended: " & @extended)
    Else
    MsgBox(16, "Adressbuch AD-Tool", "The logon was not succcessful!" & @CRLF & @CRLF & "@error: " & @error & ", @extended: " & @extended & _
    @CRLF & @CRLF & "Extended error information will be displayed")
    Global $aError = _AD_GetLastADSIError()
    _ArrayDisplay($aError)
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $sUser = @UserName
    Global $displayname = _AD_GetObjectAttribute(@UserName, "displayName")
    Global $mail = _AD_GetObjectAttribute(@UserName, "mail")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _RegEx_RestrictControl_setup (20)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    Global $Form1_1 = GUICreate("Adressbuch AD-Tool", 444, 466, 299, 127)
    GUISetFont(10, 400, 0, "Arial")
    Global $name = GUICtrlCreateLabel("Name:", 8, 12, 120, 21)
    Global $nameanzeige = GUICtrlCreateLabel(_AD_GetObjectAttribute(@UserName, "givenName") & " " & _AD_GetObjectAttribute(@UserName, "sn"), 170, 12, 259, 21)

    [/autoit] [autoit][/autoit] [autoit]

    Global $durchwahllabel = GUICtrlCreateLabel("Durchwahl:", 8, 44, 72, 21)
    Global $durchwahltemp = GUICtrlCreateInput(_AD_GetObjectAttribute(@UserName, "telephoneNumber"), 170, 40, 259, 21)
    _RegEx_RestrictControl_add ($durchwahltemp, "^[0123456789]{0,4}$")
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")

    [/autoit] [autoit][/autoit] [autoit]

    Global $telefonnummerlabel = GUICtrlCreateLabel("Telefonnummer:", 8, 76, 112, 21)
    Global $homenrtemp = GUICtrlCreateInput(_AD_GetObjectAttribute(@UserName, "homePhone"), 170, 72, 259, 21)
    _RegEx_RestrictControl_add ($homenrtemp, "^[0123456789]{0,13}$")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    Global $faxdurchwahllabel = GUICtrlCreateLabel("FAX-Durchwahl:", 8, 110, 104, 21)
    Global $faxdurchwahltemp = GUICtrlCreateInput(_AD_GetObjectAttribute(@UserName, "facsimileTelephoneNumber"), 170, 104, 259, 21)
    _RegEx_RestrictControl_add ($faxdurchwahltemp, "^[0123456789]{0,4}$")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    Global $Mobilfunknummerlabel = GUICtrlCreateLabel("Mobilfunknummer:", 8, 140, 112, 21)
    Global $mobilfunknummertemp = GUICtrlCreateInput(_AD_GetObjectAttribute(@UserName, "mobile"), 170, 136, 259, 21)
    _RegEx_RestrictControl_add ($mobilfunknummertemp, "^[0123456789]{0,13}$")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    Global $bueronummerlabel = GUICtrlCreateLabel("Raumnummer:", 8, 172, 88, 21)
    Global $raumnummertemp = GUICtrlCreateInput(_AD_GetObjectAttribute(@UserName, "physicalDeliveryOfficeName"), 170, 168, 45, 21)
    _RegEx_RestrictControl_add ($raumnummertemp, "^[0123456789.]{0,5}$")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")

    [/autoit] [autoit][/autoit] [autoit]

    ;Hier werden die 4 Schaltflächen erstellt sowie die Labels für die Statuszeile
    Global $BOK = GUICtrlCreateButton("Speichern", 136, 200, 73, 33, $BS_ICON)
    Global $Anzeige = GUICtrlCreateButton("Anzeige", 24, 200, 73, 33, $BS_ICON)
    Global $BCancel = GUICtrlCreateButton("Schließen", 256, 200, 73, 33, $BS_ICON)
    Global $Copyright = GUICtrlCreateLabel("Copyright by LichtBlick AG", 144, 360, 161, 20)
    Global $Softwarename = GUICtrlCreateLabel("LichtBlick Adressbuch AD-Tool", 96, 384, 243, 23)
    GUICtrlSetFont(-1, 12, 800, 0, "Arial")
    Global $Version = GUICtrlCreateLabel("Version: 1.0", 176, 408, 74, 20)
    $status = _GUICtrlStatusBar_Create($Form1_1)
    _GUICtrlStatusBar_SetText($status)
    _GUICtrlStatusBar_SetBkColor($status,0xFF0000)

    [/autoit] [autoit][/autoit] [autoit]

    Global $Pic1 = GUICtrlCreatePic("G:\Allg.Informationen, Formulare, Vorlagen\Vorlagen\LB_Logo\Logo Farbe 72.jpg", 0, 240, 444, 113, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ;--------------ARRAY Anfang ----------------------
    GLOBAL $array_attribute[11][3]
    $array_attribute[0][0] = "company"
    $array_attribute[1][0] = "streetAddress"
    $array_attribute[2][0] = "postalCode"
    $array_attribute[3][0] = "l"
    $array_attribute[4][0] = "title"
    $array_attribute[5][0] = "info"
    $array_attribute[6][0] = "telephoneNumber"
    $array_attribute[7][0] = "homePhone"
    $array_attribute[8][0] = "facsimileTelephoneNumber"
    $array_attribute[9][0] = "pager"
    $array_attribute[10][0] = "mobile"

    [/autoit] [autoit][/autoit] [autoit]

    $array_attribute[0][1] = _AD_GetObjectAttribute(@UserName, "company")
    $array_attribute[1][1] = _AD_GetObjectAttribute(@UserName, "streetAddress")
    $array_attribute[2][1] = _AD_GetObjectAttribute(@UserName, "postalCode")
    $array_attribute[3][1] = _AD_GetObjectAttribute(@UserName, "l")
    $array_attribute[4][1] = _AD_GetObjectAttribute(@UserName, "title")
    $array_attribute[5][1] = _AD_GetObjectAttribute(@UserName, "info")
    $array_attribute[6][1] = _AD_GetObjectAttribute(@UserName, "telephoneNumber")
    $array_attribute[7][1] = _AD_GetObjectAttribute(@UserName, "homePhone")
    $array_attribute[8][1] = _AD_GetObjectAttribute(@UserName, "facsimileTelephoneNumber")
    $array_attribute[9][1] = _AD_GetObjectAttribute(@UserName, "pager")
    $array_attribute[10][1] = _AD_GetObjectAttribute(@UserName, "mobile")

    [/autoit] [autoit][/autoit] [autoit]

    $array_attribute[0][2] = _AD_GetObjectAttribute(@UserName, "company")
    $array_attribute[1][2] = _AD_GetObjectAttribute(@UserName, "streetAddress")
    $array_attribute[2][2] = _AD_GetObjectAttribute(@UserName, "postalCode")
    $array_attribute[3][2] = _AD_GetObjectAttribute(@UserName, "l")
    $array_attribute[4][2] = _AD_GetObjectAttribute(@UserName, "title")
    $array_attribute[5][2] = _AD_GetObjectAttribute(@UserName, "info")
    $array_attribute[6][2] = _AD_GetObjectAttribute(@UserName, "telephoneNumber")
    $array_attribute[7][2] = _AD_GetObjectAttribute(@UserName, "homePhone")
    $array_attribute[8][2] = _AD_GetObjectAttribute(@UserName, "facsimileTelephoneNumber")
    $array_attribute[9][2] = _AD_GetObjectAttribute(@UserName, "pager")
    $array_attribute[10][2] = _AD_GetObjectAttribute(@UserName, "mobile")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _GUICtrlStatusBar_SetText($status,"OK")
    While 1
    Global $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $BCancel
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case $BOK
    ;Für die Durchwahl
    $array_attribute[6][2] = GUICtrlRead($durchwahltemp)
    IF $array_attribute[6][1] <> $array_attribute[6][2] THEN
    IF $array_attribute[6][2] = "" Then
    $templeer = ""
    GUICtrlSetBkColor($durchwahltemp,0x99CC00)
    _AD_ModifyAttribute($sUser, "telephoneNumber", $templeer)
    Else
    GUICtrlSetBkColor($durchwahltemp,0x99CC00)
    GUICtrlSetBkColor($homenrtemp,0x99CC00)

    [/autoit] [autoit][/autoit] [autoit]

    global $temp2 = "+49 (0)40 /6360 -"
    _AD_ModifyAttribute($sUser, "telephoneNumber", $array_attribute[6][2])
    $array_attribute[7][2] = $temp2 & $array_attribute[6][2]
    _AD_ModifyAttribute($sUser, "homePhone", $array_attribute[7][2])
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Für die Homenummer
    Global $internationvorwahl = "+49"
    $array_attribute[7][2] = GUICtrlRead($homenrtemp)
    IF $array_attribute[7][1] <> $array_attribute[7][2] THEN
    $templeer = ""
    If $array_attribute[7][2] == $templeer THEN
    GUICtrlSetBkColor($homenrtemp,0x99CC00)
    _AD_ModifyAttribute($sUser, "homePhone", $templeer)
    _GUICtrlStatusBar_SetText($status,"Wenn Leer")

    [/autoit] [autoit][/autoit] [autoit]

    ElseIf stringleft($array_attribute[7][2],1) = 0 THEN
    GUICtrlSetBkColor($homenrtemp,0x99CC00)
    $array_attribute[7][2] = stringtrimleft($array_attribute[7][2],1)
    $array_attribute[7][2] = $internationvorwahl & $array_attribute[7][2]
    _AD_ModifyAttribute($sUser, "homePhone", $array_attribute[7][2])
    Else
    GUICtrlSetBkColor($homenrtemp,0x99CC00)
    $array_attribute[7][2] = $internationvorwahl & $array_attribute[7][2]
    _AD_ModifyAttribute($sUser, "homePhone", $array_attribute[7][2])
    EndIf
    ENDIF

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Für die Faxdurchwahl
    $array_attribute[8][2] = GUICtrlRead($faxdurchwahltemp)
    IF $array_attribute[8][1] <> $array_attribute[8][2] THEN
    $templeer =""
    IF $array_attribute[8][2] == $templeer THEN
    GUICtrlSetBkColor($faxdurchwahltemp,0x99CC00)
    _AD_ModifyAttribute($sUser, "facsimileTelephoneNumber", $templeer)
    Else
    GUICtrlSetBkColor($faxdurchwahltemp,0x99CC00)
    Global $temp3 = "+49 (0)40 /6360 -"
    global $faxtempnummer1 = $temp3 & $array_attribute[8][2]
    _AD_ModifyAttribute($sUser, "facsimileTelephoneNumber", $faxtempnummer1)
    EndIf
    ENDIF

    [/autoit] [autoit][/autoit] [autoit]

    ;Für die Mobilfunknummer
    Global $vorwahlint = "+49"
    $array_attribute[10][2] = GUICtrlRead($mobilfunknummertemp)
    IF $array_attribute[10][1] <> $array_attribute[10][2] THEN
    $templeer =""
    IF $array_attribute[10][2] == $templeer THEN
    GUICtrlSetBkColor($mobilfunknummertemp,0x99CC00)
    _AD_ModifyAttribute($sUser, "mobile", $templeer)
    ElseIf stringleft($array_attribute[10][2],1) = 0 THEN
    $array_attribute[10][2] = stringtrimleft($array_attribute[10][2],1)
    $array_attribute[10][2] = $vorwahlint & $array_attribute[10][2]
    GUICtrlSetBkColor($mobilfunknummertemp,0x99CC00)
    _AD_ModifyAttribute($sUser, "mobile", $array_attribute[10][2])
    ELSE
    $array_attribute[10][2] = $vorwahlint & $array_attribute[10][2]
    _AD_ModifyAttribute($sUser, "mobile", $array_attribute[10][2])

    [/autoit] [autoit][/autoit] [autoit]

    ENDIF
    ENDIF

    [/autoit] [autoit][/autoit] [autoit]

    ;Für die Raumnummer
    Global $roomnummber = GUICtrlRead($raumnummertemp)
    IF $roomnummber = "" THEN
    $templeer =""
    GUICtrlSetBkColor($raumnummertemp,0x99CC00)
    _AD_ModifyAttribute($sUser, "physicalDeliveryOfficeName", $templeer)
    ELSE
    GUICtrlSetBkColor($raumnummertemp,0x99CC00)
    _AD_ModifyAttribute($sUser, "physicalDeliveryOfficeName", $roomnummber)
    ENDIF

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;MsgBox(64, "Adressbuch AD-Tool", "Daten für '" & $displayname & "' erfolgreich geändert ! ")
    Case $Anzeige
    MsgBox(64, "Anzeige für "& $displayname &"", @CRLF & "Titel( Akademischen Grad):" & @CRLF & $array_attribute[5][2] & @CRLF & "Windows Anmeldename:" & @CRLF &$sUser & @CRLF & "Durchwahl:" & @CRLF & $array_attribute[6][2] & @CRLF & "FAX-Druchwahl:" & @CRLF & $array_attribute[8][2] & @CRLF & "Mobilfunknummer:" & @CRLF & $array_attribute[10][2] & @CRLF & "Vollmacht:" & @CRLF & $array_attribute[9][2])
    EndSwitch
    WEnd
    _AD_Close()

    [/autoit]


  • Auf deinem Bild ist die Statusbar nicht eingefärbt. Meinst du nun die Statusbar oder die Inputfelder? Scheinbar funktioniert die für die Statusbar gedachte Funktion nicht:

    [autoit]


    _GUICtrlStatusBar_SetBkColor($status,0xFF0000)

    [/autoit]

    Funktioniert bei mir unter Vista jedenfalls nicht, selbst das Beispiel aus der Hilfe bewirkt keine Farbveränderung. Im englischen Autoit Forum habe ich diese Lösung dafür gefunden, das klappt hier zumindestens, aber der ganze Fensterstil verändert sich dadurch:

    Spoiler anzeigen
    [autoit]


    #include <GuiConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <WinAPI.au3>
    #include <Constants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Dim $XS_n

    [/autoit] [autoit][/autoit] [autoit]

    $Debug_SB = False ; Check ClassName being passed to functions, set to True and use a handle to another control to see it work

    [/autoit] [autoit][/autoit] [autoit]

    _Main()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Main()

    [/autoit] [autoit][/autoit] [autoit]

    Local $hGUI, $hStatus
    Local $aParts[3] = [75, 150, -1]

    [/autoit] [autoit][/autoit] [autoit]

    ; Create GUI
    XPStyle(1)
    $hGUI = GUICreate("(Example 1) StatusBar Set BkColor", 400, 300)
    $hStatus = _GUICtrlStatusBar_Create ($hGUI)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ; Set parts
    _GUICtrlStatusBar_SetParts ($hStatus, $aParts)
    _GUICtrlStatusBar_SetText ($hStatus, "Part 1")
    _GUICtrlStatusBar_SetText ($hStatus, "Part 2", 1)

    [/autoit] [autoit][/autoit] [autoit]

    ; Set background color
    _GUICtrlStatusBar_SetBkColor ($hStatus, $CLR_MONEYGREEN)

    [/autoit] [autoit][/autoit] [autoit]

    ; Loop until user exits
    XPStyle(0)
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

    [/autoit] [autoit][/autoit] [autoit]

    Func XPStyle($OnOff = 1)
    If $OnOff And StringInStr(@OSTYPE, "WIN32_NT") Then
    $XS_n = DllCall("uxtheme.dll", "int", "GetThemeAppProperties")
    DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 0)
    Return 1
    ElseIf StringInStr(@OSTYPE, "WIN32_NT") And IsArray($XS_n) Then
    DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", $XS_n[0])
    $XS_n = ""
    Return 1
    EndIf
    Return 0
    EndFunc ;==>XPStyle

    [/autoit]

    Ich persönlich würde da dann doch eher aufs Einfärben verzichten wollen.

  • Mir fällt btw. noch auf, dass dein _AD_Close() ausserhalb der GUI Schleife ist. Beim beenden wird diese Funktion also garnicht mehr aufgerufen. Entweder du ersetzt das exit durch ein exitloop oder aber du packst das adclose vor dein exit.
    Um Übersicht zu schaffen kannst du zum Beispiel für jede Feldart den kram in eine Funktion schreiben, also dein case würde dann nur noch so ausschaun:

    [autoit]


    Case $BOK
    Durchwahl()
    home()
    fax()
    mobile()
    ;usw
    ;...

    [/autoit][autoit][/autoit][autoit]

    func home()
    ; hier halt dann das was du oben im case grad drin hast
    endfunc

    [/autoit]

    Besser wäre es natürlich wenn du die einzelnen Dinge zusammenfasst, also für home und mobile zum Beispiel nur eine Funktion benötigst. Das geht immer dann wenn du fast das selbe machst und es kaum Unterschiede gibt. Würde behaupten, dass das bei dir recht einfach wäre, hab jetzt aber auch nicht wirklich lust mir das genauer anzuschaun.