Prozedur um Eigenschaften einer Person hinzuzufügen, zu ändern oder zu löschen.
Anmerkungen zum Parameter „ValueList“ :
1. Soll eine Eigenschaft zu einem Merkmal gelöscht werden, ist in der Werte-Liste an der entsprechenden Stelle „nichts“ (im Sinne von „NULL“) anzugeben.
Beispiel (falls „SeparatorInValueList = '¶' ist) :
Die Angabe von „CharacteristicIDList = '2¶3¶15'“ und „ValueList = 'irgendetwas¶¶anderes'“ würde dazu führen, daß die Eigenschaft zum Merkmal mit der ID „3“ gelöscht wird (sofern es sich hierbei nicht um ein Pflicht-Merkmal handelt) und die Eigenschaften zu den Merkmal-IDs „2“ und „15“ den Angaben entsprechend geändert werden. Möchte man die Eigenschaft zu genau einem Merkmal löschen, ist „ValueList = NULL“ anzugeben, nicht '' ! Letzteres würde nämlich dazu führen, daß die Eigenschaft auf den Wert (o.a. „string“) '' gesetzt würde.
2. Man kann auch „relative Änderungen“ (o.a. „inkrementelle updates“) durchführen - um z.B. eine „Zahl-Eigenschaft“ um einen Wert zu erhöhen oder zu erniedrigen. Dazu übergibt man die NEGATIVE Merkmal-ID in „CharacteristicIDList“ an, wobei je nach Datentyp des Merkmals der entsprechende Wert in „ValueList“ unterschiedliche Formen annehmen muß und entsprechend unterschiedlich interpretiert wird :
A) Ist das Merkmal vom Basis-Typ „Zahl“, muß der entsprechende Wert in „ValueList“ die Form “<Zahl-Wert inkl. Vorzeichen vom Datentyp des Merkmals>„ besitzen. Ist kein explizites Vorzeichen angegeben, wird dies als positiver Wert interpretiert. Dieser Zahl-Wert wird dann einfach zur bestehenden Eigenschaft (ebenfalls eine Zahl) hinzuaddiert.
B) Handelt es sich um ein „Text“-Merkmal, wird eine relative Änderung als „string“-Konkatenation ausgeführt, d.h. der entsprechende Wert in „ValueList“ sieht so aus : “<Vorzeichen><String>„
Das bedeutet, daß die “<String>„-Zeichenkette entweder VOR (falls “<Vorzeichen>„ gleich “-„ ist) die bestehende Eigenschaft gesetzt oder HINTEN (“<Vorzeichen„ gleich “+„) an die Eigenschaft angehängt wird.
C) Beim Basis-Typ „Datum“ schließlich muß der entsprechende Wert in „ValueList“ diese Form haben : “<datepart><integer-Wert>„. Ist kein explizites Vorzeichen im “<integer-Wert>„ angegeben, wird dies als positiver Wert interpretiert. “<datepart>„ muß - angelehnt an die T-SQL-Funktion „dateadd“ - einen der folgenden Werte annehmen :
D) Für „Ja/Nein“-Merkmale ist keine „relative Änderung“ möglich
Beispiele :
1.) Ist „17“ eine ID eines Merkmals, zu dem 2-stellige Zahlen als Eigenschaften hinterlegt werden können, würde “ CharacteristicIDList = '17' „ und “ ValueList = '-5' „ dazu führen, daß die aktuelle Eigenschaft der „PersonID“ zum Merkmal „17“ um „5“ ERNIEDRIGT wird.
2.) Stellt „19“ die ID eines „Datum-Merkmals“ dar, und besitzt „PersonD“ aktuell als Eigenschaft den Wert „01.04.1968“, würde “ CharacteristicIDList = '19' „ und “ ValueList = 'yy+2' „ dazu führen, daß 2 Jahre auf das Datum „01.04.1968“ hinzuaddiert würden, und somit die Eigenschaft auf „01.04.1970“ gesetzt werden würde.
3.) Bei einem Aufruf mit “ CharacteristicIDList = '20' „ und “ ValueList = '-not ' „ würde, wenn „PersonID“ zu diesem Merkmal beispielsweise die „Text“-Eigenschaft „valid“ besäße, die neue Eigenschaft „not valid“ lauten.
Weiterer Hinweis zu „inkrementellen updates“ :
Hat die Person noch KEINE Eigenschaft zum Merkmal, passiert je nach Basis-Datentyp folgendes :
Anmerkung zur Rückgabespalte „ResultCode“ :
Folgende Codes können derzeit zurückgegeben werden :
„2“ : Die Eigenschaft existiert bereits, aber das zugehörige Merkmal ist eindeutig („IsUnique = 1“) !
„3“ : Es handelt sich um ein Merkmal mit vordefinierten Werten, aber die übergebene Eigenschaft existiert nicht
„4“ : Die Eigenschaft gehört zu einem Merkmal, das nicht dem Informationstyp („PersonCharacCategoryID“) zugeordnet ist.
„5“ : Das Merkmal darf aufgrund von Zugriffsbeschränkungen nicht editiert werden
„6“ : Der Wert ist ungültig, d.h. entspricht nicht dem Feldtyp des zugehörigen Merkmals
„8“ : Pflichtmerkmal in der Kategorie „PersonCharacCategoryID“, zu dem keine Eigenschaft angegeben wurde bzw. dessen Eigenschaft fehlerhaft ist (im letzteren Fall taucht das Merkmal ein zweites Mal in der Ergebnismenge auf, und zwar mit dem Code 2, 3 oder 6)
„9“ : Pflichtmerkmale können nicht gelöscht werden
„10“ : Der vordefinierte Wert ist zwar angelegt, aber entweder nicht mehr oder noch nicht gültig
Hinweis zum Dubletten-Check :
1. Beim Ändern von Personendaten kann ein Dubletten-Check durchgeführt werden. Vorraussetzung dafür ist zum einen, daß der „PersonTypeSettings“-Eintrag „CharacteristicsForDuplicateSearch“ für den entsprechenden Personen-Typ konfiguriert ist oder „_ac_ExecuteDuplicateCheck“ (individuell) implementiert ist. Standardmäßig ist die Prozedur „_ac_ExecuteDuplicateCheck“ so codiert, daß eine „Action“ angelegt wird, die als Parameter die betroffene „PersonID“ (zur „KeyVariable = AffectedPersonID“) sowie zur „KeyVariable = ActionInsertedByProcedure“ den Prozedurnamen „_ac_ExecuteDuplicateCheck“ besitzt.
Es ist dann noch ein entsprechendes Skript/Programm einzurichten, das diese Actions abarbeitet, d.h. letztlich die Prozedur pm_UpdatePossibleDuplicates_Ad aufruft. Die Prozedur „_ac_ExecuteDuplicateCheck“ legt diese Action aber nur an, wenn der besagte „PersonTypeSettings“-Eintrag vorhanden ist. Diese Prozedur kann natürlich (wie alle „ac“-Prozeduren) individuell angepaßt werden.
2. Soll ein Dubletten-Check ohne Verzögerung durchgeführt werden, d.h. transaktionssicher zusammen mit dem Ändern der Personendaten, ist der „PersonTypeSettings“-Eintrag „ExecDuplicateCheckImmediately“ für den entsprechenden Personen-Typ auf „1“ zu setzen. In diesem Fall wird eine interne Prozedur aufgerufen, die den Dubletten-Check durchführt und dazu den bereits erwähnten Eintrag aus „PersonTypeSettings“ zum Schlüssel „CharacteristicsForDuplicateSearch“ ZWINGEND benötigt (ansonsten gibt es zwar keinen Fehler, es wird aber auch nichts weiter ausgeführt) !
HTTP-Method | POST |
HTTP-Auth | Optional |
Tags | |
Engine-Kategorie | person management |
Engine-Typ | Daten-Änderung |
Letzte Aktualisierung | 7.0.7 (2015-01-29) |
Name 1) | Standard-Wert | Beschreibung 2) | SQL-Datentyp3) | ab Version |
---|---|---|---|---|
PersonID | ID einer Person | integer | 3.5.0 | |
CharacteristicIDList | Liste von Merkmal-IDs (durch '¶' getrennt), auf die sich die in „ValueList“ angegebenen Eigenschaften beziehen. | varchar(1000) | 3.5.0 | |
ValueList | Eigenschaften (zu den in „CharacteristicIDList“ angegebenen Merkmalen), die die Person „PersonID“ ab jetzt besitzen soll. (Um Eigenschaften zu löschen, siehe Beschreibung) | varchar(16384) | 3.5.0 | |
PersonCharacCategoryID | 1 | ID einer Kategorie von Personen-Merkmalen. Wenn angegeben, müssen (im Fall „DeleteCharacCategoryID = 0“) die in „CharacteristicIDList“ angegebenen Merkmale dieser Kategorie angehören - sonst einer Kategorie des Personen-Typs von „PersonID“. | tinyint | 3.5.0 |
DeleteCharacCategoryID | 0 | Wird „1“ angegeben, ignoriert die Prozedur die Parameter „CharacteristicIDList“ und „ValueList“ und löscht die Eigenschaften der Person „PersonID“ zu allen Merkmalen der durch „PersonCharacCategoryID“ angegebenen Kategorie | bit | 3.5.0 |
ResultInErrorIDList | 1 | „0“ : Es wird eine Rückgabemenge geliefert, die die Merkmal-IDs (zusammen mit einem jeweiligen „Error-Code“) enthält, bei denen Fehler aufgetreten sind „1“ : Merkmal-IDs, bei denen ein Fehler auftrat, werden über „ErrorIDList“ zurückgegeben | bit | 3.5.0 |
ValueIDsForPredefinedCharacs | 1 | Die in „ValueList“ angegebenen Eigenschaften, die sich auf Merkmale mit vordefinierten Werten („PredefinedValues = 1“ in „PersonCharacteristics“) beziehen, sind… „0“ : als Eigenschaften selbst „1“ : als IDs … angegeben. | bit | 3.5.0 |
ChangeAllOrNothing | 1 | Falls Fehler auftreten, sollen dann die Änderungen der Eigenschaften, zu denen es keinen Fehler gab, durchgeführt werden („0“) oder nicht („1“) ? | bit | 3.5.0 |
Country | 'german' | Gibt an, in welchem Format Datums-Eigenschaften angegeben sind (Groß-/Kleinschreibung wird nicht beachtet) : 'german', 'germany' : Tag-Monat-Jahr 'english', 'england' : Monat-Tag-Jahr | varchar(10) | 4.0.5 |
SeparatorInValueList | '¶' | Gibt an, durch welche Zeichenkette die Werte in „ValueList“ getrennt sind | varchar(4) | 5.5.0 |
Spaltenname | Beschreibung | SQL-Datentyp4) | ab Version |
---|---|---|---|
PersonCharacteristicID | ID eines Merkmals zu dem ein Fehler bzgl. der zu ändernden Eigenschaft auftrat | smallint | 3.5.0 |
ResultCode | Ein Code, der die Art bzw. Ursache des aufgetrenen Fehlers angibt (siehe Beschreibung) | integer | 3.5.0 |
ErrorIDList | Ausgabeparameter, der eine Liste (durch '¶' getrennt) der Merkmal-IDs enthält, bei denen ein Fehler auftrat - allerdings ohne den jeweiligen Grund. Den kann man nur anhand der zurückgegebenen Ergebnismenge (sofern „ResultInErrorIDList = 0“) feststellen. |
Code | Beschreibung | Quelle 5) |
---|---|---|
-674 | Die Personendaten können nicht bearbeitet werden, da der entsprechende Personen-Typ gesperrt ist | nur direkt |
-650 | Es sind nicht alle Pflichtmerkmale vorhanden | nur indirekt |
-642 | Inkrementelle Änderung konnte aufgrund paralleler Änderungen nicht durchgeführt werden | nur indirekt |
-641 | Die „Unique“-Eigenschaft mindestens eines Merkmals ist verletzt - Prozedur wurde abgebrochen | nur indirekt |
-640 | Einige Personendaten sind ungültig | nur indirekt |
-621 | Fehlender oder falscher Eintrag in PersonTypeSettings | nur indirekt |
-572 | Die Prozedur darf nur innerhalb einer Transaktion ausgeführt werden | nur indirekt |
-569 | Der Benutzer hat kein Ausführungsrecht für die Prozedur | nur indirekt |
-567 | Die Prozedur darf z. Zt. nicht ausgeführt werden | nur indirekt |
-566 | Die Prozedur darf mit den übergebenen Parametern nicht ausgeführt werden | nur indirekt |
-540 | Falsches Format | nur indirekt |
-535 | Das Datum liegt nicht in der Vergangenheit | nur indirekt |
-530 | Der Wert ist nicht konvertierbar | nur indirekt |
-510 | Der Benutzer ist nicht registriert | nur indirekt |
-504 | Es ist ein Problem aufgetreten, das nicht gelöst werden kann, Prozedur wird daher abgebrochen | direkt und indirekt |
-502 | Die Parameter-Werte der Prozedur können nicht verarbeitet werden (kein passendes Trennzeichen) | nur indirekt |
-500 | Falsche Parameter | direkt und indirekt |
Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema Response/EngineProcedure_v1_0.xsd validiert.
7.0.7 | 2015-01-29 | Interne Änderung : Datentyp-Erweiterung des „ReferenceKey“ [für „_mi_StartProcedure“-Aufruf] |
6.5.2 | 2013-02-26 | Interne Anpassungen da die Spalte „ModificationAllowedByUser“ der Tabelle „PersonCharacteristics“ weggefallen ist und durch eine allgemeinere Funktionalität ersetzt wurde [auch Doku-Anpassung : neuer möglicher Wert „5“ für „ErrorCode“] |
6.5.1 | 2012-11-02 | 1. Erweiterung „CharacteristicIDList“ u. „SeparatorInValueList“ [von „255“ auf „1000“ bzw. von „1“ auf „4“] 2. Ab jetzt können Daten MEHRERER Kategorien geändert werden 3. Interne Änderungen [wg. UTF-8] |
6.0.6 | 2012-03-01 | Parameter „ValueList“ wurde erweitert [Länge von „255“ auf „16384“ erweitert] |
5.5.0 | 2008-01-07 | 1. Neuer Parameter „SeparatorInValueList“ 2. Ausgabe an die Standard-Ausgabe [via „print“] im Fehler-Fall “-500„, die nähere Informationen über die Ursache enthält |
5.0.0 | 2004-12-21 | Hinweis in der Doku auf die neue Möglichkeit von „inkrementellen updates“ |
4.0.15 | 2004-07-30 | 1. Aufruf der Prozeduren „_mi_StartProcedure“, „_mi_FinishProcedure“ und „_mi_ChooseParamValueSeperator“ 2. Ausführen von „set transaction isolation level 1“ und „set rowcount 0“ zu Beginn der Prozedur |
4.0.6 | 2003-11-14 | 1. Interne Änderungen 2. Fehler in der Dokumentation bzgl. der „ResultCodes“ 3. Fehler : Durch parallele Ausführung von Änderungen konnte es dazu kommen, daß die „Unique“-Eigenschaft eines Merkmals verletzt wird ! |
4.0.5 | 2003-10-04 | 1. Verlagerung diverser „Settings“-Einträge auf entsprechende „PersonTypeSettings“-Einträge 2. Neuer Parameter „Country“ 3. ResultCode „9“ war doppelt verwendet (⇒ neuer Code „10“) 4. Fehler bzgl. Eigenschaften im (deutschen) Datums-Format |
4.0.3 | 2003-07-10 | Berücksichtigung der neuen Tabelle „PersonMetaInformation“ |
4.0.0 | 2003-04-03 | 1. „AdditionalPersonProperties“ gibt's nicht mehr 2. Ab jetzt wird „LockedPersonTypes“ auch überprüft ! 3. „PersonPropertiesHistory“ muß ab jetzt aktualisiert werden |
3.5.19 | 2002-06-17 | |
3.5.16 | 2002-04-25 | |
3.5.13 | 2001-12-06 | |
3.5.12 | 2001-10-17 | |
3.5.8 | 2001-05-19 | |
3.5.4 | 2001-03-11 | |
3.5.1 | 2000-12-20 | |
3.5.0 | 2000-11-23 | Erstmalig in dieser Version erstellt |
Der folgende Link öffnet in einem separaten Fenster den Engine Playground der fest mit dem dbap-demo System verbunden ist:
Unformatierte Ausgabe:
curl -X POST 'http://<partner>-<project>.dstore.de/default/engine/pm_ModifyPersonData_Ad?PersonID=<value>&CharacteristicIDList=<value>&ValueList=<value>'
Mit xmllint 6) formatierte Ausgabe:
curl -X POST 'http://<partner>-<project>.dstore.de/default/engine/pm_ModifyPersonData_Ad?PersonID=<value>&CharacteristicIDList=<value>&ValueList=<value>' | xmllint --format -
use dStore_php\WebService; $service = new WebService\Service( WebService\Scheme::HTTP,'<partner>-<project>.dstore.de', 80); $request = new WebService\Requests\Engine\Procedure\Request( new WebService\Requests\AccessData('default'), 'pm_ModifyPersonData_Ad', array( 'PersonID' => <value>, 'CharacteristicIDList' => '<value>', 'ValueList' => '<value>', // 'PersonCharacCategoryID' => 1, // 'DeleteCharacCategoryID' => 0, // 'ResultInErrorIDList' => 1, // 'ValueIDsForPredefinedCharacs' => 1, // 'ChangeAllOrNothing' => 1, // 'Country' => 'german', // 'SeparatorInValueList' => '¶' ) ); $service->execute($request); $xml_result = $request->getResponse()->getBody()->toSimpleXmlDocument(); $ResultSet = $xml_result->getRowsAsArray(); $OutputParams = $xml_result->getOutputParametersAsArray();
XML zur Ausführung mit der Methode engine/execute, z.B. per
curl --header 'Content-Type: application/xml' -X POST 'http://<partner>-<kunde>.dstore.de/default/engine/execute' -d '<xml-daten>'
<?xml version="1.0" encoding="UTF-8"?> <ListOfBatches> <Batch No="0"> <Procedure Name="pm_ModifyPersonData_Ad"> <Parameters> <Parameter Name="PersonID"><!-- integer value --></Parameter> <Parameter Name="CharacteristicIDList"><!-- varchar value --></Parameter> <Parameter Name="ValueList"><!-- varchar value --></Parameter> <!-- <Parameter Name="PersonCharacCategoryID">1</Parameter> --> <!-- <Parameter Name="DeleteCharacCategoryID">0</Parameter> --> <!-- <Parameter Name="ResultInErrorIDList">1</Parameter> --> <!-- <Parameter Name="ValueIDsForPredefinedCharacs">1</Parameter> --> <!-- <Parameter Name="ChangeAllOrNothing">1</Parameter> --> <!-- <Parameter Name="Country">'german'</Parameter> --> <!-- <Parameter Name="SeparatorInValueList">'¶'</Parameter> --> </Parameters> </Procedure> </Batch> </ListOfBatches>