Adresse als Kontakt einer Firma hinzufügen

Ereignisaktion - Kurzfassung

Zweck: Ordnet eine als Bezugsobjekt vorliegende Adresse einem Firmenkonto als Adresskontakt mit einem bestimmten Kontakttyp zu.

Siehe auch: Adressen, Kontakttyp, Adresse (Ereignisse), Button "Als Kontakt der Firma hinzufügen"

images/download/attachments/189439250/image-2024-11-25_15-46-36-version-1-modificationdate-1732545996458-api-v2.png

Die Ereignisaktion Adresse als Kontakt einer Firma hinzufügen kann mit einer Entität des Typs "Adresse" als Bezugsobjekt ausgeführt werden, um die Adresse einem Firmenkonto (s. Firmen) als Adresskontakt mit einem bestimmten Kontakttyp zuzuordnen.

Dabei gelten folgende Regeln:

  1. Eine Adresse wird nur dann hinzugefügt, wenn sie innerhalb der Adresse des Firmenkontos bisher noch nicht als Adresskontakt für denselben Kontakttyp zugeordnet ist.

  2. Sofern der Kontakttyp in der Dynamischen Aufzählung nicht als "plural" qualifiziert ist, ersetzt ein hinzugefügter Adresskontakt einen bestehenden für denselben Kontakttyp.

HINWEISE

  • Das Hinzufügen einer Adresse als Adresskontakt der Zielfirma impliziert das Speichern des betreffenden Firmenkontos, sofern dessen Adresse die Kombination aus Adress-ID und Kontakttyp noch nicht enthält (s. Regel Nr. 1 oben).

  • Für das Firmenkonto der Zielfirma wird beim Speichern entweder das Ereignis "Ändern" (existierende Firmenkonto) oder "Erstellen" (neues Firmenkonto) ausgelöst.

  • Fehlt das betreffenden Zugriffsrecht ("Ändern" bzw. "Erstellen") für das Firmenkonto der Zielfirma, bricht die Ereignisbehandlung mit Fehler (inkl. Rollback) ab.

  • Falls für mindestens einen der Parameter Kontakttyp oder Zielfirma (s. "Konfiguration") zur Laufzeit kein geeigneter Wert anliegt, bricht die Ereignisbehandlung mit Fehler (inkl. Rollback) ab.

Besonderer Anwendungsfall:

In Erfassungsmasken kann der Button "Als Kontakt der Firma hinzufügen" verwendet werden, um im Kontext einer Adress-Suche (s. Formularelement "Adresse") für ein "Firmen-und Adressattribut" das Ereignis "Adresse hinzufügen" (s. Adresse (Ereignisse)) auszulösen.

Dieser Button kann dann sinnvoll eingesetzt werden, wenn sich die Adresssuche per Auswahlfeld/Combobox abweichend vom Standard nicht auf Adressbucheinträge sondern auf Adresskontakte einer bestimmten Firma bezieht. Die Verknüpfung zur Firma muss zur Laufzeit über die Aktion Kontakte dieser Firma verwenden hergestellt werden. In der Regel geschieht das als Reaktion auf die Auswahl der Firma in einem anderen Auswahlfeld/Combobox-Element (Details s. Button "Als Kontakt der Firma hinzufügen").

Das Ereignis übergibt primär die betreffende Adresse als Eingabewert. Zusätzlich werden weitere Daten aus dem Aufrufkontext in Variablen bereitgestellt:

Variablenname

Datentyp

Inhalt

contactCompanyId
Long

ID der Firma, deren Adresskontakte im Formular im Auswahlfeld/Combobox für die Adress-Suche angeboten wurden.

contactTypes

Liste von Kontakttyp

Liste aller Kontakttypen, die in der Service-Konfiguration für dieses Auswahlfeld/Combobox als relevant ausgewählt sind.

contactType

Kontakttyp (ContactType)

Der erste Eintrag (Kontakttyp) der Liste in der Variablen contactTypes.

Sofern in der Adress-Suche genau ein Kontakttyp als relevant ausgewählt ist, können die Variablen contactType und contactCompanyId in der Ereignisaktion Adresse als Kontakt einer Firma hinzufügen direkt in die Parameter Kontakttyp und Zielfirma übertragen werden.

Bezieht sich die Adress-Suche auf mehr als einen Kontakttyp, muss die Ereignisbehandlung eine Festlegung treffen oder - ggf. unter Berücksichtigung der Liste in der Variablen contactTypes - vom Benutzer abfragen (s. Beispiel "Besonderer Anwendungsfall" unten).

Hintergrund zum "Adresskontakt"

Ein Adresskontakt (addressContact) ist ein typisiertes Attribut, das nur für Adressen angeboten wird (s. a. Formularelement "Adresskontakt"). Jedem Adresskontakt muss ein (Sub-)Typ aus der Dynamischen Aufzählung Kontakttyp zugewiesen werden. Abhängig von der Option "Plural" für den Kontakttyp in der Dynamischen Aufzählung kann dieser in derselben Adresse nur einmal oder mehrfach vorkommen. Als Wert eines Adresskontakt-Attributs gilt die im gleichnamigen Feld eingebettete "Adresse" (address).

WICHTIG◄ Es Adressen werden in Lobster Data Platform / Orchestration als Referenzierte Objekte gehandhabt, deren ID sich ändert, wenn sich Adressmerkmale ändern. Ein über die Ereignisaktion Adresse als Kontakt einer Firma hinzufügen hinzugefügter Adresskontakt bezieht sich auf eine bestimmte Adress-ID und damit eine bestimmte Merkmalskombination für Adressdaten. Wird die hinzuzufügende Adresse aus einem bestehenden Datenobjekt "gelesen", entsteht keine Verknüpfung zu diesem Herkunftsobjekt. Änderungen an den Adressdaten im Herkunftsobjekt wirken sich also nicht auf einen erstellten Adresskontakt aus, sondern verändern die Adress-ID im Herkunftsobjekt, während der Adresskontakt solange weiter auf die ursprüngliche Adress-ID verweist, bis durch Zugriff auf das Adressfeld im Adresskontakt Adressdetails verändert werden. Operativ wirkt die Ereignisaktion .Adresse als Kontakt einer Firma hinzufügen v4.12.0 also ähnlich, als würde ein Schnappschuss der Adresse aus dem Herkunftsobjekt als Adresskontakt hinzugefügt.

Konfiguration

WICHTIG◄ Die Adresse, die einem Firmenkonto als Adresskontakt hinzugefügt werden soll, muss als Bezugsobjekt für die Ereignisaktion vorliegen. Sofern die Ereignisbehandlung nicht insgesamt mit einer Entität des Typs "Adresse" als Eingabewert ausgeführt wird, muss für die Ausführung der Ereignisaktion zunächst ein Kontext mit einem geeigneten Bezugsobjekt definiert werden. Dies ermöglichen z. B. Ereignisaktionen wie Ausführen mit oder ggf. eine Für jeden Eintrag wiederholen (Schleife) über eine Liste von Adressen.

  • Als Kontakttyp muss einer der Werte der Dynamischen Aufzählung Kontakttyp oder eine Zeichenfolge angegeben werden, die dem internen Namen eines dieser Werte entspricht. Eine statische Zuordnung per Auswahlfeld ermöglicht ggf. der Wertauflöser "Jede dynamische Aufzählung" aus der der Kategorie Statische Werte.

  • Der Wertauflöser für die Zielfirma kann entweder eine Entität vom Typ "Firmenkonto"(base:CompanyAccount) als Rückgabewert liefern oder alternativ eine Ganzzahl (Long), die der ID (id) eines existierenden Firmenkontos entspricht, für das mindestens Lesezugriff bestehen muss.

HINWEIS◄ Liegt für mindestens einen dieser Parameter zur Laufzeit keiner oder ein ungeeigneter Wert an, bricht die Ereignisbehandlung mit einer Fehlermeldung (und ggf. Rollback) ab.

images/download/attachments/189439250/image2021-5-4_9-37-40-version-1-modificationdate-1732545977795-api-v2.png

Beispiele

Allgemeiner Anwendungsfall

In einem mit Lobster Data Platform / Orchestration realisierten B2B-Portal möchte der Betreiber für seine Business-Kunden Firmenkonten für die Anmeldung am Portal anlegen und verwalten. Die Administration dieser Firmenkonten ist die Aufgaben von sogenannten "Kundenbetreuern" beim Betreiber, für die zu diesem Zweck eine eigene Rolle "CustomerAccountManager" eingerichtet ist.

Beim Speichern (Erstellen oder Ändern) eines Firmenkontos durch einen Benutzer, der die Rolle "CustomerAccountManager" verwendet, soll im betreffenden Firmenkonto automatisch die Adresse aus dessen Benutzerkonto als Adresskontakt hinzugefügt werden. Dabei soll der Kontakttyp "Kundenbetreuer" (mit dem internen Namen ACCOUNT_MANAGER) angegeben werden, der speziell für diesen Zweck angelegt wurde. Dabei soll für jeden Kunden immer genau ein "Kundenbetreuer" zuständig sein. Ein bestehender Adresskontakt für den Kontakttyp "Kundenbetreuer" soll daher immer ersetzt werden, wenn für denselben Kontakttyp eine abweichende Adresse hinzugefügt wird.

ANMERKUNG◄ Für eine praktische Anwendung ist es wichtig zu berücksichtigen, dass die Adresse im hinzugefügten Adresskontakt nur solange mit der Adresse im Benutzerkonto übereinstimmt, bis an einer der beiden Positionen ein Adressmerkmal geändert wird (s. Inbfobox "Hintergrund" oben). Wir die Adresse im Benutzerkonto geändert nachdem der Adresskontakt hinzugefügt wurde, ändert sich die Adress-ID auf die das Benutzerkonto verweist, während der Adresskontakt noch auf die ursprüngliche Adress-ID verweist und unverändert deren Daten anzeigt. Eine Aktualisierung bzw. Synchronisation würde zusätzliche Vorkehrungen erfordern.

Laufzeitbeispiel:

Die Benutzerin "Karola Mustermann" ist für den Portalbetreiber (Xflow AG) als "CustomerAccountManager" angemeldet und greift über die "Firmenübersicht" auf das Firmenkonto einer Kundenfirma zu:

  • Im Tab "Kontakte" werden dort die Adresskontakte der Firma aufgelistet. Bisher verweist die Liste der Kontakte nur auf den "Geschäftsführer".

    ANMERKUNG◄ Das Formularlayout im Bild rechts wurde gegenüber dem Standard leicht angepasst. U. a. wird das Symbol images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/forbidden.svg zum Löschen von Einträgen ausgeblender. Stattdessen wurde ein Button zum "Löschen" innerhalb des wiederholten Containers für den Adresskontakt hinzugefügt. Dieser kann abhängig vom Kontakttyp aktiv oder inaktiv gesetzt werden, um das Löschen zu erlauben oder zu verhindern (s. Element entfernen (Optionales/Wiederholendes Element)).

    Im vorliegenden Anwendungsfall soll ein Adresskontakt mit dem Kontakttyp "Kundenbetreuer" nicht gelöscht werden können und außerdem bis auf den Button für den "E-Mail"-Versand deaktiviert erscheinen (s. Screenshot rechts unten).


images/download/attachments/189439250/image2021-5-5_11-31-38-version-1-modificationdate-1732545977788-api-v2.png

Sobald die Bearbeitung des Firmenkontos der "fast-or-furious Ltd." per "Speichern" (im Ribbon) abgeschlossen wird, erscheint im Firmenkonto ein Adresskontakt vom Typ "Kundenbetreuer", der die Adresse des Benutzerkontos (s. Benutzer) von "Karola Mustermann" wiedergibt.

Sichtbar angezeigt werden hier nur die Name-Felder, allerdings bietet der Adresskontakt Zugriff auf die gesamte Adresse, so dass z. B. die hier nur angedeutete E-Mail-Funktion die ggf. enthaltenen Kommunikationsinformationen verwenden kann.

images/download/attachments/189439250/image2021-5-5_11-43-44-version-1-modificationdate-1732545977786-api-v2.png

Konfiguration:

Für die "Registrierung" des Benutzers, der die letzte Änderung an einem Firmenkonto ausführt, wird eine Ereignisbehandlung angelegt und wie rechts gezeigt konfiguriert:

  • Als Auslösende Ereignisse werden die Ereignisse "Erstellen" und "Ändern" (s. Allgemein (Ereignisse)) festgelegt.

  • Die Prüfende Regel stellt per Typprüfung fest, ob der Eingabewert vom Typ "Firmenkonto" ist. Ist dies der Fall, wird das UND-verknüpfte Sub-Zuordnungskriterium ausgewertet, das per Rollenregel feststellt, ob im Anmeldungskontext die Rolle "CustomerAccountManager" beansprucht wird.

images/download/attachments/189439250/image-2024-11-25_16-4-58-version-1-modificationdate-1732547097956-api-v2.png

  • Als Aktion bei bestandener Regel wird eine Ereignisaktion vom Typ Ausführen mit eingefügt, die dazu dient das Bezugsobjekt abweichend vom als Eingabewert anliegenden Firmenkonto zu definieren:

    • Das Firmenkonto aus dem Eingabewert wird per Parameter Firmenkonto in Variable speichern in einer Variablen mit dem Namen company gespeichert.

    • Im Objekt-Resolver wird per Verkettung zuerst der Benutzer der Session ermittelt und dann per Eingabeobjekt (Typsicher) das zugehörige Benutzerkonto gelesen. Dort findet man im Feld address die Adresse, die als Adresskontakt für den "Kundenbetreuer" hinzugefügt werden soll. Diese gilt für den folgenden Aktionsblock als Bezugsobjekt.

  • Im Aktionsblock der Ausführen mit-Ereignisaktion folgt als einzige Ereignisaktion .Adresse als Kontakt einer Firma hinzufügen v4.12.0 mit folgenden Parametern:

    • Als Kontakttyp wird als statischer Wert (per "Jede dynamische Aufzählung"-Wertauflöser, s. Statische Werte) der Typ "Kudnenbetreuer" zugewiesen.

    • Der Zugriff auf die Zielfirma, die außerhalb der Ausführen mit-Ereignisaktion als Eingabewert gilt, ist innerhalb der Ausführen mit-Ereignisaktion nur über die Variable company verfügbar.

ANMERKUNG◄ Dass die Zielfirma hier auch als Eingabewert der Ereignisbehandlung gilt ist eher Zufall. Falls die Adresse von "Frau Mustermann" in unserem Beispiel noch nicht als Adresskontakt vom Typ "Kundenbetreuer" eingetragen ist, wird das "Ändern" Ereignis für das Firmenkonto doppelt ausgelöst, weil das Hinzufügen des Adresskontakts wiederum als Änderung gilt.

images/download/attachments/189439250/image-2024-11-25_16-14-33-version-1-modificationdate-1732547673181-api-v2.png

Besonderer Anwendungsfall

Das folgende Beispiel demonstriert den Einsatz der Ereignisbehandlung Adresse als Kontakt einer Firma hinzufügen in Verbindung mit dem per Button "Als Kontakt der Firma hinzufügen" ausgelösten Ereignis "Adresse hinzufügen" (s. Adresse (Ereignisse)).

Im Zuge der Adressierung einer Sendung soll für das Firmen- und Adressattribut "Abholadresse" (Firmentyp DPA) im ersten Schritt ein Firmenkonto ausgewählt werden, um dann im zweiten Schritt ggf. eine präzise Abholposition (hier: "Abholadresse Adresse") angeben zu können, die in die Adresse desselben Firmen- und Adressattributs gespeichert wird.

Beim Auswählen der Firma für die "Abholadresse", wird in der Erfassungsmaske die Aktion Kontakte dieser Firma verwenden für das Auswahlfeld/Combobox der "Abholadresse Adresse" ausgeführt. Im Beispiel soll dieses dann alle Adresskontakte mit Kontakttyp "Zufahrt/Tor" oder "Gebäude" zur Auswahl anbieten, die im Firmenkonto der ausgewählten Firma gefunden werden.

Alternativ kann auch eine komplett neue "Abholadresse Adresse" eingegeben werden.

Über den Button "Als Kontakt der Firma hinzufügen" soll eine neu eingegebene oder auch geänderte Adresse der Firma als Kontakt hinzugefügt werden können. Dabei soll der Benutzer den dabei zugewiesenen Kontakttyp für den Adresskontakt per Kontextmenü (s. Screenshot rechts) aus den für die Abholadresse relevanten Optionen festlegen können.

images/download/attachments/189439250/image2021-5-6_10-42-30-version-1-modificationdate-1732545977773-api-v2.png

Konfiguration:

Die Konfiguration der Erfassungsmaske wird hier nicht im Detail beschrieben. Für das Verständnis der unten beschriebene Konfiguration der Ereignisbehandlung ist nur relevant, dass die Service-Konfiguration für das Auswahlfeld/Combobox-Element innerhalb der "Abholadresse Adresse" die Kontakttypen "Zufahrt/Tor" und "Gebäude" benennt. Im Dropdown erscheinen daher nur Adressen zur Auswahl, auf die sich Adresskontakte der ausgewählten Firma beziehen, die einem dieser beiden Typen angehören.

images/download/attachments/189439250/image2021-5-6_13-3-46-version-1-modificationdate-1732545977770-api-v2.png

Wenn über den Button "Als Kontakt der Firma hinzufügen" das Ereignis "Adresse hinzufügen" für die "Abholadresse Adresse" ausgelöst wird, enthält die Variable contactTypes demnach eine Liste mit diesen zwei Kontakttypen.

Für das Auslösende Ereignis "Adresse hinzufügen" (s. Adresse (Ereignisse)) wird die rechts abgebildete Ereignisbehandlung konfiguriert:

  • Die Prüfende Regel stellt per Typprüfung sicher, dass als Eingabewert eine "Adresse" übergeben wurde. Beim Auslösen des Ereignisses durch den Button "Als Kontakt der Firma hinzufügen" sollte dies implizit gewährleistet sein. Die Typprüfung deklariert hier also im Wesentlichen den Datentyp "Adresse" für den Eingabewert.

    ANMERKUNG◄ Das Ereignis wird hier allgemeingültig definiert und verzichtet deshalb auf weitere Regeln für die übergebene "Adresse" oder die Werte der beim Auslösen des Ereignisses automatisch befüllten Variablen (contactCompanyId, contactType und contactTypes).

  • Unter den Aktionen bei bestandener Regel soll deshalb zunächst festgestellt werden, ob der Kontakttyp, der dem Firmenkonto hinzugefügt werden soll durch den Kontext eindeutig bestimmt ist. Die Ausführen mit-Ereignisaktion definiert im Objekt Resolver zu diesem Zweck die Kontakttyp-Liste in der Variablen contactTypes als abweichendes Bezugsobjekt für den folgenden Block von Ereignisaktionen:

    • Eine Wenn Dann Sonst-Ereignisaktion untersucht durch eine Objekt-Feld-Regel das Feld length der Liste, um festzustellen, ob diese mehr als ein einziges Element enthält. Nur wenn dies der Fall ist, soll der Benutzer per Kontextmenü aus den vorhandenen Optionen auswählen müssen.

    • Ist eine Entscheidung erforderlich soll die Öffne Kontextmenü-Ereignisaktion die lokalisierten Texte für die in der Liste enthaltenen Kontakttypen als Optionen anzeigen.

      • Da die Liste bereits als Bezugsobjekt anliegt, gibt der unter Elemente eingefügte Objekt-Feld-Wertauflöser ohne Feld die ganze Liste.

      • Der Beschriftungsausdruck greift mit der Sytnax [bundle, resource]auf die Sprachverwaltung zu, um dort im Bundle de.lobster.scmbase.address.attributes.ContactType den Lokalisierungseintrag für den Namen des jeweiligen Kontakttyps (Resource {name}) nachzuschlagen.

      • Als Variablenname des Rückgabeobjekts wird hier die Variable contactType angegeben, die bis zum Aufruf des Kontextmenüs den ersten Wert der Liste enhält, weil das Ereignis "Adresse hinzufügen" diese Variable automatisch vorbelegt.

      • Die Auswahl im Kontextmenü gibt den angeklickten Kontakttyp zurück, sofern der Benutzer nicht die hier auf 300 Sekunden eingestellte Wartezeit Wertrückgabe verstreichen lässt oder das Kontextmenü ohne Auswahl schließt (per Esc-Taste oder durch einen Mausklick ins Formular).

ANMERKUNG◄ Die bereits vorbelegte Variable contactType wird hier gezielt auch als Ziel für das Rückgabeobjekt des Kontextmenüs ausgewählt, damit innerhalb der Ereignisaktion Adresse als Kontakt einer Firma hinzufügen für den Parameter Kontakttyp immer der Wert der Variablen contactType übernommen werden kann. Im Sonderfall eines Abbruchs bzw. Timeouts nach dem Öffnen des Kontextmenüs sollte dann aber verhindert werden, dass die Ereignisaktion Adresse als Kontakt einer Firma hinzufügen überhaupt ausgeführt wird, sonst wird "kein Wert" als Kontakttyp übergeben, was zu einem Abbruch mit Fehlmeldung (inkl. Rollback) führt.

images/download/attachments/189439250/image2021-5-6_13-12-45-version-1-modificationdate-1732545977767-api-v2.png images/download/attachments/189439250/image2021-5-6_13-41-15-version-1-modificationdate-1732545977759-api-v2.png

Nach dem Abschluss der Ausführen mit-Ereignisaktion, die nur relevant ist, wenn der Kontakttyp nicht eindeutig vorbestimmt ist, gilt wieder die hinzuzufügende Adresse als Bezugsobjekt. In diesem Kontext soll die Ereignisaktion Adresse als Kontakt einer Firma hinzufügen ausgeführt werden:

  • Innerhalb einer Wenn Dann Sonst-Ereignisaktion wird allerdings vorher geprüft, ob die Variable contactType nicht leer ist:

    • Gibt die Variable den vorbestimmten oder ausgewählten Kontakttyp an, dann wird die Ereignisaktion Adresse als Kontakt einer Firma hinzufügen ausgeführt, wobei als Kontakttyp die Variable contactType und als Zielfirma die Variable contactCompanyId zugewiesen wird.

      HINWEIS◄ Falls im Anmeldekontext der Sitzung keine Berechtigung zum Ändern des betreffenden Firmenkontos besteht, sollte die Ereignisaktion innerhalb einer Ausführen als-Ereignisaktion mit abweichendem Anmeldekontext ausgeführt werden.

    • Ohne Angabe für den Kontakttyp - also wenn der Benutzer ein Kontextmenü ohne Auswahl beendet hat - soll die Ereignisbehandlung kommentarlos und ohne weitere Ereignisaktionen beendet werden.

images/download/attachments/189439250/image2021-5-6_15-14-22-version-1-modificationdate-1732545977718-api-v2.png