pixiSetHistoricalSupplierPrice
Aktualisiert Lieferantenpreis und Lieferant eines historischen Wareneingangs-Preisdatensatzes (InvBinItemLog_In_Price) ohne zugeordnete Lieferung.
Setzt den Lieferantenpreis eines einzelnen historischen (FIFO-)Wareneingangs-Preisdatensatzes manuell. Der Datensatz wird über InvBinItemLogId identifiziert.
Ablauf:
- Alle vier Parameter sind Pflicht. Fehlt einer davon, wird eine Fehlerzeile zurückgegeben.
- Ein negativer
SupplierPricewird abgelehnt. SupplierIdmuss alsSuppliersKeyinSuppliersexistieren.UserNamemuss alsUSER_NAMEinUCS_USERSexistieren. Die zugehörige Benutzer-ID wird als ändernder Benutzer gespeichert.- Der Datensatz
InvBinItemLogIdmuss inInvBinItemLog_In_Priceexistieren. - Nur Datensätze ohne
DeliveryIdkönnen geändert werden. Datensätze mit bereits zugeordneter Lieferung werden abgelehnt. - Der Datensatz wird aktualisiert:
Pricewird aufSupplierPricegesetzt.SupplierIdwird aufSupplierIdgesetzt.DeliveryIdundDeliveryId_Assignedwerden auf NULL gesetzt.QuerySourcewird auf5gesetzt (manuelle Änderung über API).RecordModifiedByUserIdundRecordModifiedOnwerden gesetzt; der Zeitstempel ist die aktuelle Zeit alssmalldatetime.
Der Aufruf liefert genau eine Zeile mit Status und Meldung zurück, entweder einen Fehler oder eine Erfolgsbestätigung.
Hinweise
- Spaltennamen-Falle: Fehlerzeilen der Validierung verwenden die Spalte
Status. Die Erfolgszeile und die Fehlerzeile aus dem CATCH-Block verwenden die falsch geschriebene SpalteStaus. Clients sollten beide Spaltennamen prüfen. - Der Kopfkommentar der Prozedur („Returns FIFO supplier prices“) passt nicht zum Verhalten. Die Prozedur ändert Daten.
- Die Prozedur öffnet eine eigene Transaktion oder einen Savepoint, falls der Aufrufer bereits eine offene Transaktion hat.
- Die Validierungsprüfungen kehren vor einem Commit oder Rollback zurück. Ohne äußere Transaktion kann der Aufruf mit noch offener Transaktion enden. SQL Server kann dann eine Abweichung der Transaktionsanzahl melden.
- Bei einem Laufzeitfehler wird die Transaktion bzw. der Savepoint zurückgerollt. Der Fehler wird über
log.InsertErrorprotokolliert (nicht beigefügt). - Lookups verwenden
NOLOCK. Das Update verwendetROWLOCK. - In der Erfolgsmeldung wird der Preis als
money-nach-varchar-Konvertierung ausgegeben, also mit zwei Nachkommastellen.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
InvBinItemLogId
|
int | NULL |
ID des historischen Wareneingangs-Preisdatensatzes in Beispiel: |
SupplierPrice
|
money decimal |
NULL |
Neuer Lieferantenpreis. Darf nicht negativ sein. Faktisch Pflicht. Beispiel: |
SupplierId
|
int | NULL |
Lieferantenschlüssel ( Beispiel: |
UserName
|
varchar(30) string |
NULL |
Pixi-Benutzername ( Beispiel: |
Antwort
Result-Set 1 · Wenn eine Validierungsprüfung fehlschlägt
Fehlerzeile aus der Parameter- bzw. Datensatzvalidierung. Es werden keine Daten geändert.
| Spalte | Typ | Beschreibung |
|---|---|---|
Status
|
varchar(5) string |
Immer |
Message
|
varchar string |
Fehlerbeschreibung. |
Result-Set 2 · Bei Erfolg
Bestätigungszeile nach der Aktualisierung des Datensatzes. Spaltenname Staus beachten.
| Spalte | Typ | Beschreibung |
|---|---|---|
Staus
|
varchar(7) string |
Immer |
Message
|
varchar string |
Bestätigungstext mit Preis und Datensatz-ID. |
Result-Set 3 · Bei einem Laufzeitfehler (CATCH-Block)
Fehlerzeile mit der SQL-Server-Fehlermeldung. Die Änderungen werden zurückgerollt.
| Spalte | Typ | Beschreibung |
|---|---|---|
Staus
|
varchar(5) string |
Immer |
Message
Kann leer sein |
nvarchar(4000) string |
Ergebnis von |
Beispielantwort
<SqlRowSet1>
<row>
<Staus>Success</Staus>
<Message>Price (12.50) successfully updated for record: 123456.</Message>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| Error | All parameters are mandatory. | Mindestens einer der Parameter `InvBinItemLogId`, `SupplierPrice`, `SupplierId`, `UserName` fehlt oder ist NULL. Alle vier Parameter übergeben. |
| Error | Negative supplier price is not allowed. | `SupplierPrice` ist kleiner als 0. Einen Preis von 0 oder höher übergeben. |
| Error | Supplier with SupplierId: {SupplierId} does not exist. | Es existiert kein Lieferant mit diesem `SuppliersKey`. Einen gültigen Lieferantenschlüssel verwenden. |
| Error | User with UserName: "{UserName}" does not exist. | In `UCS_USERS` existiert kein Benutzer mit diesem `USER_NAME`. Einen vorhandenen Pixi-Benutzernamen verwenden. |
| Error | Historical supplier price record with InvBinItemLogId: {InvBinItemLogId} does not exist. | In `InvBinItemLog_In_Price` existiert kein Datensatz mit dieser ID. |
| Error | Only records that do not have a delivery already assigned can be updated. | Der Datensatz hat bereits eine `DeliveryId`. Nur Datensätze ohne Lieferung können manuell geändert werden. |
| Error | {ERROR_MESSAGE()} | Bei der Verarbeitung ist ein unerwarteter SQL-Fehler aufgetreten. Der Text wird in den Spalten `Staus`/`Message` zurückgegeben, und der Fehler wird protokolliert. |
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:pixiSetHistoricalSupplierPrice>
<!-- <InvBinItemLogId>123456</InvBinItemLogId> -->
<!-- <SupplierPrice>12.50</SupplierPrice> -->
<!-- <SupplierId>17</SupplierId> -->
<!-- <UserName>api_user</UserName> -->
</ns1:pixiSetHistoricalSupplierPrice>
</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:pixiSetHistoricalSupplierPrice>
<!-- <InvBinItemLogId>123456</InvBinItemLogId> -->
<!-- <SupplierPrice>12.50</SupplierPrice> -->
<!-- <SupplierId>17</SupplierId> -->
<!-- <UserName>api_user</UserName> -->
</ns1:pixiSetHistoricalSupplierPrice>
</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 = [
// 'InvBinItemLogId' => '123456',
// 'SupplierPrice' => '12.50',
// 'SupplierId' => '17',
// 'UserName' => 'api_user',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiSetHistoricalSupplierPrice', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiSetHistoricalSupplierPrice