pixiMergeOrders
Führt einen Quell-Auftrag mit einem Ziel-Auftrag zusammen, indem alle Auftragspositionen und Bundle-Positionen verschoben und Steuersätze sowie Versandkosten neu berechnet werden.
Überträgt den Inhalt des Auftrags SourceOrderNr in den Auftrag TargetOrderNr.
- Die Auftragsköpfe beider Aufträge werden gelesen (Auftragsart, Währung, Versandkosten).
- Bei unterschiedlicher Auftragsart oder Währung wird ein Fehler ausgelöst und abgebrochen. Das geschieht auch, wenn keiner der beiden Aufträge existiert.
pipiCanMergeOrderswird ausgeführt. Diese Prozedur prüft die folgenden Bedingungen und liefert eine eigene Ergebniszeile (CanMerge,Reason):- beide Aufträge existieren
- beide gehören zum selben Kunden
- alle Positionen haben Status
ANG - beide haben dieselbe Zahlungsart, die keine Kreditkarte
Ksein darf - keine Position liegt auf einer aktiven Pickliste
- beide haben dieselbe Währung und Auftragsart
- Ist die Zusammenführung erlaubt, laufen die folgenden Schritte in einer Transaktion:
- Die Versandkosten im Kopf des Ziel-Auftrags werden auf die höheren Versandkosten der beiden Aufträge gesetzt.
- Alle vorhandenen Positionen und Bundle-Positionen des Ziel-Auftrags erhalten diese Versandkosten sowie
UpdateEmpundUpdateDate. - Die Positionen des Quell-Auftrags werden in den Ziel-Auftrag verschoben. Sie übernehmen Rechnungs- und Lieferadresse,
Order_Id,OrderNrExternalundVoucherIDder Positionen des Ziel-Auftrags. - Ihr
TaxRatewird überfPixi_GetVATRateneu berechnet. Grundlage sind die Auftragsart des Quell-Auftrags sowie Land und Steuerpflicht der Ziel-Lieferadresse. - Bei Einstellung
CalculateBundleVAT=0erhalten Bundle-Komponenten den Steuersatz ihrer Bundle-Position. - Die Bundle-Positionen des Quell-Auftrags werden ebenso verschoben. Bei
CalculateBundleVAT=1ist ihr Steuersatz der nach Nettobetrag gewichtete Durchschnitt der Komponenten, sonst der Wert aus der Steuerfunktion. - Bankzuordnungen (
BankMatch) des Quell-Auftrags werden dem Ziel-Auftrag zugeordnet. - Der
Discountim Kopf des Quell-Auftrags wird auf 0 gesetzt.
- Zurückgegeben wird
ResultMessage:200 OKbei Erfolg- der Grundcode aus
pipiCanMergeOrders(401–407), wenn die Zusammenführung nicht erlaubt ist 500 Unexpected error, wenn die Transaktion fehlschlägt
UpdateEmp wird auf Employee mit dem Zusatz (API) gesetzt, ohne Mitarbeiterangabe auf API.
Hinweise
- Der Aufruf liefert zwei Ergebnismengen.
SqlRowSet1stammt auspipiCanMergeOrders(CanMerge,Reason).SqlRowSet2enthältResultMessage. - Der Kopf des Quell-Auftrags wird nicht gelöscht. Er bleibt ohne Positionen und mit
Discount= 0 bestehen. - Beim Aktualisieren der Versandkosten in
OrderHeaderwirdCONTEXT_INFO0x66666 gesetzt, um den Update-Trigger zu umgehen. - Die aus den Ziel-Positionen übernommenen Werte (Adressen,
Order_Id,OrderNrExternal,VoucherID) stammen aus einer beliebigen Position des Ziel-Auftrags. Hat der Ziel-Auftrag keine Positionen, werden diese Werte bei den verschobenen Positionen NULL. - Quell-Positionen, deren
ItemRefkeinen passenden Eintrag initemshat, werden nicht verschoben. - Auch Bundle-Positionen ohne Komponenten werden nicht verschoben.
- Bei
CalculateBundleVAT=1führt eine Nettosumme von 0 über die Komponenten eines Bundles zu einem Divisionsfehler. Die Transaktion wird dann zurückgerollt und500 Unexpected errorgeliefert. - Fehlerdetails werden dabei nicht zurückgegeben; jeder Fehler in der Transaktion liefert nur
500 Unexpected error. - Lesezugriffe erfolgen mit
NOLOCK. fPixi_GetDefaultCountryCode, das infPixi_GetVATRateverwendet wird, liegt nicht vor, daher ist die Ermittlung des Standardlandes hier nicht vollständig beschreibbar.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
TargetOrderNr
Pflicht
|
int | – |
Auftragsnummer des Ziel-Auftrags, der die Positionen aufnimmt. Beispiel: |
SourceOrderNr
Pflicht
|
int | – |
Auftragsnummer des Quell-Auftrags, dessen Positionen in den Ziel-Auftrag verschoben werden. Beispiel: |
Employee
|
varchar(50) string |
NULL |
Mitarbeitername, der mit dem Zusatz Beispiel: |
ResultMessage
OUTPUT
|
varchar(128) string |
NULL |
Ausgabe: Ergebniscode mit Text, z. B. |
Antwort
Result-Set 1 · Immer, wenn die Prüfungen von Auftragsart und Währung bestanden sind (geliefert von pipiCanMergeOrders).
Ergebnis der Vorprüfung der Zusammenführung.
| Spalte | Typ | Beschreibung |
|---|---|---|
CanMerge
|
int |
1, wenn die Aufträge zusammengeführt werden können, sonst 0.ICON |
Reason
|
varchar(128) string |
Grundcode mit Text, z. B. |
Result-Set 2 · Immer, wenn die Prüfungen von Auftragsart und Währung bestanden sind.
Endergebnis der Zusammenführung.
| Spalte | Typ | Beschreibung |
|---|---|---|
ResultMessage
Kann leer sein |
varchar(128) string |
|
Beispielantwort
<SqlRowSet1>
<row>
<CanMerge>1</CanMerge>
<Reason>200 OK</Reason>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| RAISERROR | Different order types can not be merged. | Die beiden Aufträge haben unterschiedliche Auftragsarten oder keiner der Aufträge existiert. Nur Aufträge derselben Auftragsart zusammenführen. |
| RAISERROR | Orders with different currency can not be merged. | Die beiden Aufträge haben unterschiedliche Währungen. Nur Aufträge derselben Währung zusammenführen. |
| 401 | 401 Both orders must exist | Eine der Auftragsnummern existiert nicht. |
| 402 | 402 Orders must belong to the same customer | Die Aufträge gehören zu unterschiedlichen Kunden (`CustRef`). |
| 403 | 403 All involved orderlines must have status ANG | Mindestens eine Position eines der Aufträge hat nicht den Status `ANG`. |
| 404 | 404 Payment types on both orders must match and not be a creditcard type | Die Zahlungsarten der Rechnungsadressen unterscheiden sich oder die Zahlungsart ist Kreditkarte `K`. |
| 405 | 405 None of the orderlines in either orders can be on picklists | Eine Position liegt auf einer nicht abgelaufenen Pickliste. Zuerst von der Pickliste entfernen. |
| 406 | 406 Orders must have same currency | Die Währungen unterscheiden sich. Dies wird normalerweise vorher durch die RAISERROR-Prüfung abgefangen. |
| 407 | 407 Orders must have same order type | Die Auftragsarten unterscheiden sich. Dies wird normalerweise vorher durch die RAISERROR-Prüfung abgefangen. |
| 500 | 500 Unexpected error | Während der Transaktion ist ein Fehler aufgetreten, z. B. eine Division durch null beim Bundle-Steuerdurchschnitt. Alle Änderungen werden zurückgerollt. |
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:pixiMergeOrders>
<TargetOrderNr>100245</TargetOrderNr>
<SourceOrderNr>100251</SourceOrderNr>
<!-- <Employee>jdoe</Employee> -->
<!-- <ResultMessage>?</ResultMessage> -->
</ns1:pixiMergeOrders>
</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:pixiMergeOrders>
<TargetOrderNr>100245</TargetOrderNr>
<SourceOrderNr>100251</SourceOrderNr>
<!-- <Employee>jdoe</Employee> -->
<!-- <ResultMessage>?</ResultMessage> -->
</ns1:pixiMergeOrders>
</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 = [
'TargetOrderNr' => '100245',
'SourceOrderNr' => '100251',
// 'Employee' => 'jdoe',
// 'ResultMessage' => '?',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiMergeOrders', $soapArguments);
Verwandte Calls
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiMergeOrders