Mit dieser Prozedur ordnet man ein Merkmal einer Merkmal-Kategorie zu bzw. löscht eine bestehende Zuordnung.
Wichtige Hinweise :
1. Wenn zum angegebenen Merkmal (→ „PersonCharacteristicID“) in der Tabelle „PersonCharacteristics“ „Required = 1“ hinterlegt ist, dann muß in „PersonCharacsInCatgories“ ebenfalls „Required = 1“ gespeichert sein.
Beim Erstellen einer Zuordnung wird in diesem Fall „Required“ automatisch auf „1“ gesetzt, es gibt also keinen Fehler, falls „0“ übergeben wurde !
2 Eine Änderung des „Required“-Flags von „0“ auf „1“ setzt natürlich voraus, daß alle Personen, die Eigenschaften zu (wenigstens) einem Merkmal der Kategorie „PersonCharacCategoryID“ besitzen, auch eine Eigenschaft zu „PersonCharacteristicID“ haben. Falls nicht, gibt es den Fehler „-686“ !
3. Eine Änderung des „Required“-Flags von „1“ auf „0“ ist problemlos möglich, es sei denn es handelt sich bei „PersonCharacteristicID“ um ein Pflichtmerkmal („Required = 1“ in „PersonCharacteristics“) - es gibt dann den Fehler „-500“
4. Es darf pro Personen-Typ nur eine Merkmal-Kategorie geben, die Pflicht-Merkmale („Required = 1“ in „PersonCharacteristics“) enthält
5. Ein Merkmal darf einem Personen-Typ nur einmal zugewiesen werden, d.h. nur in einer Merkmal-Kategorie zu diesem Personen-Typ vorkommen
6. Gelöscht werden kann ein Merkmal aus einer Kategorie nur dann, wenn es nicht bereits eine Person des zur Kategorie gehörenden Personen-Typs gibt, die eine Eigenschaft zu diesem Merkmal besitzt.
7. Ein Merkmal kann einer Kategorie als Pflichtfeld („Required = 1“) nur dann zugewiesen werden, wenn nicht bereits eine Person (des der Kategorie entsprechenden Typs) existiert, die Eigenschaften zu bereits vorhandenen Merkmalen der Kategorie besitzt.
8. Ein Merkmal kann maximal von 31 Personen-Typen verwendet werden (Hintergrund ist „UsedByPersonType_Bitmap“ in „PersonCharacteristicValues“; diese „Bitmap“-Information wird intern von der Personen-Suche pm_GetPersons_Conditions_Ad verwendet, um schnell erkennen zu können, von welchem Personen-Typ eine Eigenschaft verwendet wird).
Anmerkungen zum Parameter „DefaultValue“ :
1.) Via „DefaultValue“ kann man einen Wert konfigurieren, der automatisch vergeben wird, wenn eine Person noch gar keine
Eigenschaft zu Merkmalen der Kategorie „PersonCharacCategoryID“ besitzt und dann Daten dieser Kategorie hinzugefügt oder Eigenschaften dieser Kategorie gelöscht werden.
Letzteres macht scheinbar keinen Sinn (da die Logik ja nur greift, wenn noch KEINE Eigenschaften vorhanden sind), es ist aber ein hilfreicher Trick, um zu ermöglichen, NUR „DefaultValues“ in einer Kategorie speichern zu lassen.
2.) Ein Default-Wert muß natürlich dem (durch die „FieldTypeID“ konfigurierten) Format aller Eigenschaften des Merkmals (→ „PersonCharacteristicID“) entsprechen. Man beachte in diesem Zusammenhang daher den Parameter „Country“.
3.) Zu einem „unique“-Merkmal kann KEIN (fester) „DefaultValue“ konfiguriert werden, und falls das Merkmal vordefinierte Werte besitzt, kann nur einer dieser vordefinierten Werte als „DefaultValue“ verwendet werden. Ausnahme bei „unique“-Merkmalen sind „Funktions-Werte“ (s. 4.)
4.) Es wird zwischen festen und dynamischen Default-Werten unterschieden. Dynamische Default-Werte können durch Verwendung von „Funktionen“ konfiguriert werden. Dazu muß „DefaultValue“ die Form „#<eine Funktion (s.u.)>#“ besitzen.
Anmerkung :
Möchte man „#<irgendwas>#“ als Default-Wert setzen, muß „##<irgendwas>##“ übergeben werden, wobei innerhalb von „<irgendwas>“ dann das „#“ wiederum nur einmal vorkommen braucht (sprich „##“ wird innerhalb von „<irgendwas>“ auch als „##“ interpretiert).
Erlaubte Funktionen sind :
⇒ Erzeugt das aktuelle Datum (ohne Uhrzeit) im Format mm.dd.yyyy
⇒ Erzeugt die aktuelle Uhrzeit im Format hh:mi:ss:mmm
⇒ Erzeugt das aktuelle Datum inkl. aktueller Uhrzeit im Format mm.dd.yyyy hh:mi:ss:mmm
⇒ Erzeugt einen zufälligen string der durch <strlength> angegebenen Länge (Zahl zwischen 1 und 50), wobei als Zeichen-Vorrat (0,..,9,a,..z,A,..Z) zugrunde liegt. Optional kann <opt. Prefix> vorangestellt und/oder <opt. Postfix> angehängt werden. Diese Parameter müssen jeweils einfach einen (auch durchaus leeren) string darstellen, der mit dem einfachan Anführungszeichen (') beginnen und enden muß !
Beispiele :
1.) #randomstr(20)#
⇒ Es wird eine zufällige Kette aus 20 Zeichen erzeugt
2.) #randomstr(20,'','_test')#
⇒ Es wird eine zufällige Kette aus 20 Zeichen erzeugt, an die „_test“ angehängt wird
3.) #randomstr(20,'GEN')#
⇒ Es wird eine zufällige Kette aus 20 Zeichen erzeugt, der „GEN“ vorangestellt wird
4.) #randomstr(20,'1,2')#
⇒ Es wird eine zufällige Kette aus 20 Zeichen erzeugt, der „1,2“ vorangestellt wird
5.) #randomstr(20,'1,2,', '3,4')#
⇒ Es wird eine zufällige Kette aus 20 Zeichen erzeugt, der „1,2,“ vorangestellt und and die „3,4“ angehängt wird
Die Datums-Funktionen sind natürlich nur erlaubt bei Merkmalen mit Datum als Basis-Feldtyp, die „randomstr“-Funktion darf nur bei Merkmalen mit Basis-Feldtyp „Text“ verwendet werden !
Hinweis :
Bei den Datums-Funktionen sind die zur Laufzeit generierten Werte für die zu verarbeitenden Personen (beim Import können es ja mehrere sein) identisch ! Im Gegensatz zur „randomstr“-Funktion : wenn beispielsweise drei Personen verarbeitet werden, findet auch dreimal ein entsprechender Funktions-Aufruf statt, so daß (ein ausreichender <strlength>-Wert vorausgesetzt) auch drei verschiedene Werte herauskommen.
HTTP-Method | POST |
HTTP-Auth | Optional |
Alias | pm_ModifyPersonCharacteristicsInCategories_Ad |
Tags | |
Engine-Kategorie | configurations |
Engine-Typ | Daten-Änderung |
Letzte Aktualisierung | 7.0.7 (2015-01-29) |
Name 1) | Standard-Wert | Beschreibung 2) | SQL-Datentyp3) | ab Version |
---|---|---|---|---|
PersonCharacCategoryID | ID einer Kategorie von Personen-Merkmalen | tinyint | 3.5.0 | |
PersonCharacteristicID | ID eines Personen-Merkmals. Ist für den Aufrufer der lesende Zugriff auf das Merkmal komplett gesperrt (s. Rückgabespalten „AccessRestriction“ und „ReadAccessRestrictionPattern“ von pm_GetPChAccRestrForUsers_Ad), gibt es einen Fehler ! | smallint | 3.5.0 | |
Required | 0 | Falls „1“, so MUSS eine Person, die eine Angabe zu wenigstens einem Merkmal der Kategorie „PersonCharacCategoryID“ macht, auf JEDEN FALL auch eine Angabe zu Merkmal „PersonCharacteristicID“ machen | bit | 3.5.0 |
Delete | 0 | Die Zuordnung „PersonCharacteristicID“ → „PersonCharacCategoryID“ soll… „0“ : erstellt „1“ : gelöscht … werden (s. a. „Wichtige Hinweise“ in der Beschreibung) | bit | 3.5.0 |
KeepPropertiesHistoryInDays | NULL | Wieviele Tage sollen Änderungen von Eigenschaften zum Merkmal „PersonCharacteristicID“ von Personen des Typs, dem die Kategorie „PersonCharacCategoryID“ zugewiesen ist, gehalten werden ? („NULL“ / „0“ : keine Historie, „-1“ : unendlich lang aufbewahren) | smallint | 4.0.0 |
DefaultValue | NULL | Standard-Wert, der autom. zu einer Person als Eigenschaft zum Merkmal „PersonCharteristicID“ gespeichert wird, wenn Daten der Kategorie „PersonCharacCategoryID“ bearbeitet werden, die Person aber KEINE Eigenschaften zu Merkmalen dieser Kategorie besitzt | varchar(100) | 6.0.0 |
Country | 'german' | Gibt an, in welchem Format „DefaultValue“ angegeben ist, wenn ein Datums-Wert vorliegt (Groß-/Kleinschreibung wird nicht beachtet) : 'german', 'germany' : Tag-Monat-Jahr 'english', 'england' : Monat-Tag-Jahr | varchar(10) | 6.0.0 |
Die Prozedur hat keine Rückgaben.
Die Prozedur hat keine Output-Parameter.
Code | Beschreibung | Quelle 4) |
---|---|---|
-697 | Aktion kann nicht durchgeführt werden, da für ein Merkmal eine Zugriffsbeschränkung besteht | nur direkt |
-695 | Es kann kein fester Default-Wert für „eindeutige“ Merkmale („IsUnique = 1“) konfiguriert werden | nur direkt |
-689 | Ein Merkmal darf maximal 31 Personentypen zugewiesen sein | nur direkt |
-688 | Wegen vorhandener Personendaten kann der Kategorie kein Pflichtmerkmal hinzugefügt werden | nur direkt |
-687 | Das Merkmal kann nicht aus der Kategorie entfernt werden, da bereits Personendaten vorhanden sind | nur direkt |
-686 | Die Merkmal-Kategorie kann nicht geändert/gelöscht werden, da bereits Personendaten existieren | nur direkt |
-681 | Ein Merkmal darf einem Personen-Typ nur einmal zugewiesen werden | nur direkt |
-680 | Es darf zu einem Personen-Typ nur genau eine Merkmal-Kategorie mit Pflichtmerkmalen existieren | nur direkt |
-676 | Zum Merkmal sind nur vordefinierte Werte erlaubt, aber der Wert existiert noch nicht | nur direkt |
-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 | nur 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] |
7.0.4 | 2014-03-19 | Überflüssige „set forceplan off“-Anweisung an einer Stelle entfernt |
6.5.2 | 2013-02-26 | 1. Beachtung der neuen Zugriffs-Beschränkungen für Merkmale [⇒ Doku-Anpassung] 2. Anpassungen an den aktuellen Quellcode-Standard [u.a. wg. UTF8-Unterstützung] |
6.0.0 | 2010-03-26 | 1. Neuer Parameter „DefaultValue“ 2. Anpassung des Quell-Codes an den aktuellen Standard |
4.0.15 | 2004-07-30 | 1. Aufruf der Prozeduren „_mi_StartProcedure“ und „_mi_FinishProcedure“ 2. Ausführen von „set transaction isolation level 1“ und „set rowcount 0“ zu Beginn 3. Konsequente Fehlerbehandlung 4. Man kann jetzt prinzipiell auch das Flag „Required“ ändern |
4.0.0 | 2003-04-03 | Neuer Parameter „KeepPropertiesHistoryInDays“ |
3.5.13 | 2001-12-06 | |
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_ModifyPersonCharacsInCat_Ad?PersonCharacCategoryID=<value>&PersonCharacteristicID=<value>'
Mit xmllint 5) formatierte Ausgabe:
curl -X POST 'http://<partner>-<project>.dstore.de/default/engine/pm_ModifyPersonCharacsInCat_Ad?PersonCharacCategoryID=<value>&PersonCharacteristicID=<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_ModifyPersonCharacsInCat_Ad', array( 'PersonCharacCategoryID' => <value>, 'PersonCharacteristicID' => <value>, // 'Required' => 0, // 'Delete' => 0, // 'KeepPropertiesHistoryInDays' => NULL, // 'DefaultValue' => NULL, // 'Country' => 'german' ) ); $service->execute($request); $xml_result = $request->getResponse()->getBody()->toSimpleXmlDocument(); $ResultSet = $xml_result->getRowsAsArray();
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_ModifyPersonCharacsInCat_Ad"> <Parameters> <Parameter Name="PersonCharacCategoryID"><!-- tinyint value --></Parameter> <Parameter Name="PersonCharacteristicID"><!-- smallint value --></Parameter> <!-- <Parameter Name="Required">0</Parameter> --> <!-- <Parameter Name="Delete">0</Parameter> --> <!-- <Parameter Name="KeepPropertiesHistoryInDays">NULL</Parameter> --> <!-- <Parameter Name="DefaultValue">NULL</Parameter> --> <!-- <Parameter Name="Country">'german'</Parameter> --> </Parameters> </Procedure> </Batch> </ListOfBatches>