Postman-Collection
Customers Schreiben

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:

  1. CustRefTo und CustRefFrom müssen verschieden sein.
  2. Das Paar muss in Addresses_Duplicates eingetragen sein. Beide Richtungen zählen (CustRef1/CustRef2).
  3. Beide Kunden müssen in Customers existieren.
  4. Keiner der Kunden darf einen Auftrag mit einem OrderHeaderAttribute vom Typ 3 haben (archivierte Aufträge).
  5. 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 CustRefFrom in Addresses_Duplicates und tmp.Addresses_Simple werden 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.EventInsert und log.InsertError protokolliert und Unexpected 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_ABORT ist aktiv.
  • Während der Zusammenführung wird CONTEXT_INFO auf verschiedene Werte gesetzt, um Trigger auf OrderHeader, Addresses, CCPTranLog, Invoices, Invlines, Orderlines und CustomerAccount zu 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 CustomerAccount neu zu berechnen. Das Update filtert auf CustRefFrom, dessen Zeilen bereits umgehängt sind, und betrifft daher vermutlich keine Zeile.
  • Hat einer der beiden Kunden keinen passenden Shop, ist die Währung NULL und die Währungsprüfung verhindert die Zusammenführung nicht.
  • Die Prüfungen lesen mit NOLOCK. Die umzuhängenden Zeilen werden mit UPDLOCK gesammelt.
  • Die Tabellen, in die die Protokollierungsprozeduren log.EventInsert und log.InsertError schreiben, 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 (Customers.CustKey) des Zielkunden, der bestehen bleibt und alle Daten erhält.

Beispiel: 10452

CustRefFrom
Pflicht
int –

Kundenschlüssel (Customers.CustKey) des Quellkunden, dessen Daten umgehängt werden und der anschließend gelöscht wird.

Beispiel: 10987

Antwort

Result-Set 1 · Immer, als letzte Anweisung

Eine Statuszeile mit dem Ergebnis der Zusammenführung.

Spalte Typ Beschreibung
ReturnCode varchar(10)
string

OK bei Erfolg, sonst ERROR.

ErrorMessage varchar(100)
string

Erfolgs- oder Fehlermeldung.

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>

Verwendete Tabellen

Addresses_Duplicates · Schreiben Customers · Schreiben Shops · Lesen OrderHeader · Schreiben OrderHeaderAttribute · Lesen Voucher · Schreiben CustomersHist · Schreiben AddressesHist · Schreiben Addresses · Schreiben CCPTranLog · Schreiben C_Int_Addresses · Schreiben C_Int_Orderlines · Schreiben C_Int_OrderHeader · Schreiben Invlines · Schreiben Invoices · Schreiben InvoicesDeleted · Schreiben InvlinesDeleted · Schreiben Reminders · Schreiben BundleOrderlines · Schreiben OrderHistory · Schreiben Orderlines · Schreiben eMaillogs · Schreiben CustomerAccountManualBookingsLog · Schreiben CustomerAccountLog · Schreiben CustomerAccount · Schreiben CustomerAccountManualBookings · Schreiben DTAUSLog · Schreiben DTAUS · Schreiben AM_MailHist · Schreiben AM_Mail · Schreiben Boxes · Schreiben Offer · Schreiben lastsdetail · Schreiben Addresses_Simple · Schreiben
SQL-Objekt:
dbo.pipiMergeCustomers
Prozedur zuletzt geändert am 2026-10-05
Dokumentation von claude-opus-5-5 am 2026-10-30 geschrieben