pixiImportAddXML
Legt ein Auftrags- oder Artikel-Import-XML im Pixi-XML-Log (`C_XMLLog`) mit Status `XIM` an und liefert den Schlüssel des neuen Log-Eintrags.
Übergibt ein Import-Dokument an den neuen Import-Mechanismus von Pixi, indem es in das XML-Log geschrieben wird.
- Ist
ParameterXMLnicht leer, ersetzt sein InhaltXML. Ein leererOperationTypeoder ein leeresXMLwird alsNULLbehandelt. OperationTypewird ohne Beachtung der Groß-/Kleinschreibung ausgewertet:orderergibt den OperationstypOrderImportitemergibt den OperationstypItemImport- jeder andere Wert, auch
NULL, wird abgelehnt. Der Schlüssel des Operationstyps wird ausC_OperationTypesgelesen.
ChannelRefwird inC_Channelsgesucht.- Danach wird in dieser Reihenfolge geprüft: Kanal ist
NULL, Operationstyp unbekannt, XML fehlt. Die erste fehlgeschlagene Prüfung liefert eine Zeile mitErrorNr= 500 undErrorMsg. - Sind alle Prüfungen erfolgreich, wird das XML in
C_XMLLoggeschrieben, mitSource=API,Status=XIM, BenutzerAPI, dem ermittelten Operationstyp und dem Kanal. Der Text wird bereinigt und in den Datentyp XML konvertiert. Schlägt die Konvertierung fehl, werden der Rohtext sowie Fehlernummer und Fehlermeldung der Konvertierung gespeichert. Der Aufruf meldet das nicht als Fehler. - Zurückgegeben wird der Schlüssel des neuen Log-Eintrags. Der Aufruf importiert den Auftrag oder Artikel nicht selbst. Das geschieht später in der Import-Verarbeitung, die nicht Teil dieses Aufrufs ist.
Hinweise
- Zwei Ergebnismengen bei Erfolg: Die interne Prozedur
Pixi_C_InsertXMLliefert den neuen Schlüssel bereits alsXMLLogKey(SqlRowSet1). Anschließend liefert der Aufruf denselben Wert noch einmal alsXMLKey(SqlRowSet2). Im Fehlerfall wird nur eine Zeile (ErrorNr/ErrorMsg) inSqlRowSet1geliefert. - Schwache Kanalprüfung: Existiert
ChannelRefnicht inC_Channels, behält die Variable den übergebenen Wert. Der FehlerChannel not definedtritt daher nur auf, wennChannelRefexplizitNULList. Ein nicht vorhandener Kanal, auch der Standardwert0, wird ohne Fehler gespeichert. - Wird
orderoderitemübergeben, fehlt aber der passende Eintrag (OrderImport/ItemImport) inC_OperationTypes, bleibt der OperationstypNULL. Der Eintrag wird dann ohne Operationstyp gespeichert statt abgelehnt. - Ungültiges XML wird nicht abgelehnt. Eine fehlgeschlagene XML-Konvertierung wird nur in den Log-Spalten
XmlResponseCastErrorNr/XmlResponseCastErrorMessagefestgehalten. Das XML sollte vor dem Senden geprüft werden. - Das XML wird durch
fPixi_CleanupXmlTextbereinigt. Die Definition dieser Funktion liegt nicht vor. - Es wird keine explizite Transaktion verwendet. Die Abfragen auf
C_OperationTypesundC_ChannelsnutzenNOLOCK. - Das XML-Dokument muss im SOAP-Element maskiert (oder als CDATA) übergeben werden, da der Parameter ein
varchar(max)-String ist.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
ChannelRef
|
int | 0 |
Schlüssel des Kanals ( Beispiel: |
OperationType
|
varchar(20) string |
NULL |
Art des Imports, ohne Beachtung der Groß-/Kleinschreibung. Jeder Wert außer Erlaubte Werte
Beispiel: |
XML
|
varchar(max) xml |
NULL |
Das Import-Dokument als Text, z. B. ein Auftrag oder ein BMEcat-Artikeldokument. Es wird ignoriert, wenn Beispiel:
|
ParameterXML
|
varchar(max) xml |
NULL |
Alternative zu Beispiel:
|
Antwort
Result-Set 1 · Bei Erfolg (erste Ergebnismenge, geliefert von der internen Prozedur Pixi_C_InsertXML)
Schlüssel des neuen Eintrags in C_XMLLog.
| Spalte | Typ | Beschreibung |
|---|---|---|
XMLLogKey
Kann leer sein |
int |
Identity-Wert des neuen XML-Log-Eintrags. |
Result-Set 2 · Bei Erfolg (zweite Ergebnismenge)
Derselbe Schlüssel noch einmal, geliefert vom Aufruf selbst.
| Spalte | Typ | Beschreibung |
|---|---|---|
XMLKey
Kann leer sein |
int |
Schlüssel des neuen XML-Log-Eintrags (Rückgabewert von |
Result-Set 3 · Anstelle der Erfolgs-Ergebnismengen, wenn eine Prüfung fehlschlägt oder beim Speichern ein Fehler auftritt
Einzelne Fehlerzeile.
| Spalte | Typ | Beschreibung |
|---|---|---|
ErrorNr
Kann leer sein |
int |
500 bei Prüfungsfehlern, sonst die SQL-Fehlernummer. |
ErrorMsg
Kann leer sein |
nvarchar(4000) string |
Fehlertext. |
Beispielantwort
<SqlRowSet1>
<row>
<XMLLogKey>58231</XMLLogKey>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| 500 | Channel not defined | `ChannelRef` wurde als `NULL` übergeben. Einen gültigen Kanalschlüssel übergeben. |
| 500 | Operation type not found. Please use either ITEM or ORDER | `OperationType` fehlt, ist leer oder weder `ITEM` noch `ORDER`. |
| 500 | XML was not set | Sowohl `XML` als auch `ParameterXML` sind leer oder fehlen. |
| {ERROR_NUMBER} | {ERROR_MESSAGE} | Beim Schreiben des XML-Log-Eintrags ist ein unerwarteter SQL-Fehler aufgetreten. Eine fehlgeschlagene XML-Konvertierung löst diesen Fehler nicht aus. |
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:pixiImportAddXML>
<!-- <ChannelRef>1</ChannelRef> -->
<!-- <OperationType>ORDER</OperationType> -->
<!-- <XML><![CDATA[<?xml version="1.0" encoding="UTF-8"?><ORDER version="1.0" type="standard"><ORDER_HEADER><ORDER_INFO><ORDER_ID>100045</ORDER_ID><ORDER_DATE>2024-03-15T10:22:00</ORDER_DATE></ORDER_INFO></ORDER_HEADER><ORDER_ITEM_LIST><ORDER_ITEM><LINE_ITEM_ID>1</LINE_ITEM_ID><ARTICLE_ID><SUPPLIER_AID>4711</SUPPLIER_AID></ARTICLE_ID><QUANTITY>2</QUANTITY></ORDER_ITEM></ORDER_ITEM_LIST></ORDER>]]></XML> -->
<!-- <ParameterXML><![CDATA[<?xml version="1.0" encoding="UTF-8"?><BMECAT version="2005"><HEADER><CATALOG><LANGUAGE>deu</LANGUAGE><CATALOG_ID>SHOP1</CATALOG_ID><CATALOG_VERSION>1.0</CATALOG_VERSION></CATALOG></HEADER><T_NEW_CATALOG><PRODUCT><SUPPLIER_PID>4711</SUPPLIER_PID><PRODUCT_DETAILS><DESCRIPTION_SHORT>Beispielartikel</DESCRIPTION_SHORT></PRODUCT_DETAILS></PRODUCT></T_NEW_CATALOG></BMECAT>]]></ParameterXML> -->
</ns1:pixiImportAddXML>
</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:pixiImportAddXML>
<!-- <ChannelRef>1</ChannelRef> -->
<!-- <OperationType>ORDER</OperationType> -->
<!-- <XML><![CDATA[<?xml version="1.0" encoding="UTF-8"?><ORDER version="1.0" type="standard"><ORDER_HEADER><ORDER_INFO><ORDER_ID>100045</ORDER_ID><ORDER_DATE>2024-03-15T10:22:00</ORDER_DATE></ORDER_INFO></ORDER_HEADER><ORDER_ITEM_LIST><ORDER_ITEM><LINE_ITEM_ID>1</LINE_ITEM_ID><ARTICLE_ID><SUPPLIER_AID>4711</SUPPLIER_AID></ARTICLE_ID><QUANTITY>2</QUANTITY></ORDER_ITEM></ORDER_ITEM_LIST></ORDER>]]></XML> -->
<!-- <ParameterXML><![CDATA[<?xml version="1.0" encoding="UTF-8"?><BMECAT version="2005"><HEADER><CATALOG><LANGUAGE>deu</LANGUAGE><CATALOG_ID>SHOP1</CATALOG_ID><CATALOG_VERSION>1.0</CATALOG_VERSION></CATALOG></HEADER><T_NEW_CATALOG><PRODUCT><SUPPLIER_PID>4711</SUPPLIER_PID><PRODUCT_DETAILS><DESCRIPTION_SHORT>Beispielartikel</DESCRIPTION_SHORT></PRODUCT_DETAILS></PRODUCT></T_NEW_CATALOG></BMECAT>]]></ParameterXML> -->
</ns1:pixiImportAddXML>
</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 = [
// 'ChannelRef' => '1',
// 'OperationType' => 'ORDER',
// 'XML' => '<?xml version="1.0" encoding="UTF-8"?><ORDER version="1.0" type="standard"><ORDER_HEADER><ORDER_INFO><ORDER_ID>100045</ORDER_ID><ORDER_DATE>2024-03-15T10:22:00</ORDER_DATE></ORDER_INFO></ORDER_HEADER><ORDER_ITEM_LIST><ORDER_ITEM><LINE_ITEM_ID>1</LINE_ITEM_ID><ARTICLE_ID><SUPPLIER_AID>4711</SUPPLIER_AID></ARTICLE_ID><QUANTITY>2</QUANTITY></ORDER_ITEM></ORDER_ITEM_LIST></ORDER>',
// 'ParameterXML' => '<?xml version="1.0" encoding="UTF-8"?><BMECAT version="2005"><HEADER><CATALOG><LANGUAGE>deu</LANGUAGE><CATALOG_ID>SHOP1</CATALOG_ID><CATALOG_VERSION>1.0</CATALOG_VERSION></CATALOG></HEADER><T_NEW_CATALOG><PRODUCT><SUPPLIER_PID>4711</SUPPLIER_PID><PRODUCT_DETAILS><DESCRIPTION_SHORT>Beispielartikel</DESCRIPTION_SHORT></PRODUCT_DETAILS></PRODUCT></T_NEW_CATALOG></BMECAT>',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiImportAddXML', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiImportAddXML