Add-On: Coupa-Anbindung

Add-On: Coupa-Anbindung

Mit dem Modul "Coupa" kann jeder Shop der PRINT LOUNGE direkt an eine externe Coupa-Instanz angebunden und somit der Bestell- und Freigabevorgang direkt in bestehende Prozesse integriert werden.

Damit eine Anmeldung aus einer Coupa-Instanz heraus möglich ist, muss innerhalb der PRINT LOUNGE auch das Modul "SSO" aktiviert und konfiguriert werden. Hierüber werden die übergebenen Benutzer sicher in dem jeweiligen Shop-System angemeldet. So kann der Zugriff auf unterschiedliche Produkte und Warengruppen direkt über die Administration konfiguriert werden.

Konfiguration des Moduls

Für die Konfiguration der Coupa-Anbindung muss zunächst ein Shared Secret in der Coupa-Instanz angelegt werden. Anschließend stehen die folgenden Einstellungen in der Modulkonfiguration der PRINT LOUNGE zur Verfügung:

Einstellung

Beschreibung

Einstellung

Beschreibung

Hostname des COUPA-Systems

Hier muss die externe URL der Coupa-Instanz hinterlegt werden, um bspw. einen Rücksprung in das externe System nach Bestellabschluss zu ermöglichen.

Shared Secret

Der in der Coupa-Instanz erzeugte Shared Secret muss hier hinterlegt werden, um den Zugriff sicher zu authentifizieren.

Hinweis: Diese Einstellung wird in der Datenbank verschlüsselt abgespeichert und wird bei der Verwendung wieder entschlüsselt.

PunchOutOrderMessage-Template

Das PunchOutOrderMessage-Template (POOM) wird nach Bestellabschluss an die Coupa-Instanz übermittelt und sollte alle Informationen zu dem Warenkorb enthalten. 

Dieses Template kann mithilfe von Smarty dynamisch konfiguriert werden, wobei verschiedene Variablen mit Informationen zu der Bestellung zur Verfügung stehen.

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.014/cXML.dtd"> <cXML payloadID="{$punchOutSetupRequest->payloadId}" xml:lang="{$punchOutSetupRequest->language}" timestamp="{$punchOutSetupRequest->timestamp->format('c')}" version="1.2.0.14"> <Header> <From> <Credential domain="{$punchOutSetupRequest->fromCredential->domain}"> <Identity>{$punchOutSetupRequest->fromCredential->identity}</Identity> </Credential> </From> <To> <Credential domain="{$punchOutSetupRequest->toCredential->domain}"> <Identity>{$punchOutSetupRequest->toCredential->identity}</Identity> </Credential> </To> <Sender> <Credential domain="{$punchOutSetupRequest->senderCredential->domain}"> <Identity>{$punchOutSetupRequest->senderCredential->identity}</Identity> </Credential> <UserAgent/> </Sender> </Header> <Message deploymentMode="production"> <PunchOutOrderMessage> <BuyerCookie>{$punchOutSetupRequest->requestBody->buyerCookie}</BuyerCookie> <PunchOutOrderMessageHeader operationAllowed="edit" quoteStatus="final"> <Total> <Money currency="{$order->total->getCurrency()}">{($order->totalWithVat)|number_format:2:'.':''}</Money> </Total> <Shipping> <Money currency="{$order->shipping->shippingCost->getCurrency()}">{($order->shipping->shippingCost->getAmount()/100)|number_format:4:'.':''}</Money> </Shipping> <Tax> <Money currency="{$order->total->getCurrency()}">{($order->vat)|number_format:2:'.':''}</Money> </Tax> </PunchOutOrderMessageHeader> {foreach from=$orderItems item=orderItem} <ItemIn quantity="{$orderItem->quantityValue}"> <ItemID> <SupplierPartID>{$orderItem->id}</SupplierPartID> <SupplierPartAuxiliaryID>{$order->id}</SupplierPartAuxiliaryID> </ItemID> <ItemDetail> <UnitPrice> <Money currency="{$orderItem->total->getCurrency()}">{($orderItem->total->getAmount()/100)|number_format:4:'.':''}</Money> </UnitPrice> <Description xml:lang="{$punchOutSetupRequest->language}">{$orderItem->name}</Description> </ItemDetail> </ItemIn> {/foreach} </PunchOutOrderMessage> </Message> </cXML>

Endpunkte der Schnittstelle

Bezeichnung

Endpunkt / URL

Bezeichnung

Endpunkt / URL

Login-Sprung in die PRINT LOUNGE
Hierzu wird ein PunchOutRequest-Dokument an diesen Endpunkt gesendet.

/coupa/processDocument

Einlieferung einer Bestellung
Für die Einlieferung & Bestätigung einer Bestellung wird ein OrderRequest-Dokument an diesen Endpunkt gesendet.

/coupa/processOrder

Informationen zum Mapping

cXML-Feld (XML-Pfad)

OrderRequest Feld

OrderRequest Feld Typ

PRINT LOUNGE Order-Feld

Bemerkungen

cXML-Feld (XML-Pfad)

OrderRequest Feld

OrderRequest Feld Typ

PRINT LOUNGE Order-Feld

Bemerkungen

Bestellkopf

 

 

 

 

/cXML/Request/OrderRequest/OrderRequestHeader@orderID

requestBody->orderRequestHeader->orderId

string

order->externalOrderCode

Externe Bestellnummer

/cXML/Request/OrderRequest/OrderRequestHeader@orderDate

requestBody->orderRequestHeader->orderDate

DateTime

 

 

/cXML/Request/OrderRequest/OrderRequestHeader@type

requestBody->orderRequestHeader->type

string

 

 

/cXML/Request/OrderRequest/OrderRequestHeader/Total/Money

requestBody->orderRequestHeader->total->value

float

 

Gesamtpreis

/cXML/Request/OrderRequest/OrderRequestHeader/Total/Money@currency

requestBody->orderRequestHeader->total->currency

string

 

 

 

 

 

 

 

Lieferadresse (ShipTo)

 

 

 

 

/cXML/Request/OrderRequest/OrderRequestHeader/ShipTo/Address/Name

requestBody->orderRequestHeader->shipTo->name

string

order->deliverAddress->company1

Firmenname

/cXML/Request/OrderRequest/OrderRequestHeader/ShipTo/Address/PostalAddress/DeliverTo

requestBody->orderRequestHeader->shipTo->postalAddressDeliverTo

string

order->deliverAddress->company2

Zusatzname oder Ansprechpartner

/cXML/Request/OrderRequest/OrderRequestHeader/ShipTo/Address/PostalAddress/Street

requestBody->orderRequestHeader->shipTo->postalAddressStreet

string

order->deliverAddress->street

Straße

/cXML/Request/OrderRequest/OrderRequestHeader/ShipTo/Address/PostalAddress/PostalCode

requestBody->orderRequestHeader->shipTo->postalAddressPostalCode

string

order->deliverAddress->zip

Postleitzahl

/cXML/Request/OrderRequest/OrderRequestHeader/ShipTo/Address/PostalAddress/City

requestBody->orderRequestHeader->shipTo->postalAddressCity

string

order->deliverAddress->town

Ort

/cXML/Request/OrderRequest/OrderRequestHeader/ShipTo/Address/PostalAddress/Country

requestBody->orderRequestHeader->shipTo->postalAddressCountry

string

order->deliverAddress->country

Land (Name)

/cXML/Request/OrderRequest/OrderRequestHeader/ShipTo/Address/PostalAddress/Country@isoCountryCode

requestBody->orderRequestHeader->shipTo->postalAddressCountryIsoCountryCode

string

order->deliverAddress->countryCode

ISO-Ländercode

/cXML/Request/OrderRequest/OrderRequestHeader/ShipTo/Address/Email

requestBody->orderRequestHeader->shipTo->emailAddress

string

order->deliverAddress->email

E-Mail-Adresse

 

 

 

 

 

Rechnungsadresse (BillTo)

 

 

 

 

/cXML/Request/OrderRequest/OrderRequestHeader/BillTo/Address/Name

requestBody->orderRequestHeader->billTo->name

string

order->invoiceAddress->company1

Firmenname

/cXML/Request/OrderRequest/OrderRequestHeader/BillTo/Address/PostalAddress/DeliverTo

requestBody->orderRequestHeader->billTo->postalAddressDeliverTo

string

order->invoiceAddress->company2

Zusatzname

/cXML/Request/OrderRequest/OrderRequestHeader/BillTo/Address/PostalAddress/Street

requestBody->orderRequestHeader->billTo->postalAddressStreet

string

order->invoiceAddress->street

Straße

/cXML/Request/OrderRequest/OrderRequestHeader/BillTo/Address/PostalAddress/PostalCode

requestBody->orderRequestHeader->billTo->postalAddressPostalCode

string

order->invoiceAddress->zip

Postleitzahl

/cXML/Request/OrderRequest/OrderRequestHeader/BillTo/Address/PostalAddress/City

requestBody->orderRequestHeader->billTo->postalAddressCity

string

order->invoiceAddress->town

Ort

/cXML/Request/OrderRequest/OrderRequestHeader/BillTo/Address/PostalAddress/Country

requestBody->orderRequestHeader->billTo->postalAddressCountry

string

order->invoiceAddress->country

Land (Name)

/cXML/Request/OrderRequest/OrderRequestHeader/BillTo/Address/PostalAddress/Country@isoCountryCode

requestBody->orderRequestHeader->billTo->postalAddressCountryIsoCountryCode

string

order->invoiceAddress->countryCode

ISO-Ländercode

/cXML/Request/OrderRequest/OrderRequestHeader/BillTo/Address/Email

requestBody->orderRequestHeader->billTo->emailAddress

string

order->invoiceAddress->email

E-Mail-Adresse

 

 

 

 

 

Versandkosten und -beschreibung

 

 

 

 

/cXML/Request/OrderRequest/OrderRequestHeader/Shipping/Money

requestBody->orderRequestHeader->shippingTotal->value

float

 

 

/cXML/Request/OrderRequest/OrderRequestHeader/Shipping/Money@currency

requestBody->orderRequestHeader->shippingTotal->currency

string

 

 

/cXML/Request/OrderRequest/OrderRequestHeader/Shipping/Description

requestBody->orderRequestHeader->shippingDescription

string

 

 

 

 

 

 

 

Ansprechpartner (Contact)

 

 

 

 

/cXML/Request/OrderRequest/OrderRequestHeader/Contact@role

requestBody->orderRequestHeader->contact->role

string

 

 

/cXML/Request/OrderRequest/OrderRequestHeader/Contact/Name

requestBody->orderRequestHeader->contact->name

string

 

 

/cXML/Request/OrderRequest/OrderRequestHeader/Contact/Name@xml:lang

requestBody->orderRequestHeader->contact->nameLang

string

 

 

/cXML/Request/OrderRequest/OrderRequestHeader/Contact/Email

requestBody->orderRequestHeader->contact->email

string

 

 

 

 

 

 

 

Bestellpositionen (ItemOut)

 

 

 

 

/cXML/Request/OrderRequest/ItemOut@quantity

requestBody->itemOut[].quantity

int

 

 

/cXML/Request/OrderRequest/ItemOut@lineNumber

requestBody->itemOut[].lineNumber

string

 

 

/cXML/Request/OrderRequest/ItemOut@requestedDeliveryDate

requestBody->itemOut[].requestedDeliveryDate

DateTime

 

 

/cXML/Request/OrderRequest/ItemOut/ItemID/SupplierPartID

requestBody->itemOut[].supplierPartId

string

Zur Order-Suche: getOrderFromClientById() (wichtig!)

Kernfeld für Zuordnung

/cXML/Request/OrderRequest/ItemOut/ItemID/SupplierPartAuxiliaryID

requestBody->itemOut[].supplierPartAuxiliaryId

string

Zur Order-Suche: getOrderFromClientById() (Priorität)

Kernfeld für Zuordnung

/cXML/Request/OrderRequest/ItemOut/ItemDetail/UnitPrice/Money

requestBody->itemOut[].unitPrice->value

float

 

 

/cXML/Request/OrderRequest/ItemOut/ItemDetail/UnitPrice/Money@currency

requestBody->itemOut[].unitPrice->currency

string

 

 

/cXML/Request/OrderRequest/ItemOut/ItemDetail/Description

requestBody->itemOut[].description

string

 

 

/cXML/Request/OrderRequest/ItemOut/ItemDetail/UnitOfMeasure

requestBody->itemOut[].unitOfMeasure

string

 

 

 

 

 

 

 

Order-Zuordnung & Update

 

 

 

 

itemOut[0].supplierPartAuxiliaryId oder supplierPartId

-

 

 

 

orderRequestHeader->shipTo

-

 

order->deliverAddress → diverse Felder (siehe oben)

Adressdaten aktualisieren

orderRequestHeader->billTo

-

 

order->invoiceAddress → diverse Felder (siehe oben)

Adressdaten aktualisieren

orderRequestHeader->orderId

-

 

order->externalOrderCode

Externe Bestellnummer setzen