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:

ImportDocuments.xml

Beispiel siehe Request mit XmlDocument.


Beispiel-Requests

Kompletter Request

XML
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
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

RequestWithXmlDocument.xml

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

XML
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
XML
<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)
XML
<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
XML
<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:

XML
<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>&lt;dllnr:310&gt;</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

image2019-11-26_21-35-47.png


image2019-11-26_21-36-39.png


image2019-11-26_21-36-55.png


3) Demo-Code C#

C#
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

image2019-11-26_22-13-20.png


image2019-11-26_21-36-39.png

image2019-11-26_22-40-49.png

3) Demo-Code VB

Visual Basic
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

Visual Basic
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