pixiInvoiceSetTrackingID
Setzt oder ergänzt Sendungsverfolgungsnummern (Tracking-IDs) einer Rechnung und ihrer Pakete, optional mit Überschreiben und Zurücksetzen des Kundenbenachrichtigungs-Flags.
Ordnet einer Rechnung (Invoices.ShipmentTrackingID) und ihren Paketen (pixi.InvoicePackage) eine oder mehrere Tracking-IDs zu.
- Rechnungssuche:
InvoiceNRwird mitInvoices.InvoiceNrabgeglichen. Enthält die Nummer-, werden die Suffixe nach dem letzten-schrittweise entfernt und auch alle gekürzten Varianten geprüft (z. B.RE1000-2-1→RE1000-2→RE1000). Verwendet werden nur tatsächlich vorhandene Rechnungsnummern. - Trennzeichen: Ist
Separatorweder;noch leer, wird jedes Vorkommen inTrackingIDdurch;ersetzt. Intern dient immer;als Trennzeichen. - Wird keine Rechnung gefunden, wird die Zeile
InvoiceNR is not existinggeliefert und nichts geändert. - Wird die Rechnung gefunden, wird zuerst die Zeile
InvoiceNR found and Updatedgeliefert. Danach:Overwrite= 1:Invoices.ShipmentTrackingIDwird geleert. Alle Pakete der Rechnung ohne Paketpositionen werden vonInvoicePollinggelöst (InvoicePackageId= NULL). Pakete ohne Paketpositionen werden gelöscht, mit Ausnahme des Pakets mit der kleinsten Id.- Die interne Prozedur
Pixi_SetTrackingIdwird ausgeführt. Sie zerlegt die Tracking-IDs, ignoriert bereits an der Rechnung gespeicherte IDs und verteilt die neuen IDs auf Pakete:- Hat kein Paket Paketpositionen aus einer Packstation, erhält ein einzelnes vorhandenes Paket mit leerer Tracking-ID die erste neue ID. Alle weiteren neuen IDs werden als neue Pakete angelegt; existiert kein solches Paket, gilt das für alle neuen IDs.
ShipmentTrackingIDder Rechnung wird anschließend aus allen eindeutigen Paket-Tracking-IDs neu gebildet, sortiert und mit;getrennt. - Gibt es Pakete mit Paketpositionen und genau ein Paket, erhält dieses Paket die letzte neue ID. Bei mehreren Paketen bleiben die Pakete unverändert.
ShipmentTrackingIDwird zur Vereinigung aus vorhandenen und neuen IDs. Invoices.Packageswird auf die Anzahl der Pakete gesetzt,UpdateDateundUpdateEmp(TrackingID Import) werden aktualisiert. Ein EreignisInvoiceChangedwird veröffentlicht.
- Hat kein Paket Paketpositionen aus einer Packstation, erhält ein einzelnes vorhandenes Paket mit leerer Tracking-ID die erste neue ID. Alle weiteren neuen IDs werden als neue Pakete angelegt; existiert kein solches Paket, gilt das für alle neuen IDs.
ResetClientNotifiedFlag= 1: Für alle Auftragspositionen der Rechnung erhält der jeweils jüngsteOrderHistory-Eintrag mit StatusAUSden WertClientNotified = 'N'. Der Versand wird damit samt Tracking-ID erneut an Kunde bzw. Shop gemeldet.
Hinweise
- Die Prozedur läuft in einer eigenen Transaktion bzw. in einem Savepoint, wenn bereits eine Transaktion offen ist.
- Fehler werden verschluckt: Sie werden abgefangen, die Transaktion wird zurückgerollt und der Fehler über
log.InsertErrorprotokolliert. An den Aufrufer wird kein Fehler gemeldet. Da die MeldungInvoiceNR found and Updatedvor den Änderungen selektiert wird, kann sie auch dann geliefert werden, wenn alle Änderungen zurückgerollt wurden. - Auflösung der Rechnungsnummer: Passen mehrere Varianten (z. B.
RE1000-1undRE1000), wird durch die sortierte Variablenzuweisung typischerweise die kürzeste passende Nummer verwendet. Zur Vermeidung von Mehrdeutigkeiten sollte die exakte Rechnungsnummer übergeben werden. Overwritesetzt die Tracking-ID des verbleibenden Pakets (kleinste Id) nicht zurück. Hat dieses Paket bereits eine Tracking-ID, werden die neuen IDs als zusätzliche Pakete angelegt. Die alte ID erscheint erneut inShipmentTrackingID, da dieses Feld aus allen Paketen neu gebildet wird.OverwritelöstInvoicePolling-Zeilen auch vom verbleibenden Paket, sofern dieses keine Paketpositionen hat.- Pakete mit Paketpositionen werden nie gelöscht. Gibt es mehrere solcher Pakete, werden die Paket-Tracking-IDs gar nicht geändert; nur das Feld an der Rechnung wird ergänzt. Die interne Prozedur weist selbst darauf hin, dass Tracking-IDs besser pro Paket gesetzt werden sollten.
- Tracking-IDs werden jeweils auf 512 Zeichen gekürzt. Die Zerlegung erfolgt über
dbo.fPixi_GetCommaSplit, die Benutzerermittlung überinf.UserGetByNameund die Ereignisveröffentlichung überdbo.Pixi_MQ_EventPublish. Deren Definitionen liegen nicht vor. - Lesezugriffe verwenden
NOLOCK, UpdatesROWLOCK.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
InvoiceNR
Pflicht
|
varchar(20) string |
– |
Rechnungsnummer. Durch Beispiel: |
TrackingID
Pflicht
|
varchar(8000) string |
– |
Eine oder mehrere Tracking-IDs, getrennt durch Beispiel: |
Overwrite
|
bit boolean |
0 |
Bei 1 wird das Tracking-Feld der Rechnung geleert, und Pakete ohne Paketpositionen (außer dem ersten) werden gelöscht, bevor die neuen IDs gesetzt werden. Erlaubte Werte
Beispiel: |
ResetClientNotifiedFlag
|
bit boolean |
0 |
Bei 1 wird der jüngste Erlaubte Werte
Beispiel: |
Separator
|
varchar(1) string |
; |
Trennzeichen in Beispiel: |
Antwort
Result-Set 1 · Immer, eine Zeile (sofern vor der Suche kein Fehler auftritt)
Statusmeldung, ob die Rechnung gefunden wurde.
| Spalte | Typ | Beschreibung |
|---|---|---|
ReturnMessage
|
varchar(27) string |
|
Beispielantwort
<SqlRowSet1>
<row>
<ReturnMessage>InvoiceNR found and Updated</ReturnMessage>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| ReturnMessage | InvoiceNR is not existing | Weder die angegebene Rechnungsnummer noch eine ihrer Varianten ohne `-`-Suffix existiert in `Invoices`. Rechnungsnummer prüfen. |
Beispiele
POST https://apigateway.descartes.com/tms/pixi/
Content-Type: text/xml; charset=utf-8
Authorization: Basic BASE64(USERNAME:PASSWORD)
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://apigateway.descartes.com/tms/pixi/">
<SOAP-ENV:Body>
<ns1:pixiInvoiceSetTrackingID>
<InvoiceNR>RE1004711</InvoiceNR>
<TrackingID>00340434161094042557;00340434161094042564</TrackingID>
<!-- <Overwrite>0</Overwrite> -->
<!-- <ResetClientNotifiedFlag>1</ResetClientNotifiedFlag> -->
<!-- <Separator>,</Separator> -->
</ns1:pixiInvoiceSetTrackingID>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
curl -X POST 'https://apigateway.descartes.com/tms/pixi/' \
--user 'USERNAME:PASSWORD' \
--header 'Content-Type: text/xml; charset=utf-8' \
--data-binary @- <<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://apigateway.descartes.com/tms/pixi/">
<SOAP-ENV:Body>
<ns1:pixiInvoiceSetTrackingID>
<InvoiceNR>RE1004711</InvoiceNR>
<TrackingID>00340434161094042557;00340434161094042564</TrackingID>
<!-- <Overwrite>0</Overwrite> -->
<!-- <ResetClientNotifiedFlag>1</ResetClientNotifiedFlag> -->
<!-- <Separator>,</Separator> -->
</ns1:pixiInvoiceSetTrackingID>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XML
<?php
$soapClient = new SoapClient(null, [
'login' => 'USERNAME',
'password' => 'PASSWORD',
'location' => 'https://apigateway.descartes.com/tms/pixi/',
'uri' => 'https://apigateway.descartes.com/tms/pixi/',
]);
$arguments = [
'InvoiceNR' => 'RE1004711',
'TrackingID' => '00340434161094042557;00340434161094042564',
// 'Overwrite' => '0',
// 'ResetClientNotifiedFlag' => '1',
// 'Separator' => ',',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiInvoiceSetTrackingID', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiInvoiceSetTrackingID