Benutzer-Werkzeuge

Webseiten-Werkzeuge


engine:procedures:pm_modifypersondata_ad

pm_ModifyPersonData_Ad

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 :

  • „yy“ → Änderung der Datums-Eigenschaft um die angegebene Anzahl (“<integer-Wert>„) JAHRE
  • „mm“ → Änderung der Datums-Eigenschaft um die angegebene Anzahl (“<integer-Wert>„) MONATE
  • „dd“ → Änderung der Datums-Eigenschaft um die angegebene Anzahl (“<integer-Wert>„) TAGE
  • „hh“ → Änderung der Datums-Eigenschaft um die angegebene Anzahl (“<integer-Wert>„) STUNDEN
  • „mi“ → Änderung der Datums-Eigenschaft um die angegebene Anzahl (“<integer-Wert>„) MINUTEN
  • „ss“ → Änderung der Datums-Eigenschaft um die angegebene Anzahl (“<integer-Wert>„) SEKUNDEN
  • „ms“ → Änderung der Datums-Eigenschaft um die angegebene Anzahl (“<integer-Wert>„) MILLISEKUNDEN

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 :

  • bei Zahlen „addieren“ wir den Wert zur Zahl „0“ - was quasi dem direkten Setzen der Eigenschaft auf den Wert entspricht
  • bei Datumsangaben „addieren“ wir den Wert zum '01.01.1970'
  • bei „strings“ konkatenieren wir den Wert zu „NULL“ - was quasi dem direkten Setzen der Eigenschaft auf den Wert entspricht

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-MethodPOST
HTTP-AuthOptional
Tags
Engine-Kategorieperson management
Engine-TypDaten-Änderung
Letzte Aktualisierung7.0.7 (2015-01-29)

Parameter

Name 1) Standard-Wert Beschreibung 2) SQL-Datentyp3) ab Version
PersonID ID einer Person
integer3.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
PersonCharacCategoryID1 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“.
tinyint3.5.0
DeleteCharacCategoryID0 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
bit3.5.0
ResultInErrorIDList1 „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
bit3.5.0
ValueIDsForPredefinedCharacs1 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.
bit3.5.0
ChangeAllOrNothing1 Falls Fehler auftreten, sollen dann die Änderungen der Eigenschaften, zu denen es keinen Fehler gab, durchgeführt werden („0“) oder nicht („1“) ?
bit3.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

Rückgabe

wenn ResultInErrorIDList = 0

Spaltenname Beschreibung SQL-Datentyp4) ab Version
PersonCharacteristicIDID eines Merkmals zu dem ein Fehler bzgl. der zu ändernden Eigenschaft auftrat
smallint3.5.0
ResultCodeEin Code, der die Art bzw. Ursache des aufgetrenen Fehlers angibt (siehe Beschreibung)
integer3.5.0

Output-Parameter

ErrorIDListAusgabeparameter, 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.

Mögliche Return-Codes

Code Beschreibung Quelle 5)
-674Die Personendaten können nicht bearbeitet werden, da der entsprechende Personen-Typ gesperrt istnur direkt
-650Es sind nicht alle Pflichtmerkmale vorhandennur indirekt
-642Inkrementelle Änderung konnte aufgrund paralleler Änderungen nicht durchgeführt werdennur indirekt
-641Die „Unique“-Eigenschaft mindestens eines Merkmals ist verletzt - Prozedur wurde abgebrochennur indirekt
-640Einige Personendaten sind ungültignur indirekt
-621Fehlender oder falscher Eintrag in PersonTypeSettingsnur indirekt
-572Die Prozedur darf nur innerhalb einer Transaktion ausgeführt werdennur indirekt
-569Der Benutzer hat kein Ausführungsrecht für die Prozedurnur indirekt
-567Die Prozedur darf z. Zt. nicht ausgeführt werdennur indirekt
-566Die Prozedur darf mit den übergebenen Parametern nicht ausgeführt werdennur indirekt
-540Falsches Formatnur indirekt
-535Das Datum liegt nicht in der Vergangenheitnur indirekt
-530Der Wert ist nicht konvertierbarnur indirekt
-510Der Benutzer ist nicht registriertnur indirekt
-504Es ist ein Problem aufgetreten, das nicht gelöst werden kann, Prozedur wird daher abgebrochendirekt und indirekt
-502Die Parameter-Werte der Prozedur können nicht verarbeitet werden (kein passendes Trennzeichen)nur indirekt
-500Falsche Parameterdirekt und indirekt

XML-Schema

Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema Response/EngineProcedure_v1_0.xsd validiert.

Historie

7.0.7 2015-01-29Interne Änderung : Datentyp-Erweiterung des „ReferenceKey“ [für „_mi_StartProcedure“-Aufruf]
6.5.2 2013-02-26Interne 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-021. 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-01Parameter „ValueList“ wurde erweitert [Länge von „255“ auf „16384“ erweitert]
5.5.0 2008-01-071. 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-21Hinweis in der Doku auf die neue Möglichkeit von „inkrementellen updates“
4.0.15 2004-07-301. 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-141. 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-041. 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-10Berücksichtigung der neuen Tabelle „PersonMetaInformation“
4.0.0 2003-04-031. „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-23Erstmalig in dieser Version erstellt

Code-Snippets

Engine Playground

Der folgende Link öffnet in einem separaten Fenster den Engine Playground der fest mit dem dbap-demo System verbunden ist:

cURL

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 -
dStore_php
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();
engine/execute

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>
1)
Pflichtparameter sind unterstrichen
5)
direkt meint „von der Prozedur selber“ und indirekt meint „von intern aufgerufenen Unterprozeduren“
6)
I.d.R. auf Unix-artigen Systemen bereits installiert, Bestandteil der libxml2, siehe http://www.xmlsoft.org
engine/procedures/pm_modifypersondata_ad.txt · Zuletzt geändert: 11.01.2016 (Externe Bearbeitung)