pixiMergeCustomers
Führt einen doppelten Kunden mit einem anderen Kunden zusammen, indem alle zugehörigen Datensätze auf den Zielkunden umgehängt und der Quellkunde gelöscht wird.
Hängt alle Daten des Kunden CustRefFrom auf den Kunden CustRefTo um und löscht anschließend CustRefFrom.
Prüfungen. Die Prüfungen laufen in dieser Reihenfolge. Die erste fehlgeschlagene Prüfung beendet den Aufruf mit ReturnCode = ERROR:
CustRefToundCustRefFrommüssen verschieden sein.- Das Paar muss in
Addresses_Duplicateseingetragen sein. Beide Richtungen zählen (CustRef1/CustRef2). - Beide Kunden müssen in
Customersexistieren. - Keiner der Kunden darf einen Auftrag mit einem
OrderHeaderAttributevom Typ3haben (archivierte Aufträge). - Die Basiswährungen (
Shops.BaseCurrencyId) der Shops beider Kunden (Customers.CustomerOf) müssen gleich sein.
Zusammenführung. In einer Transaktion wird die Kundenreferenz in diesen Tabellen von CustRefFrom auf CustRefTo geändert:
- Aufträge und Auftragspositionen:
OrderHeader,Orderlines,BundleOrderlines,OrderHistory - Rechnungen und Mahnungen:
Invoices,Invlines,InvoicesDeleted,InvlinesDeleted,Reminders - Schnittstellentabellen:
C_Int_OrderHeader,C_Int_Orderlines,C_Int_Addresses - Adressen und Historie:
Addresses,AddressesHist,CustomersHist - Kundenkonto:
CustomerAccount,CustomerAccountLog,CustomerAccountManualBookings,CustomerAccountManualBookingsLog - Zahlungen und Lastschriften:
CCPTranLog,DTAUS,DTAUSLog - Sonstiges:
Voucher,eMaillogs,AM_Mail,AM_MailHist,Boxes,pixi.Offer,lastsdetail
In Addresses und C_Int_Addresses wird zusätzlich CustomerNrExternal auf die externe Kundennummer des Zielkunden gesetzt.
Danach werden die Dubletteneinträge von CustRefFrom aus Addresses_Duplicates entfernt und der Quellkunde aus Customers gelöscht.
Abschluss. Dieser Schritt läuft immer, auch nach einer fehlgeschlagenen Prüfung oder einem Fehler. Zeilen mit CustRefFrom werden aus Addresses_Duplicates und tmp.Addresses_Simple gelöscht, und ein Ereignis wird protokolliert. Es wird eine Statuszeile mit ReturnCode und ErrorMessage zurückgegeben.
Hinweise
- Stolperfalle: Die abschließende Bereinigung läuft immer. Alle Einträge von
CustRefFrominAddresses_Duplicatesundtmp.Addresses_Simplewerden auch bei fehlgeschlagener Prüfung gelöscht. Sind beide Parameter gleich, werden damit die Dubletteneinträge dieses Kunden entfernt. - Ist eine äußere Transaktion offen, wird ein Savepoint gesetzt und nicht committet. Andernfalls wird eine eigene Transaktion geöffnet und committet. Bei einem Fehler wird zurückgerollt, der Fehler über
log.EventInsertundlog.InsertErrorprotokolliert undUnexpected error: "…"geliefert, wobei der Fehlertext auf 80 Zeichen gekürzt ist. - Die abschließende Bereinigung und Protokollierung laufen nach dem Commit der Zusammenführung, bzw. innerhalb der Transaktion des Aufrufers, falls eine offen ist.
XACT_ABORTist aktiv.- Während der Zusammenführung wird
CONTEXT_INFOauf verschiedene Werte gesetzt, um Trigger aufOrderHeader,Addresses,CCPTranLog,Invoices,Invlines,OrderlinesundCustomerAccountzu umgehen. Die Trigger sind nicht beigefügt, daher ist die übersprungene Logik unbekannt. - Nach der Zusammenführung versucht der Code, die Kundenkontosummen per Dummy-Update auf
CustomerAccountneu zu berechnen. Das Update filtert aufCustRefFrom, dessen Zeilen bereits umgehängt sind, und betrifft daher vermutlich keine Zeile. - Hat einer der beiden Kunden keinen passenden Shop, ist die Währung
NULLund die Währungsprüfung verhindert die Zusammenführung nicht. - Die Prüfungen lesen mit
NOLOCK. Die umzuhängenden Zeilen werden mitUPDLOCKgesammelt. - Die Tabellen, in die die Protokollierungsprozeduren
log.EventInsertundlog.InsertErrorschreiben, sind nicht erkennbar, da ihre Definitionen nicht beigefügt sind. - Der Aufruf ist nicht umkehrbar: Der Quellkunde wird gelöscht.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
CustRefTo
Pflicht
|
int | – |
Kundenschlüssel ( Beispiel: |
CustRefFrom
Pflicht
|
int | – |
Kundenschlüssel ( Beispiel: |
Antwort
Result-Set 1 · Immer, als letzte Anweisung
Eine Statuszeile mit dem Ergebnis der Zusammenführung.
| Spalte | Typ | Beschreibung |
|---|---|---|
ReturnCode
|
varchar(10) string |
|
ErrorMessage
|
varchar(100) string |
Erfolgs- oder Fehlermeldung. |
Beispielantwort
<SqlRowSet1>
<row>
<ReturnCode>OK</ReturnCode>
<ErrorMessage>Both customers successfully merged</ErrorMessage>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| ERROR | Same CustRef provided as CustRefTo and CustRefFrom parameter | Beide Parameter enthalten denselben Kundenschlüssel. Zwei verschiedene Kunden übergeben. |
| ERROR | Customers are not on the list for merging | Das Paar ist in keiner Richtung in `Addresses_Duplicates` eingetragen. Nur als Dubletten erkannte Kunden können zusammengeführt werden. |
| ERROR | At least one customer does not exist in pixi | Mindestens ein Kundenschlüssel ist nicht in `Customers` vorhanden. |
| ERROR | At least one customer has archived order(s) and cant be merged | Einer der Kunden hat einen Auftrag mit einem `OrderHeaderAttribute` vom Typ `3` (archiviert). |
| ERROR | Customers shop currency do not match | Die Shops der beiden Kunden haben unterschiedliche Basiswährungen. |
| ERROR | Unexpected error: "{error}" | Während der Zusammenführung ist ein SQL-Fehler aufgetreten. Die Transaktion wird zurückgerollt und der Fehler protokolliert. `{error}` enthält die ersten 80 Zeichen der SQL-Fehlermeldung. |
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:pixiMergeCustomers>
<CustRefTo>10452</CustRefTo>
<CustRefFrom>10987</CustRefFrom>
</ns1:pixiMergeCustomers>
</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:pixiMergeCustomers>
<CustRefTo>10452</CustRefTo>
<CustRefFrom>10987</CustRefFrom>
</ns1:pixiMergeCustomers>
</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 = [
'CustRefTo' => '10452',
'CustRefFrom' => '10987',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiMergeCustomers', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiMergeCustomers