Benutzer-Werkzeuge

Webseiten-Werkzeuge

Action disabled: source

engine:procedures:pm_modifypersoncharacs_ad

pm_ModifyPersonCharacs_Ad

Verwaltet die Personen-Merkmale.

Wichtige Hinweise :

1. Wenn versucht wird, ein neues Merkmal mit einem „Ja-Nein“-Basis-Feld-Typ anzulegen, wird in jedem Fall „PredefinedValues“ auf „1“ gesetzt und dafür gesorgt, daß zwei Eigenschaften „0“ und „1“ zu dem neuen Merkmal angelegt werden.

2. Einige Änderungen für ein Merkmal können, sobald es Personen mit Eigenschaften hierzu gibt, NICHT mehr geändert werden :

  • von „Unique = 0“ nach „Unique = 1“
  • von „PredefinedValues = 0“ nach „PredefinedValues = 1“
  • von „Required = 0“ nach „Required = 1“, falls nicht alle betroffenen Personen Eigenschaften zu diesem Merkmal besitzen
  • Änderungen der „FieldTypeID“, wenn die zugehörige „BasicFieldTypeID“ ANDERS ist oder aber die Länge oder Genauigkeit ERNIEDRIGT wird - Ausnahme : Alle Eigenschaften erfüllen die neuen Bedingungen

3. Bei einigen Änderungen müssen evtl. vorhandene Eigenschaften überprüft werden, was etwas Zeit in Anspruch nehmen kann !

Anmerkungen zu den Parametern „Visible“ und „Modify“ :

Bis Version 6.5.2 gab es zwei entsprechende Spalten („Visible“ und „ModificationAllowedByUser“) in der zugrunde liegenden Tabelle „PersonCharacteristics“, deren Funktionalität 1:1 durch die beiden Parameter gesteuert wurde. Es gab dadurch die Möglichkeit zu steuern, ob und wie in „Pu“-Prozeduren (z.B. pm_GetPersonProperties_Pu oder pm_ModifyPersonData_Pu) einzelne Merkmale zugreifbar sind (lesend : „Visible“/„Visible“, schreibend : „ModificationAllowedByUser“/„Modify“).

Dies wurde in 6.5.2 verallgemeinert und erweitert : Es gibt nun die Möglichkeit, pro Merkmal für Benutzer/Gruppen sogenannte Zugriffs- Beschränkungen einzurichten (s. pm_ModifyPChAccResForGroup_Ad und pm_ModifyPChAccResForUser_Ad).

Um abwärtskompatibel zu bleiben, haben die beiden Parameter seit 6.5.2 nun folgende Auswirkung :

  • „Visible“ : Bei Angabe von „0“ wird dafür gesorgt, daß der spezielle Benutzer „publicuser“ („UserID = 0“) KEINEN lesenden Zugriff auf Eigenschaften zu diesem Merkmal hat, d.h. dies entspricht quasi der Konfiguration einer Zugriffs-Beschränkung für den „publicuser“, wie sie auch dieser Aufruf durchführt :

pm_ModifyPChAccResForUser_Ad UserID = 0, PersonCharacteristicID = <ID>, AccessRestriction = 8 – Lesen („8“) verboten
Bei Angabe von „1“ wird entsprechend dafür gesorgt, daß ein evtl. vorhandenes „Leseverbot“ für den „publicuser“ ENTFERNT (bzw. bei Neu-Anlage eines Merkmals - also falls „PersonCharacteristicID = NULL“ - erst gar keine entsprechende Beschränkung angelegt) wird.
Als DRITTE Möglichkeit hat man, „NULL“ anzugeben. In diesem Fall wird NICHTS gemacht, d.h. es wird weder eine Zugriffsbeschränkung angelegt oder verändert oder entfernt.
⇒ „NULL“ ist der empfohlene Wert, da für die Zugriffsbeschränkungen nun die Prozeduren pm_ModifyPChAccResForGroup_Ad und pm_ModifyPChAccResForUser_Ad zuständig sind !

  • „Modify“ : Bei Angabe von „0“ wird dafür gesorgt, daß der spezielle Benutzer „publicuser“ („UserID = 0“) KEINERLEI schreibende Zugriff (weder anlegen noch ändern noch löschen) auf Eigenschaften zu diesem Merkmal hat, d.h. dies entspricht quasi der Konfiguration einer Zugriffs-Beschränkung für den „publicuser“, wie sie auch dieser Aufruf durchführt :

pm_ModifyPChAccResForUser_Ad UserID = 0, PersonCharacteristicID = <ID>, AccessRestriction = 7 – Anlegen („1“), Ändern („2“) UND Löschen („4“) verboten
Bei Angabe von „1“ wird entsprechend dafür gesorgt, daß evtl. vorhandene „Schreibverbote“ für den „publicuser“ ENTFERNT (bzw. bei Neu-Anlage eines Merkmals - also falls „PersonCharacteristicID = NULL“ - erst gar keine entsprechenden Beschränkungen angelegt) werden.
Wird „2“ angegeben, erhält der „publicuser“ ein Verbot von „Ändern und Löschen“, d.h. dies entspricht :
pm_ModifyPChAccResForUser_Ad UserID = 0, PersonCharacteristicID = <ID>, AccessRestriction = 6 – Ändern („2“) UND Löschen („4“) verboten
Als VIERTE Möglichkeit hat man, „NULL“ anzugeben. In diesem Fall wird NICHTS gemacht, d.h. es wird weder eine Zugriffsbeschränkung angelegt oder verändert oder entfernt.
⇒ „NULL“ ist der empfohlene Wert, da für die Zugriffsbeschränkungen nun die Prozeduren pm_ModifyPChAccResForGroup_Ad und pm_ModifyPChAccResForUser_Ad zuständig sind !

Weitere Hinweise :
1. Dieses Verhalten ist nicht HUNDERTprozentig abwärtskompatibel, dafür gibt es aber den speziellen „PersonTypeSettings“-Eintrag „PCharacsBackwardCompatible“, der aber nur für Installationen VOR 6.5.2 verwendet werden sollte (für Details s. Doku dieses Eintrags) !
2. Um zu verhindern, daß versehentlich vorhandene Zugriffs-Beschränkungen „torpediert“ werden, gilt bei ÄNDERUNG eines bestehenden Merkmals („PersonCharacteristicID is NOT NULL AND DeleteCharacteristic = 1“) folgendes :
Es gibt einen Fehler („-500“), wenn …

  • „Visble“ oder „Modify“ NICHT „NULL“ sind

UND

  • es zum Merkmal „PersonCharacteristicID“ Benutzer- und/oder Gruppen-Zugriffsbeschränkungen AUSSER für „UserID = 0“ (also „publicuser“) gibt
HTTP-MethodPOST
HTTP-AuthOptional
Aliaspm_ModifyPersonCharacteristics_Ad
Tags
Engine-Kategorieconfigurations
Engine-TypDaten-Änderung
Letzte Aktualisierung7.0.7 (2015-01-29)

Parameter

Name 1) Standard-Wert Beschreibung 2) SQL-Datentyp3) ab Version
PersonCharacteristicIDNULL ID eines Personen-Merkmals. Bei Angabe von „NULL“ wird ein neues Merkmal angelegt. Falls eine ID angegeben und das Merkmal für den Aufrufer lesend gesperrt ist (komplett oder eingeschränkt, s. pm_GetPChAccRestrForUsers_Ad), gibt es einen Fehler !
smallint3.5.0
CharacteristicDescription Bezeichnung des (neuen) Merkmals
varchar(100)3.5.0
FieldTypeID ID eines „Feld-Typs“, von dem alle Eigenschaften des (neuen) Merkmals sein müssen (z.B. „Text mit maximal 20 Zeichen“) - siehe auch mi_GetFieldTypes_Ad
tinyint3.5.0
SortNo Bestimmt die Reihenfolge des (neuen) Merkmals innerhalb aller Merkmale
smallint3.5.0
Required0 Wird hier eine „1“ angegeben, bedeutet das folgendes : Jede Person eines Personen-Typs, dem das (neue) Merkmal zugewiesen ist, MUSS eine Eigenschaft zu diesem Merkmal angeben, ansonsten kann die Person nicht angelegt werden.
bit3.5.0
Visible1 Hier sollte „NULL“ übergeben werden (s. Beschreibung) ! Sonstige mögliche Werte :
- „0“ : komplettes Leseverbot für „UserID = 0“ („publicuser“) wird angelegt
- „1“ : Evtl. vorhandenes Leseverbot für „UserID = 0“ („publicuser“) wird entfernt
tinyint3.5.0
Modify1 Hier sollte „NULL“ übergeben werden (s. Beschreibung) ! Sonstige mögl. Werte :
- „0“ : „Schreibverbot“ für „UserID = 0“ anlegen
- „1“ : Evtl. vorh. „Schreibverbot“ für „UserID = 0“ entfernen
- „2“ : „Ändern-Und-Löschen-Verbot“ für „UserID = 0“ anlegen
tinyint3.5.0
PredefinedValues0 Hat das (neue) Merkmal nur vordefinierte Werte („0“ : Nein, „1“ : Ja) ?
bit3.5.0
IsUnique0 Wird hier eine „1“ angegeben, darf eine bestimmte Eigenschaft zum Merkmal nur EINER EINZIGEN Person zugewiesen werden
bit3.5.0
DeleteCharacteristic0 Wird nur beachtet, falls eine „PersonCharacteristicID“ angegeben ist. Gibt an, ob das Merkmal…
„0“ : geändert
„1“ : gelöscht
… werden soll
bit3.5.0
DescriptionForAdminNULL Bezeichnung des (neuen) Merkmals für den Administrator. Hintergrund : Merkmale, die von der Bezeichnung her identisch sind, und für einen Administrator bei Konfigurierungen nicht auseinander zu halten wären.
varchar(100)3.5.22

Rückgabe

Die Prozedur hat keine Rückgaben.

Output-Parameter

Die Prozedur hat keine Output-Parameter.

Mögliche Return-Codes

Code Beschreibung Quelle 4)
-697Aktion kann nicht durchgeführt werden, da für ein Merkmal eine Zugriffsbeschränkung bestehtnur direkt
-682Das Merkmal kann nicht mehr geändert werden, da bereits Eigenschaften vorhanden sindnur direkt
-680Es darf zu einem Personen-Typ nur genau eine Merkmal-Kategorie mit Pflichtmerkmalen existierennur direkt
-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
-535Das Datum liegt nicht in der Vergangenheitnur indirekt
-532Ungültiger Feldtypnur direkt
-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 abgebrochennur 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-261. Änderungen bzgl. der Parameter „Visible“ und „Modify“ (Datentyp-Änderung, neue mögliche Werte)
2. Aufgrund des neuen features der „Zugriffsbeschränkungen“ kann es nun zu einem Fehler beim Ändern/Löschen eines Merkmals kommen
5.1.2 2006-06-26Neuer möglicher Return-Code „-532“, da es ab 5.1.2 „FieldTypes“ mit einer „MaxLength > 100“ geben kann !
5.1.0 2006-02-08Fehler : Es war möglich, ein Merkmal in ein Pflichtmerkmal zu ändern, auch wenn dann die Bedingung verletzt war, daß zu einem Personen-Typ nur eine Merkmal-Kategorie mit Pflicht-Merkmalen existieren darf !
5.0.0 2004-12-21Interner Fehler bzgl. des Aufrufs von „_mi_StartProcedure“ : Es dürfen in einem „ParameterNamesAndTypes_List…“-Parameter nicht mehr als 10 Elemente übergeben werden !
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
3.5.22 2002-08-30
3.5.20 2002-07-22
3.5.19 2002-06-17
3.5.8 2001-05-19
3.5.3 2001-02-11
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_ModifyPersonCharacs_Ad?CharacteristicDescription=<value>&FieldTypeID=<value>&SortNo=<value>'

Mit xmllint 5) formatierte Ausgabe:

curl -X POST  'http://<partner>-<project>.dstore.de/default/engine/pm_ModifyPersonCharacs_Ad?CharacteristicDescription=<value>&FieldTypeID=<value>&SortNo=<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_ModifyPersonCharacs_Ad',
		array(
			'CharacteristicDescription' => '<value>',
			'FieldTypeID' => <value>,
			'SortNo' => <value>,
			// 'PersonCharacteristicID' => NULL,
			// 'Required' => 0,
			// 'Visible' => 1,
			// 'Modify' => 1,
			// 'PredefinedValues' => 0,
			// 'IsUnique' => 0,
			// 'DeleteCharacteristic' => 0,
			// 'DescriptionForAdmin' => NULL
		)
);
 
$service->execute($request);
 
			$xml_result = $request->getResponse()->getBody()->toSimpleXmlDocument();
			$ResultSet = $xml_result->getRowsAsArray();
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_ModifyPersonCharacs_Ad">
			<Parameters>
				<Parameter Name="CharacteristicDescription"><!-- varchar value --></Parameter>
				<Parameter Name="FieldTypeID"><!-- tinyint value --></Parameter>
				<Parameter Name="SortNo"><!-- smallint value --></Parameter>
				<!-- <Parameter Name="PersonCharacteristicID">NULL</Parameter> -->
				<!-- <Parameter Name="Required">0</Parameter> -->
				<!-- <Parameter Name="Visible">1</Parameter> -->
				<!-- <Parameter Name="Modify">1</Parameter> -->
				<!-- <Parameter Name="PredefinedValues">0</Parameter> -->
				<!-- <Parameter Name="IsUnique">0</Parameter> -->
				<!-- <Parameter Name="DeleteCharacteristic">0</Parameter> -->
				<!-- <Parameter Name="DescriptionForAdmin">NULL</Parameter> -->
			</Parameters>
		</Procedure>
	</Batch>
</ListOfBatches>
1)
Pflichtparameter sind unterstrichen
4)
direkt meint „von der Prozedur selber“ und indirekt meint „von intern aufgerufenen Unterprozeduren“
5)
I.d.R. auf Unix-artigen Systemen bereits installiert, Bestandteil der libxml2, siehe http://www.xmlsoft.org
engine/procedures/pm_modifypersoncharacs_ad.txt · Zuletzt geändert: 11.01.2016 (Externe Bearbeitung)