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 :
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-Method | POST |
HTTP-Auth | Optional |
Tags | |
Engine-Kategorie | system administration |
Engine-Typ | Daten-Änderung |
Letzte Aktualisierung | 7.0.8 (2015-08-21) |
TriggerTypeID | ID des Trigger-Typs (sprich, WO der Trigger eingesetzt werden kann). Mögliche Werte : s. mi_GetTRITriggerTypes_Ad. | tinyint | 7.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 | |
ExecuteProcedureName | NULL | 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 |
DeleteTrigger | 0 | Wird nur beachtet, wenn „TriggerID“ NICHT „NULL“ ist ! Gibt an, ob der Trigger geändert („0“) oder gelöscht („1“) werden soll. | bit | 7.0.3 |
TRITriggerDefinition | NULL | 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 |
Die Prozedur hat keine Rückgaben.
TriggerID | ID 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. |
Code | Beschreibung | Quelle 1) |
---|---|---|
-577 | Der Source-Code der SQL-Funktion ist nicht verfügbar | nur indirekt |
-574 | Der Source-Code des Triggers ist nicht verfügbar | nur indirekt |
-573 | Der Source-Code der Prozedur ist nicht verfügbar | 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 |
-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 |
-509 | Fehlerhafte TRI-Trigger-Definition | nur indirekt |
-508 | Ungültiger TRI-Ausdruck | 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.8 | 2015-08-21 | 1. 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-29 | Interne Änderung : Datentyp-Erweiterung des „ReferenceKey“ [für „_mi_StartProcedure“-Aufruf] |
7.0.4 | 2014-03-19 | Dokumentation [Prozedurkopf] angepasst |
7.0.3 | 2013-12-13 | 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/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 -
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();
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>