Exchange-Connector Import von Adressen ohne Name (Mapping)

Hallo,

ich habe ein Exchange-Adressbuch mittels des Connectors importiert und es fehlen alle Adressen ohne Name und Vorname bzw. das Mapping erfasst solche Adressen anscheinend nicht.


Kennt jemand eine Lösung das Mapping entsprechend anzupassen oder hat eine andere Idee? …allerdings kann ich nicht die Adressdaten im Exchange bzw. der eigentlichen Quelle anpassen wie z.B. die Firmenbezeichnung zusätzlich in das Name-Feld kopieren o.ä.

Gruß Steve

Hallo Steve,

eigentlich sollte Vor- und Nachname kein Pflichtfeld sein, ich lasse das mal prüfen. Du kannst aber auch im Connector under Variablen Surname und GivenName z.B. mit
return $row’CompanyName’];
befüllen.

Grüße,
Steve

Hallo Steve,

danke für den Vorschlag. In diese Richtung hatte ich auch schon überlegt, allerdings möchte ich ungern alle Vor- und/oder Nachnamen mit dem Firmennamen befüllen, sondern lediglich solche ohne Vor- und Nachname.

Wie mir mittlerweile aufgefallen ist, steht ja im Pre-Filter-Tab das nur Adressen mit einem DisplayName importiert bzw. gemappt werden. Der DisplayName setzt sich wohl aus dem Vor- und Nachnamen zusammen. Wenn im Pre-Filter DisplayName mit CompanyName ersetzt wird,

fehlen allerdings alle Adressen welche keinen Firmennamen haben und im Log steht zusätzlich, dass das Feld DisplayName nicht leer sein darf.
Immerhin bringt mir diese Variante aber schon mehr Adressen in das Telefonbuch.

Andere Variablen im Pre-Filter zu benutzen, wie z.B. PhoneNumbers_BusinessPhone, hat leider zu keinem besseren oder gar keinem Ergebnis geführt. Die Dokumentation enthält hierzu noch keine weiteren Informationen oder Beispiele.
Hast du zu den Pre-Filter-Einstellungen noch eine Idee?

Beste Grüße,
Steve

Hallo Steve,

sowohl der pre-Filter als auch das eigentliche Variablen-Mapping sind PHP-Code, d. h. du kannst hier ohne weiteres Logik Unterbringen. Ein (sehr kurzes und ungetestetes Beispiel):

Pre-Filter:


return !empty($row'CompanyName']) || !empty($row'DisplayName']);

Variable für DisplayName:


return empty($row'DisplayName']) ? $row'CompanyName']  :  $row'DisplayName'];

Das sollte dein Problem lösen - Solange entweder Company oder Display name gesetzt ist im Exchange, wird der Datensatz importiert. Der Anzeigename ist dann dementsprechend entwder der DisplayName, oder als fallback der CompanyName.

Grüße,
Jan

Hallo Jan,

vielen Dank für den Hinweis und das Beispiel. Pre-Filter und DisplayName-Variable habe ich genauso angepasst und es funktioniert wie gewünscht, danke.

In Bezug auf Import und Update der Adressen ist mir noch etwas aufgefallen. Werden Adressen mit der selben Firmenbezeichnung und lediglich unterschiedlichen Telefonnummern und ohne sonstige Unterscheidungsmerkmale importiert, erkennt der Import das als Update und es bleiben lediglich die zuletzt gelesenen Adressdaten im Telefonbuch erhalten. Auch hier gestaltet sich das Anpassen der zu importierenden Kontakte (aus Cobra über Exchange) für mich schwierig bzw. kann es auch immer wieder passieren dass ein Benutzer einen Adresseintrag in dieser Weise anlegt, sprich eine Adresse dupliziert und lediglich die Telefonnummer bzw. Durchwahl ändert. Dieser Umstand betrifft in meinem Fall aktuell nur ca. 1 % der Adressdaten und das ist verkraftbar, deshalb würde ich deswegen kein neues Thema öffnen, wollte es aber mal erwähnt haben.

Beste Grüße,
Steve

Hallo Steve,

schön wenn es klappt!

Das Verhalten beim DisplayName ist so gewollt. Der Anzeigename (displayname) dient bei uns als “fachlicher” Schlüssel um die Datensätze aus dem Fremdsystem (hier Exchange) eindeutig Identifizieren zu können. (Der Hintegrund: “displayname” landet bei uns in der Spalte “028pho_bez” im Telefonbuch, die wie fast alle Anzeigenamen / Bezeichnungen eine UNIQUE-Einschränkung auf Datenbankebene hat) Aus Sicht des Connectors bedeutet: gleicher Anzeigename = gleicher Datensatz - was dann zu dem von dir beschriebenen Update-Verhalten führt.

Wenn du das verhindern möchtest, musst du im bei den Variablen eine entsprechende “eindeutige” Kombination für den displayname erzeugen.

Grüße,
Jan

Hallo Jan,

danke für deine Rückmeldung und die Hinweise zur Identifizierung der Einträge. Nach Betrachtung der Adressen welche auf Grund des doppelten Anzeigenamens überschrieben werden, sind mir folgende Konstellationen aufgefallen. Dabei ist zu berücksichtigen, dass als Anzeigename das oben genannte Schema verwendet wird: WENN Anzeigename=leer DANN Firmenname SONST Anzeigename.

In unterschiedlichen Firmen gibt es Personen mit gleichen Namen oder eine Person ist unter mehreren Firmen erreichbar
In einer Firma gibt es Personen mit dem selben Namen
In einer Firma gibt es mehrere Abteilungen aber keine Einträge zu Personennamen

Nun müsste ich also die Variable Displayname , da es ja als “eindeutige” Identifizierung dient, mit allen notwendigen Werten füttern, um für diese Fälle einen eindeutigen Anzeigenamen zu erhalten (Vor-Nachname, Firmenname, Abteilung) und um ein Update zu verhindern, dementsprechend lang wäre dann aber auch der Anzeigename. Praktikabel wäre das allerdings nur wenn sich dann auch einzelne Werte im Anzeigenamen ausblenden ließen, da ich optimalerweise selbst bestimmen möchte, welche Informationen im Anzeigenamen angezeigt werden. Nebenbei wäre hier ein Menü zum Hinzufügen und Sortieren der Werte des Displaynamens SEHR komfortabel (z.B. analog der Menüs zum Zuweisen von Geräten, Benutzern, Rechten, usw.) .
Leider scheitere schon nur den Firmennamen mit in das Anzeigefeld aufzunehmen, trotz unzähliger Versuche… :confused:

Mit einem Array bekomme ich zwar in der Connector-Import-Simulation das gewünschte Ergebnis angezeigt, sprich Vor- + Nachname, Firmenname, allerdings gelingt das nicht beim tatsächlichen Import, dort erscheint im Anzeigenamen nur “array”

return empty($row'DisplayName']) ? $row'CompanyName']    :  **array($row'DisplayName'],$row'CompanyName']);**



Wenn du oder jemand mir noch ein paar Hinweise zur gewünschten Umsetzung geben könnte, wäre ich sehr dankbar.

Grüße,
Steve

Hallo Steve,

dein Fehler ist sehr simpel: Das Ergebnis eines Feldmappings sollte immer ein String sein, kein Array(). Dein Code müsste eher so aussehen:


return empty($row'DisplayName']) ? $row'CompanyName']  :  $row'DisplayName']  . '  ' .  $row'CompanyName'];

Das die Simulation das Array auflöst und anzeigt ist interessant - sollte eigentlich nicht so sein.

Grüße,
Jan

Hallo Jan,

vielen Dank für die Berichtigung, genauso klappt es dann auch wie gewünscht. Perfekt!

Grüße,
Steve