Stammdatenänderung (Admin)
Voraussetzungen
Der Prozess kann nur dann ausgeführt werden, wenn das Modul EVI-Privatkunden eingespielt und lizenziert wurde. Andernfalls sind die jeweiligen Schalter deaktiviert.
Sofern nicht automatisch geschehen, muss der Prozess "Stammdatenänderung" (C12SLPMasterDataChange) veröffentlicht werden. Der Prozess sollte mit einem technischen Benutzer ausgeführt werden, der alle Datensätze im Umkreis der Person lesen darf - falls im Personenumfeld Rechte aktiviert sind, kann so sichergestellt werden, dass die Daten gelesen werden können.
Die Geschäftspartnerdaten sowie die abhängigen Kommunikations- und Adressdaten werden zwischen dem Drittsystem mit EVI abgeglichen.
Das führende Drittsystem lässt Stammdatenänderung durch EVI zu.
Im System existiert eine globale Variable (C12MasterDataChange_IsActive), über welche sich der Stammdatenänderungsprozess aktivieren bzw. deaktivieren lässt.
Die globale Variable ist an das EVI-Basis-Modul gebunden.Es ist empfehlenswert, diesen Prozess per globaler Variable temporär zu deaktivieren, wenn ein Massendatenimport erfolgt, welcher diesen Prozess auslöst.
Update
Die Funktionalität ist Bestandteil des Privatkunden-Moduls. Sie steht bei Vorhandensein und gültiger Lizenzierung des Moduls automatisch zur Verfügung.
Für den Fall, dass die Funktionalität nicht genutzt werden soll, ist die globale Variable C12MasterDataChange_IsActive zu deaktivieren.
Sofern nicht automatisch geschehen, muss der Prozess "Stammdatenänderung" (C12SLPMasterDataChange) veröffentlicht werden. Der Prozess sollte mit einem technischen Benutzer ausgeführt werden, der alle Datensätze im Umkreis der Person lesen darf - falls im Personenumfeld die Rechte aktiviert hat, kann so sichergestellt werden, dass die Daten gelesen werden können.
Technische Dokumentation
Komponentenübersicht
Module
C12EV_BASIS
C12EVI_SLP
Prozesse
C12SLPMasterDataChange
Beim Einspielen des Moduls werden die Prozesse automatisch veröffentlicht, dennoch ist eine Prüfung des Veröffentlichungsstatus empfehlenswert. Entsprechende Hinweise werden auch beim Import des Moduls ausgegeben.
Transaktionstabellen + Events
Event MASTERDATA_CHANGE_CUSTOMER
Eine Speicherung der zu ändernden Daten erzeugt ein Event zur Übertragung an Drittsysteme
Das Event enthält stets den Verweis auf den Geschäftspartner, dessen Daten geändert worden sind
Eine Speicherung der zu ändernden Daten erzeugt ein Event zur Übertragung an Drittsysteme
Das Event enthält stets den Verweis auf den Geschäftspartner, dessen Daten geändert worden sind
Es existiert keine dedizierte Transaktionstabelle
Skriptbibliothek
SC12RoleModelUtils
Enthält diverse Methoden zur Ermittlung delegierter Felder im Personen-Rollen-Modell. Für die Beschreibung der übersteuerbaren Methoden siehe Abschnitt "Ausschlusslisten".
SC12SLPUtils
Die JSON-Struktur der erzeugten Events MASTERDATA_NEW_CUSTOMER und MASTERDATA_CHANGE_CUSTOMER kann über entsprechende Zugriffsmethoden der Bibliothek SC12SLPUtils ausgelesen werden.
Globale Variablen
C12MasterDataChange_IsActive
Administrationsmöglichkeiten
Die Aktivierung/Deaktivierung des Stammdatenänderungsprozesses kann über die Globale Variable C12MasterDataChange_IsActive erreicht werden.
True: Der Stammdatenänderungsprozess ist aktiv (Default)
Änderung an Stammdaten sind direkt in der Detailmaske der Entitäten Geschäftspartner, Kommunikation und Adressen möglich, die Felder sind schreibbar.
Ausgenommen hiervon sind Kennzeichen zur Identifikation eines Datensatzes in einem Drittsystem.
Geschäftspartner
CustomerNo2.Customer
C12ERPActive.Customer
C12SyncId.Customer
Adressen
C12ISUADDRNR.Address
NameKey.Address wenn dieser den Wert 'ISU' (Adresse aus ERP-System) enthält
Kommunikation
NameKey.Telecom, wenn dieser den Wert 'ISU' (Adresse aus ERP-System) enthält
Die Events MASTERDATA_CHANGE_CUSTOMER (Änderungen) bzw. MASTERDATA_NEW_CUSTOMER (Neuanlage Geschäftspartner) werden unter Berücksichtigung etwaiger Ausschlusslisten immer geschrieben.
False: Der Stammdatenänderungsprozess ist inaktiv
Schreibschutz auf den Entitäten Geschäftspartner, Adressen, Kommunikation
Die Events MASTERDATA_CHANGE_CUSTOMER bzw. MASTERDATA_NEW_CUSTOMER werden nie geschrieben
Neben der bereits aufgeführten Möglichkeit zur generellen Deaktivierung des Stammdatenänderungsprozesses können Felder, bei deren Änderung keine Events geschrieben werden sollen, in Ausschlusslisten aufgenommen werden.
Übersteuerungsmöglichkeiten
Grundsätzlich können die mit dem Modul bereitgestellten Komponenten wie BPM-Prozesse und Skriptbibliotheksmethoden übersteuert werden, um diese an individuelle Anforderungen und Bedürfnisse anzupassen.
Nach dem Einspielen eines Moduls sollte geprüft werden, ob bereits Skriptmethoden im Projekt übersteuert wurden und ob die Methodenänderung aus dem Standard im Projekt übernommen werden soll.
Ausschlusslisten
Felder, die für die Schnittstelle irrelevant sind und für die kein Event MASTERDATA_NEW_CUSTOMER bzw. MASTERDATA_CHANGE_CUSTOMER geschrieben werden soll, können hier aufgenommen werden. Die Konfiguration erfolgt durch Übersteuerung und Auflistung der entsprechenden technischen Feldnamen als Liste in der jeweils vorgesehenen Methode.
Skriptklasse | Entität | Methodenname | Funktionalität |
---|---|---|---|
SC12RoleModelUtils | Adresse | getAddressChangeExclusionFields | Liefert Felder in der Adresse bei deren Änderung KEINE Change-Events erstellt werden sollen. |
Ansprechpartner | getContactPersonExclusionFields | Liefert Felder im Ansprechpartner bei deren Änderung KEINE Change-Events erstellt werden sollen. | |
Geschäftspartner | getCustomerChangeExclusionFields | Liefert Felder im Geschäftspartner bei deren Änderung KEINE Change-Events erstellt werden sollen. Im Standard sind hier folgende Felder enthalten
| |
Mitarbeiter | getEmployeeChangeExclusionFields | Liefert Felder im Mitarbeiter bei deren Änderung KEINE Change-Events erstellt werden sollen. | |
Person | getPersonChangeExclusionFields | Liefert Felder in der Person bei deren Änderung KEINE Change-Events erstellt werden sollen. | |
Kommunikation | getTelecomChangeExclusionFields | Liefert Felder in der Telekommunikation bei deren Änderung KEINE Change-Events erstellt werden sollen. |
Interner Ablauf
Der Prozess C12SLPMasterDataChange prüft an allen relevanten Stellen mit den entsprechenden Methoden aus der Skriptklasse SC12RoleModelUtils auf die Neuanlage und Änderung von Daten, bestimmt betroffene Geschäftspartner und erzeugt das entsprechende Event.
Änderung des Hauptansprechpartners
Änderung des Geschäftspartners
Änderung an der basierenden Person
Änderung der Adresse
Änderung der Kommunikation
Änderung an einem Mitarbeiter
Neuanlage eines Geschäftspartners
Neuanlage einer Kommunikation
Neuanlage eines Mitarbeiters
Neuanlage einer Adresse
Jede Änderung an einem Geschäftspartner und dessen Kommunikations- und Adressdaten wird durch den Prozess "Stammdatenänderung" geprüft. Handelt es sich bei der Änderung um eine relevante Änderung, so wird ein Event geschrieben.
Folgende Fälle werden hierbei berücksichtigt:
Neuanlage eines Geschäftspartners
gemäß übersteuerbarer Feldliste (Ausschlussliste)
Änderung der Adresse
gemäß übersteuerbarer Feldliste (Ausschlussliste)
die Adresse hängt an Geschäftspartnern (rCuAd)
die Adresse ist Postadresse gekennzeichnet
die Adresse ist Anzeigeadresse beim Geschäftspartner gekennzeichnet
→ es wird ein Event je gefundener Geschäftspartnerrolle geschrieben
Änderung des Geschäftspartners
gemäß übersteuerbarer Feldliste (Ausschlussliste)
bei delegierten Feldern in die Person wird die Logik der Person (PeCu) geprüft
bei delegierten Feldern in die Telecom
Änderung des Ansprechpartner
gemäß übersteuerbarer Feldliste (Ausschlussliste)
es handelt sich um einen Haupt-Ansprechpartner (isAutoCoPe = true)
Änderung der Person
gemäß übersteuerbarer Feldliste (Ausschlussliste)
wenn Geschäftspartnerrollen existieren (PeCu)
→ es wird ein Event je Geschäftspartnerrolle geschrieben
Änderung des Mitarbeiters
gemäß übersteuerbarer Feldliste (Ausschlussliste)
wenn die basierende Person Geschäftspartnerrollen besitzt (PeEm → PeCu)
Änderung der Kommunikation
gemäß übersteuerbarer Feldliste (Ausschlussliste)
die Kommunikation hängt an einem Geschäftspartner (customerPk <> NULL)
die Kommunikation hängt an einem Ansprechpartner (contactPersonPk <> NULL) und ist es der Haupt-Ansprechpartner (IsAutoCoPe = true)
die Kommunikation hängt an einer Person (PersonPk <> NULL) besitzt die Person eine Geschäftspartner-Rolle (PeCu)
Die beiden Event-Typen werden genutzt, um in der Tabelle C12EVENT die Änderung eines Geschäftspartners von der Neuanlage zu unterscheiden:
MASTERDATA_NEW_CUSTOMER
Bei der Neuanlage eines Geschäftspartners wird immer das Event MASTERDATA_NEW_CUSTOMER geschrieben. Das Event verweist im DataPk immer über den Geschäftspartner-Pk auf den zugehörigen Geschäftspartner, zu dem die Änderungen erfolgt sind. Im Memofeld werden die geänderten Werte in Form einer JSon-Struktur hinterlegt. Diese enthält die Änderungen in Form einer Map
MASTERDATA_CHANGE_CUSTOMER:
Bei Änderungen an beteiligten Entitäten, die Auswirkungen auf den Geschäftspartner haben, wird immer das Event MASTERDATA_CHANGE_CUSTOMER geschrieben
Beispiel:
Die Adresse eines Geschäftspartners wurde geändert
Das Event MASTERDATA_CHANGE_CUSTOMER verweist per DataPk auf den Geschäftspartner, zu dem die Adressänderung erfolgt ist
Die JSon-Struktur in ChangedData enthält die alten und die geänderten Adressinformationen als Adress-Container
JSon-Struktur in ChangedData.C12EVENT
Die JSon-Struktur in C12EVENT kann von Prozessen genutzt werden, um die eigentlichen Änderungen am eigentlichen Event zu hinterlegen, so dass eine Schnittstelle, die auf dieses Event reagiert, erkennen kann, was sich geändert hat.
Die allgemeine Struktur sieht wie folgt aus:
ENTITY_NAME: Name der geänderten Entität
ENTITY_PK: Pk der geänderten Datensätze
CHANGED_OBJECT_NEW: Neue Werte der geänderten Felder
CHANGED_OBJECT_OLD: Alte Werte der geänderten Felder
CHANGED_OBJECT_TYPE: Der Typ des enthaltenden Objekts, aktuell ist es immer eine java.util.Map
CHANGED_TYPE: DataNew, DataChange, DataChangeUnknownOld
Der CHANGED_TYPE bezieht sich auf die Daten in CHANGED_OBJECT_NEW und CHANGED_OBJECT_OLD, er kann, muss aber nicht ausgewertet werden.
Er dient auch dazu, um die Ursache der Änderung nachvollziehen zu können.
Im Falle eines neu erstellten Datensatzes:
ENTITY_NAME: Name der neu erstellten Entität
ENTITY_PK: Pk des neuen Datensatzes
CHANGED_OBJECT_NEW: Eine Map mit den Attributnamen der Felder als Schlüssel und den Feldwerten als Wert
CHANGED_OBJECT_OLD: Eine leere Map
CHANGED_OBJECT_TYPE: java.util.Map
CHANGED_OBJECT_OLD: Eine leere Map.
CHANGED_TYPE: DataNew
Beispiel einer Neuanlage
{
//Die Feldliste ist für das Beispiel stark gekürzt; es werden alle Felder geschrieben
"ENTITY_PK": "fvvvvvveljvtv1faconfe5Cu",
"CHANGED_OBJECT_NEW": {
"Pk.Customer": "fvvvvvveljvtv1faconfe5Cu",
"MatchCode.Customer": "PERFTESTCustomer",
"Freeboolean7.Customer": false,
"Freetext39.Customer": "",
"Freenumber8.Customer": null,
"ManualSalutation.Customer": false,
"DefaultCoPeKey.Customer": {
"Description": "PERFTESTCustomer",
"Pk": "fvvvvvveljvtv1faconfe5Cu#fvvvvvurijecmCoPe",
"Key": "PERFTESTCustomer"
},
"UpdateDate.Customer": "2021-07-12T07:08:30+00:00",
"StateAddress.Customer": {
"Description": "",
"Pk": "",
"Key": ""
},
"TelecomNameKey.Customer": {
"Description": "Büro",
"Pk": "TELECOMNAME_OFFICE",
"Key": "BÜRO"
},
"Website.Customer": "www.PerfTestCustomer.de",
"Freetext14.Customer": "",
...,
"CustomerValue.Customer": null
},
"CHANGED_TYPE": "DataNew",
"CHANGED_OBJECT_TYPE": "java.util.Map",
"CHANGED_OBJECT_OLD": {},
"ENTITY_NAME": "Customer"
}
Im Falle einer Datensatzänderung (z.B. Änderung eines Feldes im Geschäftspartner)
ENTITY_NAME: Name der geänderten Entität
ENTITY_PK: Pk des geänderten Datensatzes
CHANGED_OBJECT_NEW: Eine Map mit den geänderten Feldern, die Attributnamen der Felder als Schlüssel und den Feldwerten als Wert
CHANGED_OBJECT_OLD: eine leere Map
CHANGED_OBJECT_TYPE: java.util.Map
CHANGED_OBJECT_OLD eine leere Map
CHANGED_TYPE: DataChange
Beispiel einer Dazensatzänderung
{
"ENTITY_PK": "pd2dcn1fbrutj6eCu",
"CHANGED_OBJECT_NEW": {
"Name2.Customer": "Software AG"
},
"CHANGED_Type": "DataChange",
"CHANGED_OBJECT_TYPE": "java.util.Map",
"CHANGED_OBJECT_OLD": {
"Name2.Customer": "Software GmbH"
},
"ENTITY_NAME": "Customer"
}
Im Falle einer Datensatzänderung, bei der es nicht möglich war, die ursprünglichen Wert zu dokumentieren (zum Beispiel die Änderung der Anzeigeadresse)
ENTITY_NAME: Name der geänderten Entität
ENTITY_PK: Pk des geänderten Datensatzes
CHANGED_OBJECT_NEW: Eine Map mit den geänderten Feldern, die Attributnamen der Felder als Schlüssel und den Feldwerten als Wert
CHANGED_OBJECT_OLD: eine leere Map
CHANGED_OBJECT_TYPE: java.util.Map
CHANGED_OBJECT_OLD eine leere Map
CHANGED_TYPE: DataChangeUnknownOld
Beispiel einer Datensatzänderung
{
"ENTITY_PK": "fvvvvvu8n2ktr1f7lmdgo9Cu#fvvvvvuc63fjkrCuAd",
"CHANGED_OBJECT_NEW": {
"City.Address": "Pohlheim",
"CountryKey.Address": {
"Description": "Deutschland, +49",
"Pk": "D-S_LND",
"Key": "DE"
},
"ComposedAddress.Address": "\r\n35415 Pohlheim ",
"StreetNumberAddition.Address": null,
"Pk.Address": "fvvvvvu8n2ktr1f7lmdgo9Cu#fvvvvvuc63fjkrCuAd",
"Street.Address": {
"Description": "",
"Pk": "",
"Key": ""
},
"ZIPKey.Address": {
"Description": "",
"Pk": "35415",
"Key": "35415"
},
"NameKey.Address": {
"Description": "Büroadresse",
"Pk": "ADDRNAME_OFFICE",
"Key": "BÜRO"
},
"State.Address": {
"Description": "",
"Pk": "",
"Key": ""
},
"StreetNumber.Address": null,
"StateDesc.Address": null
},
"CHANGED_Type": "DataChangeUnknownOld",
"CHANGED_OBJECT_TYPE": "java.util.Map",
"CHANGED_OBJECT_OLD": { },
"ENTITY_NAME": "Address"
}
Änderung der Post- (und nicht Anzeige-)adresse
{
"ENTITY_PK": "fvvvvvu4bqpue1gdko4hs9Cu#fvvvvvu0dce0nPeAd",
"CHANGED_OBJECT_NEW": {
"ComposedAddress.Address": "Am Bildstock 13\r\n77746 Schutterwald - Rödgen",
"DefaultCuAd.Address": false,
"LetterCuAd.Address": true
},
"CHANGED_TYPE": "DataChange",
"CHANGED_OBJECT_TYPE": "java.util.Map",
"CHANGED_OBJECT_OLD": {
"ComposedAddress.Address": "Am Bildstock 13\r\n77746 Schutterwald - Rülfenrod",
"DefaultCuAd.Address": false,
"LetterCuAd.Address": true
},
"ENTITY_NAME": "Address"
}
Änderung des Postadresse-Flags
{
"ENTITY_PK": "fvvvvvu4bqpue1gdko4hs9Cu#fvvvvvu45bm2rrCuAd",
"CHANGED_OBJECT_NEW": {
"DefaultCuAd.Address": true,
"LetterCuAd.Address": true
},
"CHANGED_TYPE": "DataChange",
"CHANGED_OBJECT_TYPE": "java.util.Map",
"CHANGED_OBJECT_OLD": {
"DefaultCuAd.Address": true,
"LetterCuAd.Address": false
},
"ENTITY_NAME": "Address"
}