8. Transaktion: OrderInOnlineShop
Die Transaktion OrderInOnlineShop verwendet die gleichen Nachrichten
und die gleichen Zustände wie die im vorherigen Abschnitt beschriebene
Transaktion Order. Ein velo..connect-konformer Server, der diese Transaktion
unterstützt, gibt in seinem velo..connect-Profil mit der Eigenschaft
OrderInOnlineShop.TransactionID eine feste TransactionID bekannt, die
diese spezielle Transaktion von den Transaktionen vom Typ Order
unterscheidet.
Sinn dieser Transaktion ist es, dem Käufer die Möglichkeit zu geben,
einen Warenkorb in einem vorhandenen Online-Shop-System mit einer
Bestellung in seinem Warenwirtschaftssystem abzugleichen. Insbesondere
folgende Szenarien sollten möglich sein:
- Der Käufer füllt den Warenkorb im Onlineshop, da
dieser zum Beispiel eine exzellente Suchmöglichkeit bietet, die
sehr genau auf das angebotenen Sortiment abgestimmt ist. Bevor der
Warenkorb bestellt wird, soll aus den Daten eine Bestellung im
eigenen Warenwirtschaftssystem generiert werden.
- Der Käufer hat eine Bestellung in seinem
Warenwirtschaftssystem generiert und möchte noch einige Artikel
hinzufügen, für die die Bestellnummern noch nicht bekannt sind. Zur
Ermittlung der Bestellnummern soll der Onlineshop des Verkäufers
verwendet werden, um die dort vorhandenen Suchmöglichkeiten
auszunützen.
Um hierfür auf Serverseite die Voraussetzungen zu schaffen, muss ein
velo..connect-konformer Server, der die Transaktion OrderInOnlineShop
implementiert, folgende Regeln einhalten:
Regel: OrderInOnlineShop (Server).
- Es existiert stets eine Transaktionsinstanz mit der
fixierten TransactionID.
- Bevor ein Request gemäß den Regeln für die
Transaktion Order abgearbeitet wird, wird der Transaktionskontext
mit dem Warenkorb des Käufers im Onlineshop abgeglichen. Dieser
Abgleich ist so zu implementieren, dass der Warenkorb nicht
verändert wird und ein Abschluß der Bestellung im Shopsystem die
gleiche Bestellung auslösen würde, wie ein Abschluß der
Bestellung über die velo..connect-Schnittstelle. Abhängig davon, ob der
Warenkorb leer ist oder nicht, befindet sich danach die
Transaktionsinstanz im Startzustand oder im
Updatezustand.
- Nachdem der Transaktionskontext gemäß der
Verarbeitung der Anfrage des Clients modifiziert wurde, ist der
Warenkorb des Shopsystems mit dem Transaktionskontext
abzugleichen. Dieser Abgleich ist so zu implementieren, dass der
Transaktionskontext nicht verändert wird und ein Abschluß der
Bestellung im Shopsystem die gleiche Bestellung auslösen würde,
wie ein Abschluß der Bestellung über die velo..connect-Schnittstelle. Ist
der Request ein FinishOrderRequest, so bedeutet dieser Abgleich
insbesondere, dass der Warenkorb zu löschen ist. (Die Bestellung
ist ja bereits erfolgt)
Welche der Transaktionen Order oder OrderInOnlineShop ein Server
implementiert, bleibt der Entscheidung des Verkäufers überlassen.
Abhängig von den Voraussetzungen kann es durchaus einfacher sein, die
velo..connect-Schnittstelle auf einem vorhandenen Online-Shop aufzusetzen. Für den
Implementeur eines velo..connect-Clients bedeutet das, dass er mit den
Besonderheiten der Transaktion OrderInOnlineShop zurecht kommen muss. Im
einzelnen ist zu beachten:
- Auch in der Operation CreateOrder muss eine
TransactionID verwendet werden, und zwar die im velo..connect-profil
angegebene. Falls der Server die Transaktion Order nicht
unterstützt, führt ein CreateOrderRequest ohne TransactionID zum
Fehlercode 404.
- Falls aus irgendwelchen Gründen der Warenkorb des
Online-Shops nicht leer ist, schlägt die Operation CreateOrder mit
dem Fehlercode 430 fehl. Analog schlägt die Operation UpdateOrder
bei leerem Warenkorb mit Fehlercode 430 fehl. Es sollte also
mittels der Operation GetStatus oder ViewOrder der Zustand des
Warenkorbs ermittelt werden.
- Die Operation Rollback löscht auch den Warenkorb des
Online-Shops
- Sofern dem Benutzer, die in den obigen Szenarien
ausgeführte Integration des Warenwirtschaftssystems mit dem
Warenkorb des Onlineshops angeboten wird, ist zu beachten: Die
Implementierung des Warenkorbs im Internetbrowser des Benutzers ist
im allgemeinen nicht darauf ausgelegt, dass der Warenkorb auch noch
von anderen Stellen geändert werden kann. Der Benutzer sollte daher
nicht zur gleichen Zeit im Online-Shop eingeloggt sein, wenn er den
Warenkorb mit der Bestellung im Warenwirtschaftssystem
abgleicht.