Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
engine:procedures:im_modifyconditiongroups_ad [11.01.2016 ] |
engine:procedures:im_modifyconditiongroups_ad [11.01.2016 ] (aktuell) |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ===== im_ModifyConditionGroups_Ad ===== | ||
+ | |||
+ | Prozedur zum Bearbeiten von (Artikel-)Bedingungs-Gruppen.\\ | ||
+ | |||
+ | |||
+ | |||
+ | Eine Bedingungs-Gruppe ist Bestandteil einer sogenannten Artikel-Bedingung, deren Aufbau kurz beschrieben so aussieht :\\ | ||
+ | |||
+ | Eine Artikel-Bedingung besteht aus Bedingungs-Gruppen, die jeweils aus Bedingungs-Teilen bestehen, die ihrerseits immer drei Bedingungs-Arten (Hierarchie-Bedingung, Vorgänger-Bedingung und Eigenschafts-Bedingung) definieren.\\ | ||
+ | |||
+ | Im folgenden werden die Bestandteile einzeln erläutert. Beginnen wir mit der "kleinsten Einheit" :\\ | ||
+ | |||
+ | |||
+ | |||
+ | 1.) Ein sogenannter Bedingungs-Teil ("ItemConditionPart") definiert drei Bedingungs-Arten :\\ | ||
+ | |||
+ | a) Hierarchie-Bedingung ("LevelIDs")\\ | ||
+ | |||
+ | Diese besteht aus einer Menge von Hierarchien ("LevelIDs"), wobei es auch möglich ist, den Wert ",," zu definieren, der für "beliebige Hierarchie" steht.\\ | ||
+ | |||
+ | b) Vorgänger-Bedingung ("DomainTreeNodeIDs")\\ | ||
+ | |||
+ | Dabei handelt es sich um eine Menge von Vorgänger-IDs ("TreeNodeIDs"), wobei es auch möglich ist, den Wert ",," zu definieren, der "beliebiger Vorgänger" bedeutet.\\ | ||
+ | |||
+ | c) Eigenschafts-Bedingung\\ | ||
+ | |||
+ | Sie ist immer zu einem Merkmal ("NodeCharacteristicID") definiert und besteht aus einem "Operator1" und der dazugehörigen "Condition1", sowie optional aus einem weiteren "Operator2" und der dazugehörigen "Condition2". Dazu können Optionen hinsichtlich Vererbung und rekursiver Auswertung bei der Ermittlung der Eigenschaft definiert werden.\\ Es ist auch möglich, den Wert "-1" als Merkmal ("NodeCharacteristicID") zu definieren, was den speziellen Fall "KEINE Eigenschafts-Bedingung" darstellen soll.\\ | ||
+ | |||
+ | Ein Artikel-Element erfüllt einen Bedingungs-Teil genau dann, wenn alle drei Bedingungs-Arten erfüllt sind. Der spezielle (in einer Standard-Installation bereits definierte) Teil ... | ||
+ | * "beliebige Hierarchie" und | ||
+ | * "beliebiger Vorgänger" und | ||
+ | * "KEINE Eigenschafts-Bedingung" | ||
+ | wird von jedem (nicht gelöschten) Artikel-Element erfüllt.\\ | ||
+ | |||
+ | Hinweis : Der "Active"-Status eines Elementes spielt grundsätzlich keine Rolle !\\ | ||
+ | |||
+ | |||
+ | |||
+ | 2.) Durch eine logische Verknüpfung entweder mit "AND" oder "OR" von solchen Bedingungs-Teilen ergibt sich eine sogenannte Bedingungs-Gruppe ("ItemConditionGroup").\\ Artikel-Elemente erfüllen also eine solche Bedingungs-Gruppe, wenn sie entweder alle (bei "AND") oder mindestens einen (bei "OR") ihrer Bedingungs-Teile erfüllen.\\ | ||
+ | |||
+ | |||
+ | |||
+ | 3.) Mehrere solcher Gruppen können dann ihrerseits wiederum entweder mit "AND" oder "OR" verknüpft werden und bilden letztlich eine Artikel-Bedingung.\\ Artikel-Elemente erfüllen also eine solche (Gesamt-)Artikel-Bedingung, wenn sie entweder alle (bei "AND") oder mindestens eine (bei "OR") ihrer Bedingungs-Gruppen erfüllen.\\ | ||
+ | |||
+ | |||
+ | |||
+ | Somit lassen sich einfache und komplexe Bedingungen formulieren. Beispiele :\\ | ||
+ | |||
+ | 1.) "Artikel-Elemente der Kategorie X oder Y der Marke Z"\\ => Dies ließe sich mit einem Bedingungs-Teil ...\\ "Beliebige Hierarchie UND X,Y als DomainTreeNodeIDs UND Eigenschaft Z zum Merkmal Marke"\\ ... abbilden, der als einziger Teil einer Bedingungs-Gruppe angehören würde, die ihrerseits alleine dann schon die gesamte Bedingung darstellt.\\ | ||
+ | |||
+ | 2.) "Rot gefärbte Produkte der Marke X oder blau gefärbte Produkte in Kategorie A der Marke Y"\\ => Dieses etwas kompliziertere Beispiel läßt sich beispielsweise wie folgt mit vier Bedingungs-Teilen und zwei -Gruppen abbilden :\\ Die beiden Teile ... | ||
+ | * "Produkt-Hierarchie UND beliebiger Vorgänger UND Eigenschaft rot zum Merkmal Farbe" | ||
+ | und | ||
+ | * "Produkt-Hierarchie UND beliebiger Vorgänger UND Eigenschaft X zum Merkmal Marke" | ||
+ | ... werden mit "AND" zu einer Gruppe "1" verknüpft.\\ Außerdem verknüpft man die beiden Teile ... | ||
+ | * "Produkt-Hierarchie UND A als DomainTreeNodeID UND Eigenschaft blau zum Merkmal Farbe" | ||
+ | und | ||
+ | * "Produkt-Hierarchie UND A als DomainTreeNodeID UND Eigenschaft Y zum Merkmal Marke" | ||
+ | ... wiederum mit "AND" zu einer Gruppe "2".\\ Durch eine "OR"-Verknüpfung der beiden Gruppen ist dann schließlich die gesamte Bedingung definiert.\\ Anmerkung : Es gibt oftmals mehrere Möglichkeiten der Abbildung, da gerade z.B. die Hierarchie-Bedingung bei einer Verknüpfung zweier Bedinungs-Teile mit "UND" nur bei einer der Teile definiert werden muß - in unserem obigen Beispiel 2 haben wir die Hierarchie hingegen bei ALLEN Bedingungs-Teilen definiert.\\ | ||
+ | |||
+ | |||
+ | |||
+ | Hinweise :\\ | ||
+ | |||
+ | 1.) Das einzige, was an einer bestehenden Bedingungs-Gruppe immer geändert werden kann, ist die "ConditionGroupDescription" (-> Parameter "ConditionGroupDescription") ! Die "CombinePartsWithANDOperator"-Einstellung (-> Parameter "CombinePartsWithANDOperator") kann nur geändert werden, wenn der Gruppe nicht mehr als 1 Bedingungs-Teil zugeordnet ist.\\ | ||
+ | |||
+ | 2.) Löschen ist nur möglich, wenn die Bedingungs-Gruppe nicht verwendet wird.\\ | ||
+ | |HTTP-Method|POST | | ||
+ | |HTTP-Auth|Optional | | ||
+ | |Tags|{{tag>[im Modify Condition Groups Ad]}}| | ||
+ | |Engine-Kategorie|item management | | ||
+ | |Engine-Typ|Daten-Änderung | | ||
+ | |Letzte Aktualisierung|7.0.7 (2015-01-29)| | ||
+ | |||
+ | ==== Parameter ==== | ||
+ | |||
+ | |__ConditionGroupDescription__| |Bezeichnung der (Artikel-)Bedingungs-Gruppe "ConditionGruopID" (muß immer vorhanden sein, "NULL" ist nicht erlaubt)\\ |varchar(255)|6.0.0| | ||
+ | |CombinePartsWithANDOperator|1 |Gibt an, wie der (Artikel-)Bedingungs-Gruppe "ConditionGruopID" zugeordnete Bedingungs-Teile verknüpft werden sollen :\\ "0" : Oder-Verknüpfung (mind. ein Bedingungs-Teil muß erfüllt sein)\\ "1" : Und-Verknüpfung (alle Bedingungs-Teile müssen erfüllt sein)\\ |bit|6.0.0| | ||
+ | |DeleteConditionGroup|0 |Wird nur beachtet, wenn "ConditionGroupID" angegeben ist ! Entscheidet, ob die bestehende "ConditionGroupID" geändert ("0") oder gelöscht ("1") wird (s. Beschreibung !)\\ |bit|6.0.0| | ||
+ | ==== Rückgabe ==== | ||
+ | |||
+ | Die Prozedur hat keine Rückgaben. | ||
+ | ==== Output-Parameter ==== | ||
+ | |||
+ | |ConditionGroupID|ID einer (Artikel-)Bedingungs-Gruppe. "NULL" angeben, um eine neue Gruppe anzulegen (die neue ID wird dann über diesen Parameter zurückgegeben). Sonst wird eine bestehende Gruppe je nach "DeleteConditionGroup" geändert oder gelöscht.| | ||
+ | ==== Mögliche Return-Codes ==== | ||
+ | |||
+ | ^Code ^Beschreibung ^Quelle ((direkt meint "von der Prozedur selber" und indirekt meint "von intern aufgerufenen Unterprozeduren")) ^ | ||
+ | |-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| | ||
+ | |-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| | ||
+ | |-151|Die Bedingungs-Gruppe darf nicht mehr gelöscht werden, da sie bereits verwendet wird|nur direkt| | ||
+ | |-150|Der Verknüpfungs-Operator für die Bedingungs-Gruppe kann nicht mehr geändert werden|nur direkt| | ||
+ | ==== XML-Schema ==== | ||
+ | |||
+ | Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema [[http://resources.dstore.de/xsd/webservice_SmartGate/Response/EngineProcedure_v1_0.xsd|Response/EngineProcedure_v1_0.xsd]] validiert. | ||
+ | ==== Historie ==== | ||
+ | |||
+ | |7.0.7 |2015-01-29|Interne Änderung : Datentyp-Erweiterung des "ReferenceKey" [für "_mi_StartProcedure"-Aufruf]\\ | | ||
+ | |6.5.3 |2013-03-18|Anpassungen an aktuellen Code-Standard, u.a. wg. UTF8-Unterstützung\\ | | ||
+ | |6.0.7 |2012-05-08|1. Ab jetzt wird auch beachtet, ob der Aufruf dieser Prozedur innerhalb einer Transaktion stattfindet\\ 2. Kleine interne Änderung : Statt mehrfach in eine Tabelle einzufügen "UNION ALL"-Technik verwendet\\ | | ||
+ | |6.0.0 |2010-03-26|Erstmalig 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: | ||
+ | * [[http://playground.dstore.de/index.php?proc=im_ModifyConditionGroups_Ad|im_ModifyConditionGroups_Ad im Engine Playground öffnen]] | ||
+ | == cURL == | ||
+ | Unformatierte Ausgabe: | ||
+ | <code bash> | ||
+ | curl -X POST 'http://<partner>-<project>.dstore.de/default/engine/im_ModifyConditionGroups_Ad?ConditionGroupDescription=<value>'</code>Mit xmllint ((I.d.R. auf Unix-artigen Systemen bereits installiert, Bestandteil der libxml2, siehe http://www.xmlsoft.org)) formatierte Ausgabe: | ||
+ | <code bash> | ||
+ | curl -X POST 'http://<partner>-<project>.dstore.de/default/engine/im_ModifyConditionGroups_Ad?ConditionGroupDescription=<value>' | xmllint --format -</code>== dStore_php == | ||
+ | <code 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'), | ||
+ | 'im_ModifyConditionGroups_Ad', | ||
+ | array( | ||
+ | 'ConditionGroupDescription' => '<value>', | ||
+ | // 'CombinePartsWithANDOperator' => 1, | ||
+ | // 'DeleteConditionGroup' => 0 | ||
+ | ) | ||
+ | ); | ||
+ | |||
+ | $service->execute($request); | ||
+ | |||
+ | $xml_result = $request->getResponse()->getBody()->toSimpleXmlDocument(); | ||
+ | $ResultSet = $xml_result->getRowsAsArray(); | ||
+ | |||
+ | $OutputParams = $xml_result->getOutputParametersAsArray();</code> | ||
+ | == engine/execute == | ||
+ | XML zur Ausführung mit der Methode [[:webservice:engine:execute|engine/execute]], z.B. per | ||
+ | curl --header 'Content-Type: application/xml' -X POST 'http://<partner>-<kunde>.dstore.de/default/engine/execute' -d '<xml-daten>' | ||
+ | |||
+ | <code xml> | ||
+ | <?xml version="1.0" encoding="UTF-8"?> | ||
+ | <ListOfBatches> | ||
+ | <Batch No="0"> | ||
+ | <Procedure Name="im_ModifyConditionGroups_Ad"> | ||
+ | <Parameters> | ||
+ | <Parameter Name="ConditionGroupDescription"><!-- varchar value --></Parameter> | ||
+ | <!-- <Parameter Name="CombinePartsWithANDOperator">1</Parameter> --> | ||
+ | <!-- <Parameter Name="DeleteConditionGroup">0</Parameter> --> | ||
+ | </Parameters> | ||
+ | </Procedure> | ||
+ | </Batch> | ||
+ | </ListOfBatches></code> | ||