Benutzer-Werkzeuge

Webseiten-Werkzeuge


engine:procedures:mi_modifytritrigger_ad

mi_ModifyTRITrigger_Ad

Prozedur zur Verwaltung der Grundeinstellungen eines „TRI-Trigger“ bzw. zur Erstellung/Änderung eines solchen Triggers in Form von Pseudo-Code.

Hintergrund :

„TRI-Trigger“ (für „tiny replacement interperter“-Trigger) sind Objekte, die innerhalb der Engine bei bestimmten Datenänderungen ausgelöst werden (z.B. dem Status-Wechsel von Auftragspositionen). Die Definition eines solchen Triggers besteht aus Arbeitsschritten, zu denen optional eine Bedingung hinterlegt sein kann und zu denen immer eine bestimmte Reihe von Anweisungen (derzeit Prozedur-Aufrufen) konfiguriert ist.

Für die genaue Definition des Triggers (was also tatsächlich ausgeführt werden soll) stehen drei Wege zur Verfügung :

1.) Einfacher Sonderfall eines „TRI-Triggers“ ist die schlichte Ausführung einer („custom“-)Prozedur. In so einem Fall übergibt man (natürlich nur im Anlegen-/Ändern-Fall, s. Parameter „DeleteTrigger“) in „ExecuteProcedureName“ den Namen dieser Prozedur.

2.) Eine Kette von Aufrufen der folgenden mi_ModifyTRITrigger...-Prozeduren :

  • mi_ModifyTRITriggerReplFunc_Ad
  • mi_ModifyTRITriggerWorkflow_Ad
  • mi_ModifyTRITriggerConds_Ad
  • mi_ModifyTRITriggerToDos_Ad
  • mi_ValidateTRITrigger_Ad

Diese ruft man im Anschluß nach der Anlage durch diese Prozedur auf - mit der im Ausgabeparameter „TriggerID“ erhaltenen ID. Dabei ist mi_ValidateTRITrigger_Ad ganz zum Schluß auszuführen, damit der Trigger auf Vollständigkeit/Gültigkeit geprüft und als „verwendbar gekennzeichnet“ (s. Rückgabespalte „TriggerStatus“ von mi_GetTRITrigger_Ad) wird.

3.) Als letzte Möglichkeit kann man in „TRITriggerDefinition“ (wird nur beachtet, wenn „TriggerID“ und „ExecuteProcedureName“ beide „NULL“ sind !) „Pseudo-Code“ angeben, der den Trigger (komplett) definiert.
ACHTUNG : In diesem Fall werden „TriggerTypeID“, „TriggerName“ und „TriggerDescription“ ignoriert (weil sich diese Angaben aus „TRITriggerDefinition“ ergeben müssen) !
Anmerkung :
Dieses Verfahren ist derzeit noch experimentell und daher ohne genaue Dokumentation. Man erhält aber einige Beispiele durch den Aufruf von mi_GetTRITriggerCode_Ad für im Standard definierte TRI-Trigger (z.B. „exec mi_GetTRITriggerCode_Ad TriggerID = 1, MaxCharsPerCodeLine = 150“).

Hinweise :
1. Sobald ein Trigger schon verwendet wird (s. Rückgabespalte „TriggerStatus“ von mi_GetTRITrigger_Ad), ist eine Änderung oder Löschung NICHT mehr möglich !
2. „TriggerTypeID“ kann NICHT mehr geändert werden, sobald für den Trigger mindestens ein Arbeitsschritt (s. mi_GetTRITriggerWorkSteps_Ad) definiert ist
3. Eine aufzurufende Prozedur („ExecuteProcedureName“) und die Definition von Arbeitsschritten (s. mi_GetTRITriggerWorkSteps_Ad) schließen sich aus !
4. Werte „⇐ 0“ für „TriggerID“ sind nicht erlaubt, da diese für Standard-Trigger reserviert sind. Hintergrund : s. Anmerkungen zum Parameter „ExecuteProcedureName

Anmerkungen zum Parameter „ExecuteProcedureName“ :

Hierdurch wird das alte Verhalten über die „Action“-Prozeduren gewährleistet. Vor dem „TRI-Trigger“-feature gab es über „_ac_ChangeOrderState“ bzw. „_ac_NewOrder“ die Möglichkeit, auf Status-Wechsel bzw. Auftragsanlage zu reagieren. Per default ist daher ein Trigger für alle Status-Wechsel konfiguriert, der zur Ausführung von „_ac_ChangeOrderState“ führt (außer bei „OrderStateID = 0“, hier kann aber der Aufruf von „_ac_NewOrder“ konfiguriert werden, wofür ebenfalls schon ein TRI-Trigger definiert aber nicht zugewiesen ist). Ab Version 7.0.3 kann man auch eine andere Prozedur aufrufen lassen, aber die Übergabe der Daten BLEIBT gleich, d.h. : Via „dstoreifin.dbo._ac_ChangeOrderState“ werden die vom Status-Wechsel betroffenen „OrderContentID“s übergeben und außerdem wird die (konfigurierte) Prozedur mit den Parametern „ToOrderStateID“ (in welchen Status gewechselt wurde) und „NestingLevelForInputData“ (zu welchem „Nesting Level“ die Daten übergeben wurden) aufgerufen. Daher wird in Abhängigkeit von „TriggerTypeID“ auch immer geprüft, ob die angegebene Prozedur bestimmte Parameter bereitstellt (bei „TriggerTypeID = 2“ müssen das also genau die eben erwähnten Parameter „ToOrderStateID“ und „NestingLevelForInputData“ sein).

HTTP-MethodPOST
HTTP-AuthOptional
Tags
Engine-Kategoriesystem administration
Engine-TypDaten-Änderung
Letzte Aktualisierung7.0.8 (2015-08-21)

Parameter

TriggerTypeID ID des Trigger-Typs (sprich, WO der Trigger eingesetzt werden kann). Mögliche Werte : s. mi_GetTRITriggerTypes_Ad.
tinyint7.0.3
TriggerName Name des Triggers. Es dürfen nur Buchstaben (A-Z bzw. a-z), Zahlen sowie Unterstriche („_“) verwendet werden. Irrelevant wenn „TRITriggerDefinition“ beachtet wird.
varchar(50)7.0.3
TriggerDescription Beschreibung (Kurz-Doku) des Triggers. Irrelevant wenn „TRITriggerDefinition“ beachtet wird.
varchar(255)7.0.3
ExecuteProcedureNameNULL Name einer Prozedur, die bei Trigger-Auslösung auszuführen ist. Falls angegeben, können KEINE Arbeitsschritte definiert werden (s. mi_ModifyTRITriggerWorkflow_Ad). Umgekehrt : Wenn schon Arbeitsschritte definiert sind, muß hier „NULL“ übergeben werden.
varchar(50)7.0.3
DeleteTrigger0 Wird nur beachtet, wenn „TriggerID“ NICHT „NULL“ ist ! Gibt an, ob der Trigger geändert („0“) oder gelöscht („1“) werden soll.
bit7.0.3
TRITriggerDefinitionNULL Definition eines TRI-Triggers in Form von Pseudo-Code, wie ihn mi_GetTRITriggerCode_Ad ausgibt. Wird nur beachtet, wenn „TriggerID“ und „ExecuteProcedureName“ beide „NULL“ sind. S. Beschreibung !
varchar(16384)7.0.8

Rückgabe

Die Prozedur hat keine Rückgaben.

Output-Parameter

TriggerIDID eines „TRI-Trigger“, der je nach „DeleteTrigger“ geändert oder gelöscht wird. Bei „NULL“ wird ein neuer Trigger erstellt bzw. wenn „TRITriggerDefinition“ beachtet wird auch geändert.

Mögliche Return-Codes

Code Beschreibung Quelle 1)
-577Der Source-Code der SQL-Funktion ist nicht verfügbarnur indirekt
-574Der Source-Code des Triggers ist nicht verfügbarnur indirekt
-573Der Source-Code der Prozedur ist nicht verfügbarnur 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
-535Das Datum liegt nicht in der Vergangenheitnur indirekt
-530Der Wert ist nicht konvertierbarnur indirekt
-510Der Benutzer ist nicht registriertnur indirekt
-509Fehlerhafte TRI-Trigger-Definitionnur indirekt
-508Ungültiger TRI-Ausdrucknur 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.8 2015-08-211. Neuer Parameter „TRITriggerDefinition“
2. Im Fall „ExecuteProcedureName is NOT NUlL“ wird nun mi_ValidateTRITrigger_Ad aufgerufen
3. „TriggerDescription“ ist nicht mehr optional
7.0.7 2015-01-29Interne Änderung : Datentyp-Erweiterung des „ReferenceKey“ [für „_mi_StartProcedure“-Aufruf]
7.0.4 2014-03-19Dokumentation [Prozedurkopf] angepasst
7.0.3 2013-12-13Erstmalig 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/mi_ModifyTRITrigger_Ad?TriggerTypeID=<value>&TriggerName=<value>&TriggerDescription=<value>'

Mit xmllint 2) formatierte Ausgabe:

curl -X POST  'http://<partner>-<project>.dstore.de/default/engine/mi_ModifyTRITrigger_Ad?TriggerTypeID=<value>&TriggerName=<value>&TriggerDescription=<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'),
	'mi_ModifyTRITrigger_Ad',
		array(
			'TriggerTypeID' => <value>,
			'TriggerName' => '<value>',
			'TriggerDescription' => '<value>',
			// 'ExecuteProcedureName' => NULL,
			// 'DeleteTrigger' => 0,
			// 'TRITriggerDefinition' => NULL
		)
);
 
$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="mi_ModifyTRITrigger_Ad">
			<Parameters>
				<Parameter Name="TriggerTypeID"><!-- tinyint value --></Parameter>
				<Parameter Name="TriggerName"><!-- varchar value --></Parameter>
				<Parameter Name="TriggerDescription"><!-- varchar value --></Parameter>
				<!-- <Parameter Name="ExecuteProcedureName">NULL</Parameter> -->
				<!-- <Parameter Name="DeleteTrigger">0</Parameter> -->
				<!-- <Parameter Name="TRITriggerDefinition">NULL</Parameter> -->
			</Parameters>
		</Procedure>
	</Batch>
</ListOfBatches>
1)
direkt meint „von der Prozedur selber“ und indirekt meint „von intern aufgerufenen Unterprozeduren“
2)
I.d.R. auf Unix-artigen Systemen bereits installiert, Bestandteil der libxml2, siehe http://www.xmlsoft.org
engine/procedures/mi_modifytritrigger_ad.txt · Zuletzt geändert: 11.01.2016 (Externe Bearbeitung)