Picture of Muschelpuster
Registered 7 years 344 days
Muschelpuster Thursday, 27 May 2021, 06:52 PM
LDAP-Replicator RegEx
Moin zusammen,

ich habe zwar die eine oder andere Erfahrung mit RegExen aber leider wenig mit dem Inno-Replikator. Da habe ich heute schon wieder einiges gelernt und aufgefrischt, bin aber noch nicht ganz am Ziel. Das Beispiel aus dem Wiki funktioniert da auch nicht wirklich, oder ich habe es nicht korrekt angepasst:
%tel%loc=/sifi/%node=/root/:\+49.*7031.*12345-(.*)
Ok, es soll die Variable %loc mit dem String 'sifi' , %node mit 'root' und %tel mit der Nebenstelle gefüllt werden, wenn der reguläre Ausdruck zuschlägt. Da war ich leider nicht erfolgreich. Stimmt das so überhaupt noch?
Ich brauche ja hier für jeden Standort eine eigene Zeile, daher habe ich mir gedacht, dass ich die Nodes einfach wie die E.164 des Standortes nenne, aber auch da bin ich noch nicht ganz glücklich mit meiner Manipulation.
Ich bekomme die Rufnummer aus dem AD in der Form +49 (123) 4567-89, wobei die Leerzeichen nicht zuverlässig gesetzt sind.
Um den String nun nicht zu kompliziert zu machen, dachte ich mir, erst einmal die Rufnummer in ihre Ortsnetzkennzahl, die Anlagenrufnummer und die DuWa zu splitten. Das sieht wie folgt aus:
telephoneNumber -> %Tel=/\1/:\+.*-\D*(\d*)\D*
telephoneNumber -> %OKz=/\1/:\+.*\((\d*)\).*
telephoneNumber -> %AnlKz=/\1/:\+.*\)\D*(\d*)\D.*
Diese regulären Ausdrücke sind so relativ fehlertolerant und für meinen begrenzten Horizont ok so.
Nun will ich die in der Out-Definition zur Node machen und habe mir folgendes gedacht:
node <- '+49'%OKz%AnlKz
E164 <- %Tel
Das scheint so nicht zu funktionieren. Ok, die E164 schon, aber die Node nicht. Sieht da jemand meinen Fehler oder kann mein evtl. grundsätzlich falsches Denken stoppen?

Die halbhohe Schule wäre (wenn ich es richtig verstehe) ja ein Einzeiler:
telephoneNumber -> %node=/\1/\2/\3/\4/sad\+)\D*(\d*)\D*\(\D*(\d*)\D*\)\D*(\d*)\D*-\D*(\d*).*
Das klappt so auch nicht, aber ich verstehe auch noch nicht so recht die Regeln für die Slash-Zeichen. Wann wird eines gebraucht, wann nicht und was machen die genau? Ich sollte ja sogar alles in eine Zeile pressen können, aber das ist für mich dann definitiver Overkill:
telephoneNumber -> %Tel=/\5/%node=/\1/\2/\3/\4/sad\+)\D*(\d*)\D*\(\D*(\d*)
Kann man irgendwo debuggen, wie die Variablen tatsächlich gefüllt werden? ich habe auf der debug.xml das LDAP-Log aktivert, was schon sehr hilfreich ist, aber das konnte ich trotzdem nicht im Log finden.

reguläre Grüße
Niels
Picture of Muschelpuster
Registered 7 years 344 days
Muschelpuster Thursday, 27 May 2021, 07:03 PM
Re: LDAP-Replicator RegEx
Verdammt, da sollten natürlich keine Smilies rein. Denkt Euch da einfach einen Doppelpunkt gefolgt von einer runden Klammer auf.

korrigerende Grüße
Niels
Picture of Muschelpuster
Registered 7 years 344 days
Muschelpuster Thursday, 27 May 2021, 07:10 PM in response to Muschelpuster
Re: LDAP-Replicator RegEx
Und bei den Versuchen des Korrigierens mit dem Druck der 2 Minuten im Nacken ist der letzte String für den Einzeiler la auch komplett daneben gegangen. Versuche ich es doch nochmal:
(\+)\D*(\d*)\D*\(\D*(\d*)\D*\)\D*(\d*)\D*-\D*(\d*).*

gehetzte Grüße
Niels
Picture of Peter 627
Registered 13 years 122 days
Peter 627 Friday, 28 May 2021, 07:59 AM
1 of 1 users consider this post helpful
Re: LDAP-Replicator RegEx
Hi Niels,

anbei mein Vorschlag. Ich setze aber allerdings vorraus dass der Kunde sein AD einheitlich pflegt an den Stellen wenn wir zum Beispiel die Rufnummern aus einem bestimmten Feld nehmen.
In meinem Bespiel nehme ich das Feld ipPhone und nutze das sowohl für die Durchwahlnummer als auch für die Platzierung in die Node.
Ist eine E164 PBX mit ca 5000 Teilnehmern und es wird alles über diese Regel erschlagen smile.

Nach langen hin und her forschen halte ich das für eine der sinnigsten Anschaltungen bei größeren Systemen.

Gruß

Peter
ad-replikator.JPG

Profilbild
Registered 12 years 102 days
Tobias 847 Friday, 28 May 2021, 08:19 AM
Re: LDAP-Replicator RegEx
Hi Nils,

hier der String aus der ersten Zeile als Beispiel:
%tel=/\1/%loc=/PBXNAME/%node=/NODENAME/:\+49123456(.*)
eine andere:
%tel=/\1/%loc=/PBXNAME/%node=/NODENAME/:\+49.*1234.*5678(.*)


Das mal als Inspiration smile
ldap.png

Picture of Peter 627
Registered 13 years 122 days
Peter 627 Friday, 28 May 2021, 08:38 AM in response to Peter 627
Re: LDAP-Replicator RegEx
Ich vergaß noch das Format der Rufnummer in dem Fall im Feld iphone ist :
+49 234 56789-Durchwahl.

Gruß

Peter
Picture of Jesse 4205
Registered 6 years 61 days
Jesse 4205 Friday, 28 May 2021, 08:47 AM in response to Peter 627
Re: LDAP-Replicator RegEx
Hallo zusammen,

ich habe das so wie in Tobias Beispiel zuverlässig am laufen, aber halt für jeden Standort eine Zeile.

Die Idee der Benennung der Nodes wie in Peters Beispiel finde ich super, macht das ganze Mapping im Import viel schlanker. Ich werde das bei Zeiten mal probieren.

Das nicht zuverlässige Leerzeichen im AD sollte aber eigentlich dank der Wildcard * nicht so wild sein.

Grüße
Jesse
Picture of Muschelpuster
Registered 7 years 344 days
Muschelpuster Friday, 28 May 2021, 03:38 PM
Re: LDAP-Replicator RegEx
Na ja Jesse, bei der Zuordnung der Node stört das nicht, aber bei der Rufnummer schon. Wenn nach dem Bindestrich noch ein Leerzeichen steht...
Das hat natürlich etwas mit der Datenpflege zu tun, das ist ja ein IT-System und keine Kläranlage. Wo Sch.. rein geht, kommt in etwa das Gleiche raus wink
Aber auf Basis der regulären Ausdrücke fühle ich mich inzwischen wieder halbwegs wohl. Wenn ich das exzessiv treibe, bekomme ich alles abgefangen:
\+(\d+)\D*\(\D*([^0]\d+)\D*\)\D*(\d+)\D*-\D*([^0]\d*).*
Das erwartet die Nummer im Format +49(123)456-789, stößt sich aber nicht daran wenn an den üblichen Stellen andere Zeichen dazwischen sind, es funktioniert auch +49ab(cd123ef)_456-x789y.
Zudem werden Rufnummern nicht übernommen, bei denen die DuWa auf 0 steht oder die Vorwahl mit einer 0 beginnt.

ausufernde Grüße
Niels
Picture of Muschelpuster
Registered 7 years 344 days
Muschelpuster Friday, 28 May 2021, 03:42 PM in response to Muschelpuster
Re: LDAP-Replicator RegEx
Danke Euch,

ich werde da in der nächsten Woche nochmal angreifen und berichten.
Wie man mehrere Capture Groups aus dem regulären Ausdruck einer Variable zuweisen kann hat sich mir noch nicht erschlossen. Ist das nun %test=/\1/\2 oder %test=/\1\2 oder was ganz Anderes?

nachgefragte Grüße
Niels


Picture of Muschelpuster
Registered 7 years 344 days
Muschelpuster Monday, 31 May 2021, 11:01 PM
Re: LDAP-Replicator RegEx
So, jetzt weiß ich, warum das allles nicht so funktioniert. Man muss auch die Fußnoten im Wiki lesen:
We use POSIX 1003.2 regular expressions syntax, see e.g. https://www.freebsd.org/cgi/man.cgi?query=re_format&sektion=7&apropos=0&manpath=FreeBSD+10.3-RELEASE+and+Ports for a detailed description
Dieser Dialekt versteht wohl weder \d noch \D angry
Und der im Wiki verlinkte RegEx-Checker kennt diesen Dialekt nicht (mehr). Ich habe dazu jetzt aber Einen gefunden: https://www.regextester.com/99203
Mal sehen, wie ich da weiter komme.

dialektische Grüße
Niels



Picture of Muschelpuster
Registered 7 years 344 days
Muschelpuster Tuesday, 1 June 2021, 02:09 PM
Re: LDAP-Replicator RegEx
So, jetzt klappt es weitesgehend. Mehrere Treffergruppen im In-Map einer Variable zufügen ist mir nicht gelungen, ich habe mehrere Variablen gefüllt und die im Out-Map einem Ziel-Attribut zugewiesen. Eine halbwegs abgesicherte Telefonnummer ziehe ich jetzt so: telephoneNumber -> %tel=/\1/:\+49.*-[^[:digit:]]*([^0]fish-help.png +) Damit
Picture of Muschelpuster
Registered 7 years 344 days
Muschelpuster Tuesday, 1 June 2021, 02:10 PM in response to Muschelpuster
Re: LDAP-Replicator RegEx
So, jetzt klappt es im Groben. Mehrere Treffergruppen im In-Map einer Variable zufügen ist mir nicht gelungen, ich habe mehrere Variablen gefüllt und die im Out-Map einem Ziel-Attribut zugewiesen. Eine halbwegs abgesicherte Telefonnummer ziehe ich jetzt so:
telephoneNumber -> %tel=/\1/:\+49.*-[^[:digit:]]*([^0]fish-help.png +)
Damit fange ich diverse Eingabefehler ab. Das funktioniert auf fast jede Idee die so ein AD-Admin kommt, solange die Nebenstelle durch einen Bindestrich abgetrennt ist. Hier ist es jetzt auch egal, ob nach dem Bindestrich nochmal ein Leerzeichen folgt oder nicht. Hat ein User keine Durchwahl und es steht hinter dem Bindestrich die 0, so wird der Eintrag ignoriert. Nur wenn dann noch ein Leerzeichen vor dem Bindestrich ist funktioniert das nicht und ich habe keine Idee wie ich das noch abfangen kann. Aber das darf auch gerne auf der AD-Seite vernünftig eingegeben werden wink

gelöste Grüße
Niels

PS: Natürlich ist da kein Goldfisch drin, also hier nochmal als Screenshot:

tel-regex.png

← You can define your color theme preference here