Auftrag erstellen (WebService, API)
Übersicht
WebService SOAP-Endpunkt (Uri)
Der Aufruf des WebServices ist über folgende URI möglich:
http://TASKCENTERSERVER:PORT/LCWebServices/LCService/Import/OffersOrders.svc
Bitte setzen Sie für die Server-Adresse Ihren TaskCenter-Server ein.
Element | Beschreibung |
---|---|
TASKCENTERSERVER | Server auf dem die TaskCenter WebServices installiert sind (bsp. APPSRV1) |
PORT | Der Port über den die TaskCenter-WebServices erreicht werden (i.d.R. 6460) |
Wo finde ich den TaskCenter-Server?
Starten Sie Taskcenter, melden Sie sich an und gehen Sie über die Menüleiste auf das Fragezeichen und wählen den Unterpunkt "Info...".
In der "Server Adresse" finden Sie den Server inkl. Port.
Aufbau Request
Dateibeschreibung
Request
Element | Typ | Pflichtfeld | Beschreibung |
---|---|---|---|
Language | string | Nein | Wenn angegeben, werden die Fehlermeldungen in der jeweiligen Sprache zurückgegeben. Mögliche Werte: DEUTSCH, ENGLISCH |
Target | string | Ja | Ziel-Datenbank. In dieser Datenbank werden über die Edifact-Einstellungen (AdHoc-EDI) geprüft, ob "Username+Password" zu einem gültigen Kunden-Eintrag führen. Wenn nicht, wird die Auftragsanlage abgelehnt. |
Username | string | Ja | Benutzername für die Authentifizierung (wird in den Edifact-Einstellungen (AdHoc-EDI) in der Ziel-Datenbank vorgegeben). |
Password | string | Ja | Passwort für die Authentifizierung (wird in den Edifact-Einstellungen (AdHoc-EDI) in der Ziel-Datenbank vorgegeben). |
OffersOrders | OffersOrder[] | Ja, wenn nicht "XmlDocument" angegeben wurde | Liste mit den anzulegenden Aufträgen |
XmlDocument | string | Ja, wenn nicht "OffersOrders" angegeben wurde | XML-Text mit dem anzulegenden Auftrag (siehe Vorlage Xml File). |
OffersOrder
Element | Typ | Pflichtfeld | Beschreibung |
---|---|---|---|
Header | OfferOrderHeader | Ja | Enthält die Kopf-Daten des Auftrags |
Items | Item[] | Ja | Liste mit den einzelnen Positionen |
Header
Element | Typ | Pflichtfeld | Beschreibung |
---|---|---|---|
OrderNumber | long | Nein | Wenn angegeben, wird diese Auftragsnummer verwendet (bei Update) |
CustomerNumber | long | Nein | Wenn angegeben, wird diese Kundennummer verwendet (nur bei Neuanlage) |
Order | bool | Nein | Wenn "True", wird ein "Auftrag" erstellt, ansonsten ein "Angebot" |
WebOrder | bool | Nein | Wenn "True", wird das "Web"-Kennzeichen gesetzt und die "Web"-spezifischen Werte automatisch befüllt |
IsRepairOrder | bool | Nein | Wenn "True", wird das "Reparaturauftrag"-Kennzeichen gesetzt und ev. vorhandene Kundenlager-Einträge in den Reparatur-Feldern befüllt (ab TaskCenter Version 4.69.7.0) |
DeliveryDate | date | Nein | Wenn angegeben, wird dieses Lieferdatum verwendet (format = yyyy-MM-ddTHH:mm:ss) |
ValueDate | date | Nein | Valutadatum - wenn angegeben, wird dieses Valutadatum verwendet (format = yyyy-MM-ddTHH:mm:ss) (ab TaskCenter Version 4.73.5.0) |
PurchaseOrderNumber | string | Nein | Wenn angegeben, wird diese Bestellnummer im Auftrag eingetragen |
Agreement | string | Nein | Zusätzliche Vereinbarung |
Category | string | Ja | Die Kategorie ist zwingend erforderlich und muss im Ziel-Pollex-System vorhanden sein |
UID | string | Nein | Wenn angegeben, wird diese UID-Nummer verwendet, ansonsten wird die UID-Nummer aus dem Kundenstamm genommen |
PaymentMethod | string | Nein | Zahlungsbedingung - wenn angegeben, muss diese im Ziel-Pollex-System vorhanden sein. Wenn nicht angegeben, wird diese aus dem Kundenstamm genommen. |
ShippingMethod | string | Nein | Lieferbedingung - wenn angegeben, muss diese im Ziel-Pollex-System vorhanden sein. Wenn nicht angegeben, wird diese aus dem Kundenstamm genommen. |
ShippingType | string | Nein | Versandart - wenn angegeben, muss diese im Ziel-Pollex-System vorhanden sein. Wenn nicht angegeben, wird diese aus dem Kundenstamm genommen. |
OU | long | Nein | Organisatorische Einheit - wenn angegeben, muss diese im Ziel-Pollex-System vorhanden sein. Wenn nicht angegeben, wird die des Sachbearbeiters des Kunden verwendet. Wenn "OE zwingend" in den Grundlagen eingestellt wurde, muss entweder eine organisatorische Einheit übergeben, oder dem Sachbearbeiter eine OE zugeordnet werden. |
Finished | bool | Nein | Wenn angegeben, wird das Dokument auf "Erledigt" / "Nicht erledigt" gesetzt. |
PaidDeposit | decimal | Nein | Geleistete Anzahlung - wenn angegeben, wird dieser Betrag in der geleisteten Anzahlung vermerkt |
HeaderText | string | Nein | Auftrags-Kopftext, welcher im Auftrag hinterlegt wird |
DeliveryAddress | Address | Nein | Wenn angegeben, wird diese Lieferadresse verwendet - dabei wird Name1, Strasse und Ort aus dem Adressen-Stamm des Kunden verglichen. Gibt es bereits einen Eintrag, wird diese Adresse verknüpft, ansonsten wird ein neuer Eintrag im Adress-Stamm erstellt. |
InvoiceAddress | Address | Nein | Wenn angegeben, wird diese Rechnungsadresse verwendet - dabei wird Name1, Strasse und Ort aus dem Adressen-Stamm des Kunden verglichen. Gibt es bereits einen Eintrag, wird diese Adresse verknüpft, ansonsten wird ein neuer Eintrag im Adress-Stamm erstellt. |
RepairUser1 | string | Reparatur: User1 (ab TaskCenter Version 4.62.0.0) | |
RepairUser2 | string | Reparatur: User2 (ab TaskCenter Version 4.62.0.0) | |
RepairUser3 | string | Reparatur: User3 (ab TaskCenter Version 4.62.0.0) | |
RepairUser4 | string | Reparatur: User4 (ab TaskCenter Version 4.62.0.0) | |
RepairUser5 | string | Reparatur: User5 (ab TaskCenter Version 4.62.0.0) | |
RepairUser6 | string | Reparatur: User6 (ab TaskCenter Version 4.62.0.0) | |
RepairUser7 | string | Reparatur: User7 (ab TaskCenter Version 4.62.0.0) | |
RepairUser8 | string | Reparatur: User8 (ab TaskCenter Version 4.62.0.0) | |
RepairUser9 | string | Reparatur: User9 (ab TaskCenter Version 4.62.0.0) | |
RepairUser10 | string | Reparatur: User10 (ab TaskCenter Version 4.62.0.0) | |
RepairTakeoverText | string | Reparatur: Annahmetext (ab TaskCenter Version 4.62.0.0) | |
RepairFinishedText | string | Reparatur: Erledigt Text (ab TaskCenter Version 4.62.0.0) |
Auftragsprofilierung
Im XML-File können auch beliebig viele Werte der Auftragsprofilierung übergeben werden. Dazu ist jeweils ein eigenes XML-Tag in einem speziellen Format in die Datei einzufügen.
<ProfilingXYZ>Profilierungswert</ProfilingXYZ>
Wobei XYZ dem Namen des Profilierungskriteriums entspricht. Es ist hier auf die exakt korrekte Schreibweise (auch Groß-/Kleinschreibung) zu achten. Der Profilierungswert wird automatisch bei 254 Zeichen abgeschnitten.
Existiert das angegebene Profilierungskriterium (XYZ) nicht, dann wird der Auftrag trotzdem importiert und das Kriterium nicht übernommen. Es wird aber ein Eintrag in das Log erstellt, in dem auf das fehlende Kriterium hingewiesen wird.
Der Name des Profilierungskriteriums darf keine Leerzeichen und in XML-Tags nicht erlaubte Sonderzeichen (z.B. #) enthalten.
Address
Element | Typ | Pflichtfeld | Beschreibung |
---|---|---|---|
Name1 | string | Ja | Name 1 |
Name2 | string | Nein | Name 2 |
Attn | string | Nein | zu Handen |
POBox | string | Nein | Postfach |
Street | string | Ja | Strasse |
PostCode | string | Ja | Postleitzahl |
CityName | string | Ja | Ort |
CountryCode | string | Ja | Ländercode |
VATCountryCode | string | Nein | UID-Land (z.B. AT, DE) |
VATIdNumber | string | Nein | UID-Code (z.B. U52109800) |
Item
Element | Typ | Pflichtfeld | Beschreibung |
---|---|---|---|
ItemNumber | string | Ja | Artikelnummer, muss in LC vorhanden sein |
ItemDescription1 | string | Nein | Artikel-Bezeichnung 1 |
ItemDescription2 | string | Nein | Artikel-Bezeichnung 2 |
ItemDescription3 | string | Nein | Artikel-Bezeichnung 3 |
Quantity | decimal | Ja | Menge |
QuantityUnit | string | Nein | Mengeneinheit - wenn angegeben, muss diese in LC vorhanden sein |
ListPrice | decimal | Nein | Listenpreis - wenn angegeben, wird dieser Listenpreis verwendet. Wenn nicht vorhanden und es wurde ein Verkaufspreis angegeben, wird der Listenpreis über den angegebenen Rabatt berechnet. Wenn nicht angegeben und kein Verkaufspreis übergeben wurde, dann wird der Preis über die Preisfindung berechnet. |
SalesPrice | decimal | Nein | Verkaufspreis - wenn angegeben, wird dieser Verkaufspreis verwendet. Wenn nicht vorhanden und es wurde ein Listenpreis angegeben, wird der Verkaufspreis über den angegebenen Rabatt berechnet. Wenn nicht angegeben und kein Listenpreis übergeben wurde, dann wird der Preis über die Preisfindung berechnet. |
CustomerItemNumber | string | Nein | Kundenspezifische Artikelnummer |
LongText | string | Nein | Langtext des Artikels |
User1 | string | Nein | Text, der im Feld "Benutzer 1" eingetragen wird |
Serial | string | Nein | Seriennummer (wird nur übernommen, wenn der Artikel die Eigenschaft "Seriennummernpflicht Verkauf" hat) |
TaxRate VatRate | decimal | Nein | Wenn angegeben, dann wird der hier übertragene Steuersatz für die Auftragsanlage verwendet. Der Ustcode wird aus dem Artikel ermittelt, außer es wurde ein Ustcode im XML mit angegeben. |
TaxCode VatCode | int | Nein | Wenn angegeben, dann wird der hier übertragene Ustcode für die Auftragsanlage verwendet. Der Ustsatz wird dann aus der OE des Dokuments und dem übermittelten Ustcode ermittelt, außer es wurde ein Ustsatz im XML mit angegeben. |
Vorlagen XML File
Diese XML-Dokument-Vorlage kann im Request.XmlDocument direkt übergeben werden:
Beispiel siehe Request mit XmlDocument.
Beispiel-Requests
Kompletter Request
HTTP-Request
POST http://TASKCENTERSERVER:6460/LCWebServices/LCService/Import/OffersOrders.svc HTTP/1.1
Content-Type: text/xml; charset=utf-8
VsDebuggerCausalityData: uIDPo1w3xz+dzH5OobUkPk2mv0QAAAAAqJ/WnTiIP0qLBWJd0JwVytH9apNpQENGs0ULwpN3I+oACQAA
SOAPAction: "http://tempuri.org/IOffersOrders/ImportOffersOrders"
Host: TASKCENTERSERVER:6460
Content-Length: 2166
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<ImportOffersOrders xmlns="http://tempuri.org/">
<request xmlns:a="http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import.OffersOrders" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Language i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import"/>
<Password xmlns="http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import">samplepass</Password>
<Target xmlns="http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import">LC5</Target>
<Username xmlns="http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import">sampleaccess</Username>
<a:OffersOrders>
<a:OfferOrder>
<a:Header>
<a:CustomerNumber>200162</a:CustomerNumber>
<a:Order>true</a:Order>
<a:WebOrder>false</a:WebOrder>
<a:IsRepairOrder>false</a:IsRepairOrder>
<a:DeliveryDate>2019-12-24T00:00:00</a:DeliveryDate>
<a:PurchaseOrderNumber>B20191212</a:PurchaseOrderNumber>
<a:Agreement>Ihr persönlicher Vereinbarungstext</a:Agreement>
<a:Category>***</a:Category>
<a:UID>ATU1234567890</a:UID>
<a:PaymentMethod>SZK</a:PaymentMethod>
<a:ShippingMethod>SLK</a:ShippingMethod>
<a:ShippingType>GLS</a:ShippingType>
<a:OU>10</a:OU>
<a:Finished>false</a:Finished>
<a:PaidDeposit>49.99</a:PaidDeposit>
<a:HeaderText>Individueller Kopftext für den Auftrag</a:HeaderText>
<a:DeliveryAddress>
<a:Name1></a:Name1>
<a:Name2></a:Name2>
<a:POBox></a:POBox>
<a:Street></a:Street>
<a:PostCode></a:PostCode>
<a:CityName></a:CityName>
<a:CountryCode></a:CountryCode>
<a:Attn></a:Attn>
</a:DeliveryAddress>
<a:InvoiceAddress>
<a:Name1></a:Name1>
<a:Name2></a:Name2>
<a:POBox></a:POBox>
<a:Street></a:Street>
<a:PostCode></a:PostCode>
<a:CityName></a:CityName>
<a:CountryCode></a:CountryCode>
<a:Attn></a:Attn>
</a:InvoiceAddress>
<a:RepairUser1>Test-Text 1</a:RepairUser1>
<a:RepairUser2>Test-Text 2</a:RepairUser2>
<a:RepairUser3>Test-Text 3</a:RepairUser3>
<a:RepairUser4>Test-Text 4</a:RepairUser4>
<a:RepairUser5>Test-Text 5</a:RepairUser5>
<a:RepairUser6>Test-Text 6</a:RepairUser6>
<a:RepairUser7>Test-Text 7</a:RepairUser7>
<a:RepairUser8>Test-Text 8</a:RepairUser8>
<a:RepairUser9>Test-Text 9</a:RepairUser9>
<a:RepairUser10>Test-Text 10</a:RepairUser10>
<a:RepairTakeoverText>Test-AnnahmeText</a:RepairTakeoverText>
<a:RepairFinishedText>Test-Erledigt-Text</a:RepairFinishedText>
</a:Header>
<a:Items>
<a:Item>
<a:ItemNumber>1110444</a:ItemNumber>
<a:ItemDescription1>Intel Core i7 9777K CPU</a:ItemDescription1>
<a:ItemDescription2>Sockel 4711</a:ItemDescription2>
<a:ItemDescription3>Boxed</a:ItemDescription3>
<a:Quantity>2</a:Quantity>
<a:QuantityUnit>Stk</a:QuantityUnit>
<a:ListPrice>159</a:ListPrice>
<a:SalesPrice>119</a:SalesPrice>
<a:CustomerItemNumber>A18599</a:CustomerItemNumber>
<a:LongText>Artikelspezifischer Langtext, individuell</a:LongText>
<a:User1>Text, der im Feld USER1 der Position gespeichert wird</a:User1>
<a:Serial>SN171819</a:Serial>
</a:Item>
<a:Item>
<a:ItemNumber>1017193</a:ItemNumber>
<a:ItemDescription1 i:nil="true"/>
<a:ItemDescription2 i:nil="true"/>
<a:ItemDescription3 i:nil="true"/>
<a:Quantity>1</a:Quantity>
<a:QuantityUnit i:nil="true"/>
<a:ListPrice>49</a:ListPrice>
<a:SalesPrice>19.9</a:SalesPrice>
<a:CustomerItemNumber i:nil="true"/>
<a:LongText i:nil="true"/>
<a:User1 i:nil="true"/>
<a:Serial i:nil="true"/>
</a:Item>
</a:Items>
</a:OfferOrder>
</a:OffersOrders>
<a:XmlDocument i:nil="true"/>
</request>
</ImportOffersOrders>
</s:Body>
</s:Envelope>
Minimum Request
XML-Request
POST http://TASKCENTERSERVER:6460/LCWebServices/LCService/Import/OffersOrders.svc HTTP/1.1
SOAPAction: http://tempuri.org/IOffersOrders/ImportOffersOrders
User-Agent: POLLEX-LC Http Post Tool
Content-Type: text/xml; charset=utf-8
Host: TASKCENTERSERVER:6460
Content-Length: 1774
Expect: 100-continue
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<ImportOffersOrders xmlns="http://tempuri.org/">
<request xmlns:a="http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import.OffersOrders" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Language i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import"/>
<Password xmlns="http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import">samplepass</Password>
<Target xmlns="http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import">LC5</Target>
<Username xmlns="http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import">sampleaccess</Username>
<a:OffersOrders>
<a:OfferOrder>
<a:Header>
<a:CustomerNumber>200162</a:CustomerNumber>
<a:Category>***</a:Category>
<a:OU>10</a:OU>
</a:Header>
<a:Items>
<a:Item>
<a:ItemNumber>1110444</a:ItemNumber>
<a:Quantity>2</a:Quantity>
</a:Item>
<a:Item>
<a:ItemNumber>1017193</a:ItemNumber>
<a:Quantity>1</a:Quantity>
</a:Item>
</a:Items>
</a:OfferOrder>
</a:OffersOrders>
<a:XmlDocument i:nil="true"/>
</request>
</ImportOffersOrders>
</s:Body>
</s:Envelope>
Request mit XML-Document
Raw-Xml-Document
Dies ist das eigentliche, reine XML-Dokument mit den Auftrags-Kopf-Daten und den Positionen, ohne zusätzliche Namespace-Angaben. Das Xml-Document kann im Request im Feld "XmlDocument" angegeben werden.
XmlDocument.xml
Bitte beachten Sie: Falls Ihre Programmier-Umgebung nicht automatisch eine HTML-Encodierung vornimmt, muss dies manuell durchgeführt werden.
Nachfolgend ein Beispiel-Request mit eingebettetem XmlDocument.
Request
Der Request enthält ein XML im XML und kann daher nicht dargestellt werden. Deshalb liegt dieser Request als Download vor.
Aufbau Response
Dateibeschreibung
ImportOffersOrdersResponse
Element | Typ | Beschreibung |
---|---|---|
ImportOffersOrdersResult | ImportOffersOrdersResult | Enthält die Antwort-Informationen |
ImportOffersOrdersResult
Element | Typ | Beschreibung |
---|---|---|
InformationList | ServiceResponse.Information[] | Liste mit Fehlerinformationen |
ResultType | ResultType | Information, ob die Aufgabe durchgeführt wurde. Mögliche Werte: Success, Error |
ImportedOrders | ImportedOrder[] | Liste mit den erstellten Aufträgen |
ServiceResponse.Information
Element | Typ | Beschreibung |
---|---|---|
DateTime | date | Zeitstempel |
InformationType | InformationType | Typ der Information Mögliche Werte: Error, Warning, Info |
Text | string | Enthält die Klartext-Meldung in der angegebenen Sprache |
TranslationText | string | Enthält die Meldung sprach-unabhängig falls die Übersetzung in der jeweiligen Anwendung erfolgt |
ImportedOrder
Element | Typ | Beschreibung |
---|---|---|
OrderNumber | long | Enthält die Auftragsnummer |
Items | ImportedItem[] | Liste mit den Positionen |
ImportedItem
Element | Typ | Beschreibung |
---|---|---|
Aposinx | long | Enthält den eindeutigen Datensatz-Index der Position |
ItemNumber | string | Artikelnummer |
ReferenceNumber | string | Enthält die Positions-Referenznummer für den Datenaustausch des Erstellers |
SalesPrice | decimal | Verwendeter Verkaufspreis |
HTTP-Response - Erfolgreich
HTTP-Response
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Wed, 27 Nov 2019 07:04:46 GMT
Content-Length: 971
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<ImportOffersOrdersResponse xmlns="http://tempuri.org/">
<ImportOffersOrdersResult xmlns:a="http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import.OffersOrders" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<InformationList xmlns="http://schemas.datacontract.org/2004/07/LC.Globals.Web"/>
<ResultType xmlns="http://schemas.datacontract.org/2004/07/LC.Globals.Web">Success</ResultType>
<a:ImportedOrders>
<a:ImportedOrder>
<a:Items>
<a:ImportedItem>
<a:Aposinx>1861526</a:Aposinx>
<a:ItemNumber>1110444</a:ItemNumber>
<a:ReferenceNumber/>
<a:SalesPrice>119</a:SalesPrice>
</a:ImportedItem>
<a:ImportedItem>
<a:Aposinx>1861527</a:Aposinx>
<a:ItemNumber>1017193</a:ItemNumber>
<a:ReferenceNumber/>
<a:SalesPrice>19.90</a:SalesPrice>
</a:ImportedItem>
</a:Items>
<a:OrderNumber>5387</a:OrderNumber>
</a:ImportedOrder>
</a:ImportedOrders>
</ImportOffersOrdersResult>
</ImportOffersOrdersResponse>
</s:Body>
</s:Envelope>
HTTP-Response - Grundlegender Fehler im XML-Aufbau ( Internal Server Error 500 )
Sollten beim Request grundlegende Fehler enthalten sein, sodass die eine Prüfung unsererseits "noch" nicht möglich ist, sind hier einige Ursachen und Lösungsmöglichkeiten aufgelistet:
SOAPAction-Header fehlt
Response-Envelope
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">a:ActionNotSupported</faultcode>
<faultstring xml:lang="de-AT">Die Nachricht mit Action "" kann aufgrund einer fehlenden ContractFilter-Übereinstimmung beim EndpointDispatcher nicht verarbeitet werden. Mögliche Ursachen: Vertragskonflikt (keine Action-Übereinstimmung zwischen Sender und Empfänger) oder ein Bindung/Sicherheit-Konflikt zwischen dem Sender und dem Empfänger. Stellen Sie sicher, dass Sender und Empfänger über den gleichen Vertrag und die gleiche Bindung verfügen (einschließlich Sicherheitsanforderungen, z. B. "Message", "Transport", "None").</faultstring>
</s:Fault>
</s:Body>
</s:Envelope>
Lösung: Fügen Sie folgenden Request-Header beim Aufruf ein:
SOAPAction: "http://tempuri.org/IOffersOrders/ImportOffersOrders"
Fehlendes Element (OffersOrders)
Response-Envelope
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode>
<faultstring xml:lang="de-AT">Der Wert darf nicht NULL sein.
Parametername: request.OffersOrders</faultstring>
<detail>
<ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<HelpLink i:nil="true"/>
<InnerException i:nil="true"/>
<Message>Der Wert darf nicht NULL sein.
Parametername: request.OffersOrders</Message>
<StackTrace> bei LCService.Import.OffersOrders.ImportOffersOrders(ImportOffersOrdersRequest request) in C:\LC.Web\LCService\LCService\Import\OffersOrders.svc.cs:Zeile 32.
bei SyncInvokeImportOffersOrders(Object , Object[] , Object[] )
bei System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
bei System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace>
<Type>System.ArgumentNullException</Type>
</ExceptionDetail>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
Lösung: Es muss zumindest ein Auftrag im XML angegeben werden. Fügen Sie das OffersOrders-Element mit einem Auftrag ein.
Fehlerhaftes XML
Response-Envelope
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:DeserializationFailed</faultcode><faultstring xml:lang="de-AT">Der Formatierer hat beim Deserialisieren der Nachricht eine Ausnahme ausgelöst: Fehler beim Deserialisieren von Parameter http://tempuri.org/:request. Die InnerException-Nachricht war "Fehler beim Deserialisieren des Objekts "vom Typ LC.SharedObjects.Import.OffersOrders.ImportOffersOrdersRequest". Es wurde das Token ">" erwartet, doch gefunden wurde "<". Zeile 9, Position 17.". Weitere Details finden Sie unter "InnerException".</faultstring><detail><ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><HelpLink i:nil="true"/><InnerException><HelpLink i:nil="true"/><InnerException><HelpLink i:nil="true"/><InnerException i:nil="true"/><Message>Es wurde das Token ">" erwartet, doch gefunden wurde "<". Zeile 9, Position 17.</Message><StackTrace> bei System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1, String arg2, String arg3)
bei System.Xml.XmlExceptionHelper.ThrowTokenExpected(XmlDictionaryReader reader, String expected, Char found)
bei System.Xml.XmlUTF8TextReader.ReadEndElement()
bei System.Xml.XmlUTF8TextReader.Read()
bei System.Xml.XmlBaseReader.ReadContentAsString()
bei System.Xml.XmlBaseReader.ReadElementContentAsString()
bei ReadImportOffersOrdersRequestFromXml(XmlReaderDelegator , XmlObjectSerializerReadContext , XmlDictionaryString[] , XmlDictionaryString[] )
bei System.Runtime.Serialization.ClassDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context)
bei System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, Type declaredType, DataContract& dataContract)
bei System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, DataContract dataContract, String name, String ns)
bei System.Runtime.Serialization.DataContractSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName, DataContractResolver dataContractResolver)
bei System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)</StackTrace><Type>System.Xml.XmlException</Type></InnerException><Message>Fehler beim Deserialisieren des Objekts "vom Typ LC.SharedObjects.Import.OffersOrders.ImportOffersOrdersRequest". Es wurde das Token ">" erwartet, doch gefunden wurde "<". Zeile 9, Position 17.</Message><StackTrace> bei System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)
bei System.Runtime.Serialization.DataContractSerializer.ReadObject(XmlDictionaryReader reader, Boolean verifyObjectName)
bei System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.PartInfo.ReadObject(XmlDictionaryReader reader, XmlObjectSerializer serializer)
bei System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameterPart(XmlDictionaryReader reader, PartInfo part, Boolean isRequest)</StackTrace><Type>System.Runtime.Serialization.SerializationException</Type></InnerException><Message>Der Formatierer hat beim Deserialisieren der Nachricht eine Ausnahme ausgelöst: Fehler beim Deserialisieren von Parameter http://tempuri.org/:request. Die InnerException-Nachricht war "Fehler beim Deserialisieren des Objekts "vom Typ LC.SharedObjects.Import.OffersOrders.ImportOffersOrdersRequest". Es wurde das Token ">" erwartet, doch gefunden wurde "<". Zeile 9, Position 17.". Weitere Details finden Sie unter "InnerException".</Message><StackTrace> bei System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameterPart(XmlDictionaryReader reader, PartInfo part, Boolean isRequest)
bei System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameters(XmlDictionaryReader reader, PartInfo[] parts, Object[] parameters, Boolean isRequest)
bei System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, String action, MessageDescription messageDescription, Object[] parameters, Boolean isRequest)
bei System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest)
bei System.ServiceModel.Dispatcher.OperationFormatter.DeserializeRequest(Message message, Object[] parameters)
bei System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
bei System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace><Type>System.ServiceModel.Dispatcher.NetDispatcherFaultException</Type></ExceptionDetail></detail></s:Fault></s:Body></s:Envelope>
Lösung: Im Request wurde ein fehlerhaftes XML übergeben. Korrigieren Sie dieses.
HTTP-Response - Inhaltlicher Fehler
Wurde der grundlegende Aufbau des XML-Request korrekt übergeben, aber es sind inhaltliche Fehler vorhanden (falsche Kundennummer, OE, Versandart, ... ), dann der HTTP-Response grundsätzlich OK (200), allerdings sind die Fehlerinformationen in der "InformationList" im Response angegeben, wie im folgenden Beispiel gezeigt:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<ImportOffersOrdersResponse xmlns="http://tempuri.org/">
<ImportOffersOrdersResult xmlns:a="http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import.OffersOrders" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<InformationList xmlns="http://schemas.datacontract.org/2004/07/LC.Globals.Web">
<ServiceResponse.Information>
<DateTime>2020-01-02T10:43:12.2472387+01:00</DateTime>
<InformationType>Error</InformationType>
<Text>OE zwingend, jedoch keine OE im Personalstamm des Sachbearbeiters eingetragen!</Text>
<TranslationText><dllnr:310></TranslationText>
</ServiceResponse.Information>
</InformationList>
<ResultType xmlns="http://schemas.datacontract.org/2004/07/LC.Globals.Web">Error</ResultType>
<a:ImportedOrders i:nil="true"/>
</ImportOffersOrdersResult>
</ImportOffersOrdersResponse>
</s:Body>
</s:Envelope>
Liste mit den bekannten (Fehler)Meldungen (unvollständig)
Code | Meldung | Beschreibung |
---|---|---|
310 | OE zwingend, jedoch keine OE im Personalstamm des Sachbearbeiters eingetragen! | Im System ist festgelegt, dass je Dokument zwingend eine OE (organisatorische Einheit) angegeben werden muss. Es wurde jedoch keine OE übergeben oder dem Standard-Sachbearbeiter ist keine OE zugeordnet. |
6747 | Artikelnummer 12345 nicht vorhanden | Eine angegebene Artikelnummer existiert nicht im Ziel-System. |
7866 | Die Kundennummer 200162 existiert nicht! | Es wurde eine Kundennummer angegeben, die im Ziel-System nicht vorhanden ist. |
9877 | Artikel 12345 Ustcode 8 ungültig | Der Ust-Code für den Artikel ist ungültig. Es sind nur Werte zw. 0 und 7 erlaubt. |
Codebeispiele
Codebeispiel (C#)
1) Neues C#-Projekt im Visual Studio erstellen
2) Service-Referenz hinzufügen
3) Demo-Code C#
CreatePollexOrderSample
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CreatePollexOrderSample
{
class Program
{
static void Main(string[] args)
{
string target = "LC5"; // target-database
string username = "sampleaccess"; // your EDI account username
string password = "samplepass"; // your EDI account password
// create SOAP-service instance
using (ImportOrderService.OffersOrdersClient client = new ImportOrderService.OffersOrdersClient())
{
// create your order, containing header and items
ImportOrderService.OfferOrder order = new ImportOrderService.OfferOrder()
{
// Header - you have to define at least
// customernumber, category and OU (organizational unit)
Header = new ImportOrderService.OfferOrderHeader()
{
CustomerNumber = 200162,
Category = "***", // get possible category values from your partner
Order = true,
OU = 10,
ShippingType = "GLS" // get valid shipping types from your partner
},
// Items - in our sample we add 2 items
Items = new ImportOrderService.Item[]
{
new ImportOrderService.Item() // item 1
{
ItemNumber = "1110444",
Quantity = 2
},
new ImportOrderService.Item() // item 2
{
ItemNumber = "1017193",
Quantity = 1
}
}
};
var request = new ImportOrderService.ImportOffersOrdersRequest()
{
Target = target,
Username = username,
Password = password,
OffersOrders = new ImportOrderService.OfferOrder[] { order }
};
var response = client.ImportOffersOrders(request);
if (response.ResultType == ImportOrderService.ServiceResponse.ResultTypeEnum.Success)
{
Console.WriteLine("Order " + response.ImportedOrders[0].OrderNumber + " successfully created!");
}
else if (response.InformationList != null)
{
Console.WriteLine("Order import failed:");
foreach (var info in response.InformationList)
{
Console.WriteLine(info.Text);
}
}
}
}
}
}
Codebeispiel VB
1) Neues VB-Projekt im Visual Studio erstellen
2) Service-Referenz hinzufügen
3) Demo-Code VB
CreatePollexOrderSampleVB
Module Module1
Sub Main()
Dim target As String = "LC5" ' target-database
Dim username As String = "sampleaccess" ' your EDI account username
Dim password As String = "samplepass" ' your EDI account password
' create SOAP-service instance
Dim client As ImportOrderService.OffersOrdersClient = New ImportOrderService.OffersOrdersClient()
' create your order, containing header And items
Dim order As ImportOrderService.OfferOrder = New ImportOrderService.OfferOrder()
' Header - you have to define at least
' customernumber, category And OU (organizational unit)
With order
.Header = New ImportOrderService.OfferOrderHeader()
With .Header
.CustomerNumber = 200162
.Category = "***" ' Get possible category values from your partner
.Order = True
.OU = 10
.ShippingType = "GLS" ' get valid shipping types from your partner
End With
' Items - in our sample we add 2 items
Dim items = New List(Of ImportOrderService.Item)
items.Add(New ImportOrderService.Item() With {.ItemNumber = "1110444", .Quantity = 2})
items.Add(New ImportOrderService.Item() With {.ItemNumber = "1017193", .Quantity = 1})
.Items = items.ToArray()
End With
Dim request = New ImportOrderService.ImportOffersOrdersRequest() With
{
.Target = target,
.Username = username,
.Password = password,
.OffersOrders = New ImportOrderService.OfferOrder() {order}
}
Dim response = client.ImportOffersOrders(request)
If (response.ResultType = ImportOrderService.ServiceResponse.ResultTypeEnum.Success) Then
Console.WriteLine("Order " & response.ImportedOrders(0).OrderNumber & " successfully created!")
ElseIf (response.InformationList IsNot Nothing) Then
Console.WriteLine("Order import failed:")
For Each info In response.InformationList
Console.WriteLine(info.Text)
Next
End If
End Sub
End Module
Codebeispiel VB6
Demo-Code VB6
CreatePollexOrderSampleVB6
Private Sub Form_Load()
' Elemente des XML Headers
' Es wird ein zweidimensionales Feld erzeugt
' Dimension 1 beinhaltet aufsteigend sortiert jeden "XML-Tag"
' Dimension 2 beinhaltet auf Position 0 den "Namen" des XML-Tags und auf Position 1 den "Wert"
Dim strArrHeader(3, 2) As String
strArrHeader(0, 0) = "CustomerNumber"
strArrHeader(0, 1) = "20000"
strArrHeader(1, 0) = "Order"
strArrHeader(1, 1) = "true"
strArrHeader(2, 0) = "OU"
strArrHeader(2, 1) = "10"
' Es wird für jedes Item ein zweidimensionales Feld erzeugt
' Dimension 1 beinhaltet aufsteigend sortiert jeden "XML-Tag"
' Dimension 2 beinhaltet auf Position 0 den "Namen" des XML-Tags und auf Position 1 den "Wert"
Dim strArrItem1(3, 2) As String
strArrItem1(0, 0) = "ItemNumber"
strArrItem1(0, 1) = "4711"
strArrItem1(1, 0) = "Quantity"
strArrItem1(1, 1) = "5"
strArrItem1(2, 0) = "SalesPrice"
strArrItem1(2, 1) = "99.99"
' Aus dem Header Feld wird ein XML String generiert
' Um diesen String generieren zu können, muss BuildHeaderString() mit dem Header Feld aufgerufen werden
Dim strHeader As String
strHeader = BuildHeaderStr(strArrHeader)
' das strArrAllItems Feld muss größenmäßig gleich groß wie die Anzahl aller Items sein
Dim strArrAllItems(1) As String
' dem Feld wird jedes Item als XML String hinzugefügt
' um einen Item XML String zu generieren muss BuildItemString() mit dem jeweiligen Item Feld aufgerufen werden
strArrAllItems(0) = BuildItemStr(strArrItem1)
' Die einzelnen Item Strings werden zu einem einzigen Items-String zusammengefügt
Dim strAllItems As String
strAllItems = Join(strArrAllItems, vbCrLf)
' Aufruf des Webservice
' Bei Open befindet sich als zweiter Parameter die Adresse des zu konsumierenden Webservices
' BuildRequest wird mit Target, Username, Password, dem Headerstring und dem Items-String aufgerufen
With CreateObject("WinHttp.WinHttpRequest.5.1")
.Open "POST", "http://cloud.pollex-lc.com:6460/LCWebServices/LCService/Import/OffersOrders.svc", 0
.SetRequestHeader "Content-Type", "text/xml; charset=utf-8"
.SetRequestHeader "SOAPAction", "http://tempuri.org/IOffersOrders/ImportOffersOrders"
.Send BuildRequest("ORLIK", "123456", "abc", strHeader, strAllItems)
If .Status = 200 Then ParseResponse .ResponseText Else MsgBox .StatusText
End With
End Sub
' Diese Methode generiert den vollständigen XML Request
' Hier KEINE Änderungen vornehmen!
Private Function BuildRequest(Target, Username, Password, strHeader, strAllItems) As String
Dim S(9) As String
S(0) = "<s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body><ImportOffersOrders xmlns='http://tempuri.org/'><request xmlns:a='http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import.OffersOrders' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'><Language i:nil='true' xmlns='http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import'/>"
S(1) = "<Password xmlns='http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import'>" & Password & "</Password>"
S(2) = "<Target xmlns='http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import'>" & Target & "</Target>"
S(3) = "<Username xmlns='http://schemas.datacontract.org/2004/07/LC.SharedObjects.Import'>" & Username & "</Username>"
S(4) = "<a:OffersOrders><a:OfferOrder><a:Header>" & strHeader
S(5) = "</a:Header><a:Items>" & strAllItems
S(6) = "</a:Items></a:OfferOrder></a:OffersOrders></request></ImportOffersOrders></s:Body></s:Envelope>"
BuildRequest = Join(S, vbCrLf)
End Function
' Testweise Ausgabe des Response
Private Sub ParseResponse(ByVal sResponse As String)
MsgBox sResponse
End Sub
' Der Header String wird aus den einzelnen Elementen des übergebenen Stringarrays zu einem XML String zusammengebaut
' Hier KEINE Änderungen vornehmen!
Private Function BuildHeaderStr(strArrHeader) As String
Dim tempHeaderArr() As String
ReDim tempHeaderArr(UBound(strArrHeader, 1) - 1)
For i = 0 To UBound(strArrHeader, 1) - 1
tempHeaderArr(i) = "<a:" & strArrHeader(i, 0) & ">" & strArrHeader(i, 1) & "</a:" & strArrHeader(i, 0) & ">"
Next i
BuildHeaderStr = Join(tempHeaderArr, vbCrLf)
End Function
' Der Item String wird aus den einzelnen Elementen des übergebenen Stringarrays zu einem XML String zusammengebaut
' Hier KEINE Änderungen vornehmen!
Private Function BuildItemStr(strArrItems) As String
Dim tempItems() As String
ReDim tempItems(UBound(strArrItems, 1) - 1)
For i = 0 To UBound(strArrItems, 1) - 1
tempItems(i) = "<a:" & strArrItems(i, 0) & ">" & strArrItems(i, 1) & "</a:" & strArrItems(i, 0) & ">"
Next i
BuildItemStr = "<a:Item>" & Join(tempItems, vbCrLf) & "</a:Item>"
End Function