MIAS VIES UmsatzsteuerID prüfen in Navision / BC365

Estimated reading time: 11 minutes

Warum sollte ich UmsatzsteuerID’s (Mwst-ID) prüfen?

Nun… weil Sie, wenn Sie diesen Text hier lesen, in Deutschland oder Österreich sitzen… und da werden die EU-Vorschriften (teils auch schon Deutsche oder Österreichische Verordnungen) nun einmal ernst genommen.

Anbieter von elektronischen Diensten wie z. B. Updates von Antivirenprogrammen sind verpflichtet, für diese Dienstleistung MwSt in Rechnung zu stellen. Wenn der Käufer dieser Dienste steuerpflichtig ist, schuldet u. U. der Kunde und nicht der Dienstleistende die MwSt. Deshalb kann der Anbieter die MwSt-Nummer des Kunden erfragen, um zu klären, ob er die MwSt in Rechnung stellen muss, oder ob der Kunde die MwSt abzuführen hat. Wenn der Kunde nicht über eine gültige MwSt-Nummer verfügt, stellt der Dienstleistende die MwSt in Rechnung.

Und bei Ihren Lieferanten (aber seit 2025 wohl auch für Kunden, habe den Artikel nicht wiedergefunden) sind Sie schlicht und ergreifend verpflichtet, die UmsatzsteuerID Ihres Geschäftspartners zu prüfen und diese Prüfung auch zu dokumentieren! Bürokratieabbau… Bei einer ungültigen UmsatzsteuerID kann Ihnen (und wird ihnen) der Vorsteuerabzug der Einkaufsrechnung verwehrt werden – das betrifft sowohl inländische wie aus ausländische Lieferanten!

Noch schlimmer: Berechnen Sie Leistungen (Waren oder Dienstleistungen) an einen Industrie-Kunden mit einer inkorrekten UmsatzsteuerID, wird das Finanzamt die Umsatzsteuer von Ihnen verlangen.

Kommt Sie ihrer Pflicht zur Überprüfung der Richtigkeit der USt-IdNr. nicht nach und stellt sich heraus, dass die von ihrem Kunden angegebene USt-IdNr. falsch war, müssen Sie mit Steuernachzahlungen rechnen. Um dieses Risiko zu vermeiden, ist eine Überprüfung der USt-IdNr. des Empfängers der Lieferung dringend anzuraten.

Der Grund ist einfach: Immer mehr Betrug mit der Vorsteuer/Umsatzsteuer, z.B. das immer noch mögliche und daher auch noch immer beliebte Umsatzsteuerkarusell.

Was ist VIES?

VIES (USt-Informationsaustauschsystem) ist eine Suchmaschine (keine Datenbank!) der Europäischen Kommission. Bei einer Suche über VIES werden die Daten aus den nationalen USt-Datenbanken abgerufen.

Was ist das Online-MwSt-Informationsaustauschsystem (MIAS)?

Das MIAS ist ein System zur elektronischen Validierung der MwSt-Nummer von Wirtschaftsbeteiligten, die in der Europäischen Union für grenzübergreifende Transaktionen von Waren oder Dienstleistungen registriert sind.
Wenn Sie die MwSt-Nummer Ihres Kunden in einem anderen Mitgliedstaat / Nordirland über die MIAS-Webanwendung überprüfen wollen, wird diese Anfrage über eine sichere Verbindung an die relevante nationale Datenbank gesandt, um zu überprüfen, ob die Nummer dort verzeichnet ist. Wenn ja, wird der Status „gültig“ angezeigt. Wenn nein, wird der Status „ungültig“ angezeigt.

Je nach den jeweils geltenden Datenschutzbestimmungen geben einige Mitgliedstaaten auch Namen und Anschrift der Inhaber von MwSt-Nummern an, die in den nationalen Datenbanken verzeichnet sind.

Die USt-ID wird benötigt, wenn man z.B. EU-weite Einkäufe/Verkäufe als Unternehmen tätigt. Um zu überprüfen, ob der Käufer „umsatzsteuerpflichtig“ ist, kann die Nummer über eine API direkt bei der EU überprüft werden.

Das Suchergebnis in VIES zeigt lediglich an, ob die USt-Information vorhanden ist!
Mögliche Gründe für eine negative Rückmeldung:
Die USt-IdNr. existiert nicht.
Die USt-IdNr. ist noch nicht aktiviert.
Die Registrierung ist noch nicht abgeschlossen

Was passiert, wenn eine Umsatzsteuer-Identifikationsnummer nicht bestätigt wird?
Wenn der Kunde angibt, umsatzsteuerlich registriert zu sein, die Überprüfung über das VIES-System dies aber nicht bestätigt, kann er zusätzlich zur Steuerbehörde seines Landes eine Überprüfung anfordern. Darüber hinaus kann eine Registrierung für grenzüberschreitende Transaktionen in der EU erforderlich sein. Das Verfahren ist von Land zu Land unterschiedlich und überschreitet den Umfang dieser Handreichung hier.

Diese Änderungen werden nicht sofort in den nationalen Datenbanken und somit auch nicht in VIES aktualisiert. Möglicherweise kann die Nummer „Morgen“ verifiziert werden.

Einrichtung der Umsatzsteuer ID Überprüfung (Ust.IDnr Überprüfung) in Navision / BC365

Navision Financials 2019R2, 2.01,3.70 etc, Navision 2013R2 etc.

In diesen Versionen gibt es noch keine automatisierte Überprüfung der Umsatzsteuer ID. Aber natürlich kann auch hier diese Prüfung nachgerüstet werden. Für die RTC-Versionen finden sie die nötigen Codeunits am Ende dieses Artikels. Für die Classic Client Versionen ist SOAP nicht die erste Wahl, Insbesondere auch, da SOAP offiziell bereits abgekündigt ist (Anfang 2026 aber immer noch funktioniert!). Siehe here.
Sprechen Sie mich an, wenn Sie hier Unterstützung benötigen.
Die automatische Prüfung der Umsatzsteuernummer lässt sich in jeder Navision Version nachrüsten, dann aber eben einfacher per REST Api. Wenn Sie keinen Wartungsvertrag mehr haben (es werden für die originalen Navision/BC365 Objekte 2 neue Tabellen und 3 Codeunits benötigt), dann bekommen wir das für Sie auch direkt im Navision Standard hin!

Navision 2015, 2016, 2017

Hier aktivieren Sie die Prüfmöglichkeit, indem Sie in der Finanzbuchhaltung unter Berichtswesen Einrichtung im Feld „Ust.-IdNr. Überprüfungs-URL“ die Adresse von VIES (https://ec.europa.eu/taxation_customs/vies/services/checkVatService) eingeben:

Screenshot aus den Navision Versionen 2015, 2016, 2017 zur Eingabe der URL für die Ust-IDnr. Überprüfung mit VIES

(Hinweis: Bei Navision 2015 bin ich mir nicht ganz sicher, ich habe gerade keine Datenbank zum Prüfen bereit. Wenn diese Einrichtung in ihrem Navision 2015 fehlt, dann gilt der vorherige Absatz. Eine kurze Rückinfo würde mich freuen, dann kann ich bei Bedarf diesen Absatz korrigieren.)

Navision 2016, 2017 (und evtl. 2015?) speichert nur „Umsatzsteuer ID existiert“ und „Registrierter Name“ und „Registrierte Adresse“ im Protokoll ab. Wenn Sie hier die weiteren Felder der Nachfolgeversionen haben möchten (Bestätigte Straße, Bestätigte Postleitzahl, Bestätigter Ort und ob die bestätigte Adresse mit der bei Ihnen hinterlegten Adresse übereinstimmt), dann please contact me.. Die Antwort von VIES ist immer die gleiche, es geht also „nur“ darum diese Antwort auch bei Ihnen sichtbar zu machen.

Navision 2018, BC365 (Business Central 365)

Hier wurde die Logik sehr umfangreich geändert, hier gibt es nun einen Hintergrunddienst für die Überprüfung. Achtung! Der Wechsel erfolgte teilweise erst mit dem Hotfix 35 in Navision 2018/BC14!

Dieser Dienst wird unter „Einstellung für Mwst.-Registrierungsdienst“ aktiviert:

Um das ganze spannender zu machen, heist die eigentliche Einrichtungsseite dann aber

Screenshot von Navision 2018/BC14 bzw. Generell BC365 Business Central 365 für die Überprüfung der Umsatzsteuer ID's

„Normalerweise“ müssen Sie nicht mehr machen als diese Einrichtungen, je nach Navision´oder BC365-Version, vorzunehmen.

Sie können dann im Debitor oder im Kreditor die drei Punkte […] neben der UmsatzsteuerID anklicken, und bekommen dann das Ergebnis der Validierung zurück:

Screenshot aus Navision mit einer erfolgreichen Umsatzsteuer ID Überprüfung. Navision protokolliert gesetzeskonform jede Überprüfung

Über die Stapelverarbeitung der Ust. – IdNr. können Sie auch hunderte von Umsatzsteuernummern automatisiert prüfen lassen.

So weit, so gut… Doch was, wenn es hakt?

Sehr sehr gerne erleben gerade Anwender der Navision 2015, 2016 und 2017 Versionen, aber auch Navision 2018 und BC14 diese Fehlermeldung

Der Remoteserver hat einen Fehler zurückgegeben: (400) Ungültige Anforderung.

Die Verbindung zum Remoteservice konnte nicht hergestellt werden.
Der Remoteserver hat einen Fehler zurückgegeben: (400) Ungültige Anforderung.
Dienste-URL: https://ec.europa.eu/taxation_customs/vies/services/checkVatService

Oder, auf Englisch:
Connection to the remote service could not be established.
The remote server returned an error: (400) Bad Request.
Service URL: https://ec.europa.eu/taxation_customs/vies/services/checkVatService

Oder die Abfrage liefert einfach gar kein Ergebnis. Wenn Sie meine Korrekturen verwenden, finden Sie auf dem Navision-Dienste Server unter c:\temp die beiden Dateien VatIDrequest.txt mit der SOAP-Anfrage und VatIDresult mit der SOAP-Antwort.

If you already have mein LOG verwenden, dann finden Sie die Anfrage und die Antworten im Log.

Bei obiger Fehlermeldung müssen i.d.R. die Codeunits 248 (Timeout & ContentType), 249 (Art der XML-Analyse) aktualisiert werden, und in der 1290 muss die Unterfunktion SetContentType hinzugefügt werden.
Da Endanwender i.d.R. keinen Zugriff auf diese beiden Codeunits haben, habe ich hier auf eine Detaildarstellung verzichtet.

Tabelle 226 existiert nicht oder „Das Metadatenobjekt Table 226 wurde nicht gefunden“

Völlig kurios! Es gibt eine Navision-Version, bei der die Tabellen 226 und 227 und die zugehörigen Pages einfach nicht existieren! Ich glaube, es betrifft einzig die Version 14.0.45012.0, zumindest habe ich noch in keiner anderen version diese Fehlermeldung erhalten. Dementsprechend einfach ist die Lösung: Aus dem Cu35 (Cumulative Update) der Version 11.0.45373 die Patches für den KB375980 installieren – es reicht, wenn diese Objekte eingespielt/aktualisiert werden:
Codeunits 1751 248 249
Menü 1010
Pages 246 247 248 249
Tabelle 226, 227, 248, 249

Kumulatives Update 35 für Microsoft Dynamics NAV 2018 (Build 45373) – Microsoft-Support

Fehler bei einem Aufruf von System.Xml.XmlDocumentLoad mit folgender Meldung: ‚>‘ is an unexpected Token

Hier brauchen Sie nur in der CU248
SOAPWebServiceRequestMgt.SetContentType(‚text/xml; charset=utf-8‘);
einzubauen:

Screenshot für die VIES/UmsatzsteurID Prüfung in Navision Financials/Business Central 365 bei "Fehler bei einem Aufruf von System.Xml.XmlDocumentLoad mit folgender Meldung (unexpected token)

Tipp: Nehmen Sie gleich das längere Timeout mit, in älteren Versionen steht das noch auf 5000 (5 Sekunden). Siehe die beiden folgenden Fehlermeldungen.

<faultstring>TIMEOUT</faultstring>

Hier sind dann einfach die Abfragedienste von VIES überfordert. Probieren Sie es später einmal. Siehe auch ganz oben „Was ist VIES“.

<faultstring>MS_MAX_CONCURRENT_REQ</faultstring>

Auch hier sind die Server der EU überfordert. Sie finden here and hier sehr ausführliche Erklärungen, wie der ganze Kladderadatsch überhaupt funktioniert… oder, oftmals besser: Funktionieren sollte 🙂

Im Standard Navision bekommen Sie keine weiteren Hinweise zu diesen beiden Fehlern, Sie müssen dann einfach später noch einmal ausprobieren. Oft geht es schon wenige Minuten später.

Nachts zwischen 23:00 Uhr und 5 Uhr kann der Dienst komplett unerreichbar sein, wie es hier dokumentiert ist:

BZSt – Bestätigung ausländischer USt-IdNrn

Fehlerbehebungen durch KI Künstliche Intelligenz

Fehler bei Null-Werten: In älteren Versionen (z. B. NAV 2009/5.0) kann der Bericht 11007 (VAT-Vies Declaration Tax-DE) Null-Werte nicht korrekt verarbeiten. Es wird ein Hotfix benötigt.

Mhmnjaja… Der „Tipp“ ist rein technisch korrekt… nur leider hat das absolut nichts mit der MwSt ID Überprüfung zu tun, der erwähnte Bericht 11007 kann nicht einmal die erstellte XML Datei per SOAP oder RestAPi versenden 🙂
Sie finden den Hotfix hier:
The „VAT-Vies Declaration Tax-DE“ report (11007) does not handle the value of zero correctly in the German version of Microsoft Dynamics NAV – Microsoft Support

Authentifizierung: Bei der Nutzung von API-Keys (falls erforderlich) müssen Benutzername und Passwort im CA (Certificate Authority) korrekt hinterlegt sein.

VIES verlangt keinerlei Authentifizierung.

Auch ansonsten sind die Antworten von z.B. Copilot eher … na ja. Um nicht das Wort „Müll“ zu verwenden, schreibe ich mal „beschränkt hilfreich“ 🙂

Meine Meinung über KI Künstliche Intelligenz bei Navision habe ich ja schon here kundgetan. Aber die Bilderfunktion von Copilot, die benutze ich schon gerne! Auch dieses Beitragsbild hier ist mit Copilot entstanden. Ansonsten habe ich aber derzeit (Februar 2026) noch keinerlei Angst, meinen Job an irgendein LLM/irgendeine KI wie ChatGPT oder eine andere zu verlieren 🙂

Aktualisierte Codeunits aus der Version 2016

Wenn Sie Zugriff auf die Codeunits 248, 249 und 1290 haben, dann liste ich Ihnen hier mal die korrigierten Inhalte auf, Sie wissen dann ja schon, was zu tun ist 🙂

OBJECT Codeunit 248 VAT Lookup Ext. Data Hndl
{
 OBJECT-PROPERTIES
 {
 Date=09.02.26;
 Time=13:19:58;
 Modified=Yes;
 Version List=NAVW19.00;
 }
 PROPERTIES
 {
 TableNo=249;
 Permissions=TableData 249=rimd;
 OnRun=BEGIN
 VATRegistrationLog := Rec;

 LookupVatRegistrationFromWebService(TRUE);

 Rec := VATRegistrationLog;
 END;

 }
 CODE
 {
 VAR
 NamespaceTxt@1003 : TextConst '@@@={Locked};DEU=urn:ec.europa.eu:taxud:vies:services:checkVat:types;ENU=urn:ec.europa.eu:taxud:vies:services:checkVat:types';
 VATRegistrationLog@1000 : Record 249;
 VATRegistrationLogMgt@1002 : Codeunit 249;
 VatRegNrValidationWebServiceURLTxt@1001 : TextConst '@@@={Locked};DEU=http://ec.europa.eu/taxation_customs/vies/services/checkVatService;ENU=http://ec.europa.eu/taxation_customs/vies/services/checkVatService';
 MissingWebServiceURLErr@1004 : TextConst 'DEU=Die USt-IdNr. šberprfungs-URL ist im Fenster "Finanzbuchhaltung Einrichtung" nicht angegeben.;ENU=The VAT Registration No. Validation URL is not specified in the General Ledger Setup window.';

 LOCAL PROCEDURE LookupVatRegistrationFromWebService@7(ShowErrors@1000 : Boolean);
 VAR
 RequestBodyTempBlob@1002 : Record 99008535;
 BEGIN
 RequestBodyTempBlob.INIT;

 SendRequestToVatRegistrationService(RequestBodyTempBlob,ShowErrors);

 RequestBodyTempBlob.Blob.EXPORT('c:\temp\VatIDresult.txt');

 InsertLogEntry(RequestBodyTempBlob);

 COMMIT;
 END;

 LOCAL PROCEDURE SendRequestToVatRegistrationService@1(VAR BodyTempBlob@1004 : Record 99008535;ShowErrors@1003 : Boolean);
 VAR
 GeneralLedgerSetup@1005 : Record 98;
 SOAPWebServiceRequestMgt@1001 : Codeunit 1290;
 ResponseInStream@1002 : InStream;
 InStream@1006 : InStream;
 ResponseOutStream@1008 : OutStream;
 BEGIN
 PrepareSOAPRequestBody(BodyTempBlob);

 BodyTempBlob.Blob.CREATEINSTREAM(InStream);

 GeneralLedgerSetup.GET;
 IF GeneralLedgerSetup."VAT Reg. No. Validation URL" = '' THEN
 ERROR(MissingWebServiceURLErr);
 SOAPWebServiceRequestMgt.SetGlobals(InStream,GeneralLedgerSetup."VAT Reg. No. Validation URL",'','');
 SOAPWebServiceRequestMgt.DisableHttpsCheck;
 SOAPWebServiceRequestMgt.SetTimeout(60000);
 SOAPWebServiceRequestMgt.SetContentType('text/xml; charset=utf-8');
 IF SOAPWebServiceRequestMgt.SendRequestToWebService THEN BEGIN
 SOAPWebServiceRequestMgt.GetResponseContent(ResponseInStream);

 BodyTempBlob.Blob.CREATEOUTSTREAM(ResponseOutStream);
 COPYSTREAM(ResponseOutStream,ResponseInStream);
 END ELSE
 IF ShowErrors THEN
 SOAPWebServiceRequestMgt.ProcessFaultResponse('');
 END;

 LOCAL PROCEDURE PrepareSOAPRequestBody@12(VAR BodyTempBlob@1000 : Record 99008535);
 VAR
 XMLDOMMgt@1006 : Codeunit 6224;
 BodyContentInputStream@1004 : InStream;
 BodyContentOutputStream@1005 : OutStream;
 BodyContentXmlDoc@1003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";
 EnvelopeXmlNode@1012 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";
 CreatedXmlNode@1001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";
 BEGIN
 BodyTempBlob.Blob.CREATEINSTREAM(BodyContentInputStream);
 BodyContentXmlDoc := BodyContentXmlDoc.XmlDocument;

 XMLDOMMgt.AddRootElementWithPrefix(BodyContentXmlDoc,'checkVatApprox','',NamespaceTxt,EnvelopeXmlNode);
 XMLDOMMgt.AddElement(EnvelopeXmlNode,'countryCode',VATRegistrationLog.GetCountryCode,NamespaceTxt,CreatedXmlNode);
 XMLDOMMgt.AddElement(EnvelopeXmlNode,'vatNumber',VATRegistrationLog.GetVATRegNo,NamespaceTxt,CreatedXmlNode);
 XMLDOMMgt.AddElement(
 EnvelopeXmlNode,'requesterCountryCode',VATRegistrationLog.GetCountryCode,NamespaceTxt,CreatedXmlNode);
 XMLDOMMgt.AddElement(
 EnvelopeXmlNode,'requesterVatNumber',VATRegistrationLog.GetVATRegNo,NamespaceTxt,CreatedXmlNode);


 CLEAR(BodyTempBlob.Blob);
 BodyTempBlob.Blob.CREATEOUTSTREAM(BodyContentOutputStream);
 BodyContentXmlDoc.Save(BodyContentOutputStream);
 BodyTempBlob.Blob.EXPORT('c:\temp\VatIDrequest.txt');
 END;

 LOCAL PROCEDURE InsertLogEntry@4(ResponseBodyTempBlob@1000 : Record 99008535);
 VAR
 XMLDocOut@1012 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";
 InStream@1009 : InStream;
 BEGIN
 ResponseBodyTempBlob.Blob.CREATEINSTREAM(InStream);
 XMLDocOut := XMLDocOut.XmlDocument;
 XMLDocOut.Load(InStream);

 VATRegistrationLogMgt.LogVerification(VATRegistrationLog,XMLDocOut,NamespaceTxt);
 END;

 PROCEDURE GetVATRegNrValidationWebServiceURL@5() : Text[250];
 BEGIN
 EXIT(VatRegNrValidationWebServiceURLTxt);
 END;

 BEGIN
 END.
 }
}

OBJECT Codeunit 249 VAT Registration Log Mgt.
{
 OBJECT-PROPERTIES
 {
 Date=09.02.26;
 Time=14:57:32;
 Modified=Yes;
 Version List=NAVW19.00;
 }
 PROPERTIES
 {
 Permissions=TableData 249=rimd;
 OnRun=BEGIN
 END;

 }
 CODE
 {

 PROCEDURE LogCustomer@1(Customer@1000 : Record 18);
 VAR
 VATRegistrationLog@1001 : Record 249;
 CountryCode@1002 : Code[10];
 BEGIN
 CountryCode := GetCountryCode(Customer."Country/Region Code");
 IF NOT IsEUCountry(CountryCode) THEN
 EXIT;

 InsertVATRegistrationLog(
 Customer."VAT Registration No.",CountryCode,VATRegistrationLog."Account Type"::Customer,Customer."No.");
 END;

 PROCEDURE LogVendor@2(Vendor@1002 : Record 23);
 VAR
 VATRegistrationLog@1001 : Record 249;
 CountryCode@1000 : Code[10];
 BEGIN
 CountryCode := GetCountryCode(Vendor."Country/Region Code");
 IF NOT IsEUCountry(CountryCode) THEN
 EXIT;

 InsertVATRegistrationLog(
 Vendor."VAT Registration No.",CountryCode,VATRegistrationLog."Account Type"::Vendor,Vendor."No.");
 END;

 PROCEDURE LogContact@8(Contact@1000 : Record 5050);
 VAR
 VATRegistrationLog@1001 : Record 249;
 CountryCode@1002 : Code[10];
 BEGIN
 CountryCode := GetCountryCode(Contact."Country/Region Code");
 IF NOT IsEUCountry(CountryCode) THEN
 EXIT;

 InsertVATRegistrationLog(
 Contact."VAT Registration No.",CountryCode,VATRegistrationLog."Account Type"::Contact,Contact."No.");
 END;

 PROCEDURE LogVerification@3(VAR VATRegistrationLog@1000 : Record 249;XMLDoc@1001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";Namespace@1003 : Text);
 VAR
 XMLDOMMgt@1002 : Codeunit 6224;
 FoundXmlNode@1004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";
 NamePathTxt@5326066 : TextConst '@@@={Locked};DEU=descendant::vat:traderName;ENU=descendant::vat:traderName';
 AddressPathTxt@5326065 : TextConst '@@@={Locked};DEU=descendant::vat:traderAddress;ENU=descendant::vat:traderAddress';
 PostcodePathTxt@5326064 : TextConst '@@@={Locked};DEU=descendant::vat:traderPostcode;ENU=descendant::vat:traderPostcode';
 StreetPathTxt@5326063 : TextConst '@@@={Locked};DEU=descendant::vat:traderStreet;ENU=descendant::vat:traderStreet';
 CityPathTxt@5326062 : TextConst '@@@={Locked};DEU=descendant::vat:traderCity;ENU=descendant::vat:traderCity';
 ValidPathTxt@5326070 : TextConst '@@@={Locked};DEU=descendant::vat:valid;ENU=descendant::vat:valid';
 RequestIdPathTxt@5326069 : TextConst 'DEU=descendant::vat:requestIdentifier';
 BEGIN
 IF NOT XMLDOMMgt.FindNodeWithNamespace(XMLDoc.DocumentElement,ValidPathTxt,'vat',Namespace,FoundXmlNode) THEN
 EXIT;

 CASE LOWERCASE(FoundXmlNode.InnerText) OF
 'true':
 BEGIN
 VATRegistrationLog."Entry No." := 0;
 VATRegistrationLog.Status := VATRegistrationLog.Status::Valid;
 VATRegistrationLog."Verified Date" := CURRENTDATETIME;
 VATRegistrationLog."User ID" := USERID;

 VATRegistrationLog.dmssysDocumentNo := COPYSTR(ExtractValue(RequestIdPathTxt,XMLDoc,Namespace),1,
 MAXSTRLEN(VATRegistrationLog.dmssysDocumentNo));

 //XMLDOMMgt.FindNodeWithNamespace(XMLDoc.DocumentElement,NamePathTxt,'vat',Namespace,FoundXmlNode);
 VATRegistrationLog."Verified Name" := ExtractValue(NamePathTxt,XMLDoc,Namespace);
 //COPYSTR(FoundXmlNode.InnerText,1,MAXSTRLEN(VATRegistrationLog."Verified Name"));
 //XMLDOMMgt.FindNodeWithNamespace(XMLDoc.DocumentElement,AddressPathTxt,'vat',Namespace,FoundXmlNode);
 VATRegistrationLog."Verified Address" := ExtractValue(AddressPathTxt,XMLDoc,Namespace);
 //COPYSTR(FoundXmlNode.InnerText,1,MAXSTRLEN(VATRegistrationLog."Verified Address"));

 VATRegistrationLog.INSERT(TRUE);
 END;
 'false':
 BEGIN
 VATRegistrationLog."Entry No." := 0;
 VATRegistrationLog."Verified Date" := CURRENTDATETIME;
 VATRegistrationLog.Status := VATRegistrationLog.Status::Invalid;
 VATRegistrationLog."User ID" := USERID;
 VATRegistrationLog."Verified Name" := '';
 VATRegistrationLog."Verified Address" := '';

 VATRegistrationLog.INSERT(TRUE);
 END;
 END;
 END;

 LOCAL PROCEDURE LogUnloggedVATRegistrationNumbers@10();
 VAR
 Customer@1000 : Record 18;
 Vendor@1001 : Record 23;
 Contact@1002 : Record 5050;
 VATRegistrationLog@1003 : Record 249;
 BEGIN
 Customer.SETFILTER("VAT Registration No.",'<>%1','');
 IF Customer.FINDSET THEN
 REPEAT
 VATRegistrationLog.SETRANGE("VAT Registration No.",Customer."VAT Registration No.");
 IF VATRegistrationLog.ISEMPTY THEN
 LogCustomer(Customer);
 UNTIL Customer.NEXT = 0;

 Vendor.SETFILTER("VAT Registration No.",'<>%1','');
 IF Vendor.FINDSET THEN
 REPEAT
 VATRegistrationLog.SETRANGE("VAT Registration No.",Vendor."VAT Registration No.");
 IF VATRegistrationLog.ISEMPTY THEN
 LogVendor(Vendor);
 UNTIL Vendor.NEXT = 0;

 Contact.SETFILTER("VAT Registration No.",'<>%1','');
 IF Contact.FINDSET THEN
 REPEAT
 VATRegistrationLog.SETRANGE("VAT Registration No.",Contact."VAT Registration No.");
 IF VATRegistrationLog.ISEMPTY THEN
 LogContact(Contact);
 UNTIL Contact.NEXT = 0;

 COMMIT;
 END;

 LOCAL PROCEDURE InsertVATRegistrationLog@16(VATRegNo@1002 : Text[20];CountryCode@1000 : Code[10];AccountType@1001 : Option;AccountNo@1003 : Code[20]);
 VAR
 VATRegistrationLog@1004 : Record 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 INIT;
 "VAT Registration No." := VATRegNo;
 "Country/Region Code" := CountryCode;
 "Account Type" := AccountType;
 "Account No." := AccountNo;
 "User ID" := USERID;
 INSERT(TRUE);
 END;
 END;

 PROCEDURE DeleteCustomerLog@4(Customer@1000 : Record 18);
 VAR
 VATRegistrationLog@1001 : Record 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 SETRANGE("Account Type","Account Type"::Customer);
 SETRANGE("Account No.",Customer."No.");
 DELETEALL;
 END;
 END;

 PROCEDURE DeleteVendorLog@5(Vendor@1000 : Record 23);
 VAR
 VATRegistrationLog@1001 : Record 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 SETRANGE("Account Type","Account Type"::Vendor);
 SETRANGE("Account No.",Vendor."No.");
 DELETEALL;
 END;
 END;

 PROCEDURE DeleteContactLog@9(Contact@1000 : Record 5050);
 VAR
 VATRegistrationLog@1001 : Record 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 SETRANGE("Account Type","Account Type"::Contact);
 SETRANGE("Account No.",Contact."No.");
 DELETEALL;
 END;
 END;

 PROCEDURE AssistEditCustomerVATReg@7(Customer@1000 : Record 18);
 VAR
 VATRegistrationLog@1001 : Record 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 IF ISEMPTY THEN
 LogUnloggedVATRegistrationNumbers;
 SETRANGE("Account Type","Account Type"::Customer);
 SETRANGE("Account No.",Customer."No.");
 PAGE.RUNMODAL(PAGE::"VAT Registration Log",VATRegistrationLog);
 END;
 END;

 PROCEDURE AssistEditVendorVATReg@6(Vendor@1001 : Record 23);
 VAR
 VATRegistrationLog@1000 : Record 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 IF ISEMPTY THEN
 LogUnloggedVATRegistrationNumbers;
 SETRANGE("Account Type","Account Type"::Vendor);
 SETRANGE("Account No.",Vendor."No.");
 PAGE.RUNMODAL(PAGE::"VAT Registration Log",VATRegistrationLog);
 END;
 END;

 PROCEDURE AssistEditContactVATReg@11(Contact@1001 : Record 5050);
 VAR
 VATRegistrationLog@1000 : Record 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 IF ISEMPTY THEN
 LogUnloggedVATRegistrationNumbers;
 SETRANGE("Account Type","Account Type"::Contact);
 SETRANGE("Account No.",Contact."No.");
 PAGE.RUNMODAL(PAGE::"VAT Registration Log",VATRegistrationLog);
 END;
 END;

 LOCAL PROCEDURE IsEUCountry@12(CountryCode@1000 : Code[10]) : Boolean;
 VAR
 CountryRegion@1001 : Record 9;
 BEGIN
 IF CountryCode <> '' THEN
 IF CountryRegion.GET(CountryCode) THEN
 EXIT(CountryRegion."EU Country/Region Code" <> '');

 EXIT(FALSE);
 END;

 LOCAL PROCEDURE GetCountryCode@13(CountryCode@1000 : Code[10]) : Code[10];
 VAR
 CompanyInformation@1001 : Record 79;
 BEGIN
 IF CountryCode <> '' THEN
 EXIT(CountryCode);

 CompanyInformation.GET;
 EXIT(CompanyInformation."Country/Region Code");
 END;

 LOCAL PROCEDURE ExtractValue@5326062(Xpath@5326062 : Text;XMLdoc@5326063 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";NameSpace@5326064 : Text) : Text;
 VAR
 XMLDOMMgt@5326066 : Codeunit 6224;
 FoundXmlNode@5326065 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";
 BEGIN
 IF NOT XMLDOMMgt.FindNodeWithNamespace(XMLdoc.DocumentElement,Xpath,'vat',NameSpace,FoundXmlNode) THEN
 EXIT('');
 EXIT(FoundXmlNode.InnerText);
 END;

 BEGIN
 END.
 }
}

OBJECT Codeunit 1290 SOAP Web Service Request Mgt.
{
 OBJECT-PROPERTIES
 {
 Date=09.02.26;
 Time=13:09:26;
 Modified=Yes;
 Version List=NAVW19.00;
 }
 PROPERTIES
 {
 OnRun=BEGIN
 END;

 }
 CODE
 {
 VAR
 BodyPathTxt@1001 : TextConst '@@@={Locked};DEU=/soap:Envelope/soap:Body;ENU=/soap:Envelope/soap:Body';
 ContentTypeTxt@1000 : TextConst '@@@={Locked};DEU="multipart/form-data; charset=utf-8";ENU="multipart/form-data; charset=utf-8"';
 NewContentTypeTxt@5326062 : TextConst '@@@={Locked};DEU="text/xml; charset=utf-8";ENU="multipart/form-data; charset=utf-8"';
 FaultStringXmlPathTxt@1012 : TextConst '@@@={Locked};DEU=/soap:Envelope/soap:Body/soap:Fault/faultstring;ENU=/soap:Envelope/soap:Body/soap:Fault/faultstring';
 NoRequestBodyErr@1015 : TextConst 'DEU=Der Anfragetext ist nicht festgelegt.;ENU=The request body is not set.';
 NoServiceAddressErr@1017 : TextConst 'DEU=Die Webdienst-URI ist nicht festgelegt.;ENU=The web service URI is not set.';
 ExpectedResponseNotReceivedErr@1009 : TextConst 'DEU=Die erwarteten Daten wurden nicht vom Webdienst empfangen.;ENU=The expected data was not received from the web service.';
 SchemaNamespaceTxt@1007 : TextConst '@@@={Locked};DEU=http://www.w3.org/2001/XMLSchema;ENU=http://www.w3.org/2001/XMLSchema';
 SchemaInstanceNamespaceTxt@1006 : TextConst '@@@={Locked};DEU=http://www.w3.org/2001/XMLSchema-instance;ENU=http://www.w3.org/2001/XMLSchema-instance';
 SecurityUtilityNamespaceTxt@1003 : TextConst '@@@={Locked};DEU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd;ENU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd';
 SecurityExtensionNamespaceTxt@1004 : TextConst '@@@={Locked};DEU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd;ENU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
 SoapNamespaceTxt@1002 : TextConst '@@@={Locked};DEU=http://schemas.xmlsoap.org/soap/envelope/;ENU=http://schemas.xmlsoap.org/soap/envelope/';
 UsernameTokenNamepsaceTxt@1005 : TextConst '@@@={Locked};DEU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText;ENU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText';
 TempDebugLogTempBlob@1010 : TEMPORARY Record 99008535;
 ResponseBodyTempBlob@1020 : Record 99008535;
 ResponseInStreamTempBlob@1019 : Record 99008535;
 Trace@1016 : Codeunit 1292;
 GlobalRequestBodyInStream@1022 : InStream;
 HttpWebResponse@1021 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebResponse";
 GlobalPassword@1013 : Text;
 GlobalURL@1014 : Text;
 GlobalUsername@1008 : Text;
 TraceLogEnabled@1011 : Boolean;
 GlobalTimeout@1024 : Integer;
 InternalErr@1028 : TextConst 'DEU=Der Remoteservice hat folgende Fehlermeldung zurckgegeben:\\;ENU=The remote service has returned the following error message:\\';
 GlobalSkipCheckHttps@1018 : Boolean;
 GlobalProgressDialogEnabled@1023 : Boolean;
 GlobalContentType@5326063 : Text;

 [TryFunction]
 PROCEDURE SendRequestToWebService@17();
 VAR
 WebRequestHelper@1000 : Codeunit 1299;
 HttpWebRequest@1007 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebRequest";
 HttpStatusCode@1002 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpStatusCode";
 ResponseHeaders@1001 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Collections.Specialized.NameValueCollection";
 ResponseInStream@1006 : InStream;
 BEGIN
 CheckGlobals;
 BuildWebRequest(GlobalURL,HttpWebRequest);

 ResponseInStreamTempBlob.INIT;
 ResponseInStreamTempBlob.Blob.CREATEINSTREAM(ResponseInStream);
 CreateSoapRequest(HttpWebRequest.GetRequestStream,GlobalRequestBodyInStream,GlobalUsername,GlobalPassword);
 WebRequestHelper.GetWebResponse(HttpWebRequest,HttpWebResponse,ResponseInStream,
 HttpStatusCode,ResponseHeaders,GlobalProgressDialogEnabled);
 ExtractContentFromResponse(ResponseInStream,ResponseBodyTempBlob);
 END;

 LOCAL PROCEDURE BuildWebRequest@3(ServiceUrl@1000 : Text;VAR HttpWebRequest@1002 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebRequest");
 VAR
 DecompressionMethods@1003 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.DecompressionMethods";
 BEGIN
 HttpWebRequest := HttpWebRequest.Create(ServiceUrl);
 HttpWebRequest.Method := 'POST';
 HttpWebRequest.KeepAlive := TRUE;
 HttpWebRequest.AllowAutoRedirect := TRUE;
 HttpWebRequest.UseDefaultCredentials := TRUE;
 IF GlobalContentType = '' THEN
 GlobalContentType := ContentTypeTxt;
 HttpWebRequest.ContentType := GlobalContentType;
 IF GlobalTimeout <= 0 THEN
 GlobalTimeout := 600000;
 HttpWebRequest.Timeout := GlobalTimeout;
 HttpWebRequest.AutomaticDecompression := DecompressionMethods.GZip;
 END;

 LOCAL PROCEDURE CreateSoapRequest@2(RequestOutStream@1000 : OutStream;BodyContentInStream@1004 : InStream;Username@1003 : Text;Password@1005 : Text);
 VAR
 XmlDoc@1007 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";
 BodyXmlNode@1016 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";
 BEGIN
 CreateEnvelope(XmlDoc,BodyXmlNode,Username,Password);
 AddBodyToEnvelope(BodyXmlNode,BodyContentInStream);
 XmlDoc.Save(RequestOutStream);
 TraceLogXmlDocToTempFile(XmlDoc,'FullRequest');
 END;

 LOCAL PROCEDURE CreateEnvelope@11(VAR XmlDoc@1011 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";VAR BodyXmlNode@1001 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";Username@1009 : Text;Password@1010 : Text);
 VAR
 XMLDOMMgt@1000 : Codeunit 6224;
 EnvelopeXmlNode@1007 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";
 HeaderXmlNode@1006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";
 SecurityXmlNode@1005 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";
 UsernameTokenXmlNode@1004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";
 TempXmlNode@1003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";
 PasswordXmlNode@1002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";
 BEGIN
 XmlDoc := XmlDoc.XmlDocument;
 WITH XMLDOMMgt DO BEGIN
 AddRootElementWithPrefix(XmlDoc,'Envelope','s',SoapNamespaceTxt,EnvelopeXmlNode);
 AddAttribute(EnvelopeXmlNode,'xmlns:u',SecurityUtilityNamespaceTxt);

 AddElementWithPrefix(EnvelopeXmlNode,'Header','','s',SoapNamespaceTxt,HeaderXmlNode);

 IF (Username <> '') OR (Password <> '') THEN BEGIN
 AddElementWithPrefix(HeaderXmlNode,'Security','','o',SecurityExtensionNamespaceTxt,SecurityXmlNode);
 AddAttributeWithPrefix(SecurityXmlNode,'mustUnderstand','s',SoapNamespaceTxt,'1');

 AddElementWithPrefix(SecurityXmlNode,'UsernameToken','','o',SecurityExtensionNamespaceTxt,UsernameTokenXmlNode);
 AddAttributeWithPrefix(UsernameTokenXmlNode,'Id','u',SecurityUtilityNamespaceTxt,CreateUUID);

 AddElementWithPrefix(UsernameTokenXmlNode,'Username',Username,'o',SecurityExtensionNamespaceTxt,TempXmlNode);
 AddElementWithPrefix(UsernameTokenXmlNode,'Password',Password,'o',SecurityExtensionNamespaceTxt,PasswordXmlNode);
 AddAttribute(PasswordXmlNode,'Type',UsernameTokenNamepsaceTxt);
 END;

 AddElementWithPrefix(EnvelopeXmlNode,'Body','','s',SoapNamespaceTxt,BodyXmlNode);
 AddAttribute(BodyXmlNode,'xmlns:xsi',SchemaInstanceNamespaceTxt);
 AddAttribute(BodyXmlNode,'xmlns:xsd',SchemaNamespaceTxt);
 END;
 END;

 LOCAL PROCEDURE CreateUUID@9() : Text;
 BEGIN
 EXIT('uuid-' + DELCHR(LOWERCASE(FORMAT(CREATEGUID)),'=','{}'));
 END;

 LOCAL PROCEDURE AddBodyToEnvelope@12(VAR BodyXmlNode@1005 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";BodyInStream@1000 : InStream);
 VAR
 BodyContentXmlDoc@1003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";
 BEGIN
 BodyContentXmlDoc := BodyContentXmlDoc.XmlDocument;
 BodyContentXmlDoc.Load(BodyInStream);
 TraceLogXmlDocToTempFile(BodyContentXmlDoc,'RequestBodyContent');

 BodyXmlNode.AppendChild(BodyXmlNode.OwnerDocument.ImportNode(BodyContentXmlDoc.DocumentElement,TRUE));
 END;

 LOCAL PROCEDURE ExtractContentFromResponse@4(ResponseInStream@1000 : InStream;VAR BodyTempBlob@1002 : Record 99008535);
 VAR
 XMLDOMMgt@1005 : Codeunit 6224;
 ResponseXmlDoc@1003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";
 ResponseBodyXMLDoc@1004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";
 ResponseBodyXmlNode@1006 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";
 BodyOutStream@1007 : OutStream;
 Found@1001 : Boolean;
 BEGIN
 TraceLogStreamToTempFile(ResponseInStream,'FullResponse',TempDebugLogTempBlob);
 ResponseXmlDoc := ResponseXmlDoc.XmlDocument;
 ResponseXmlDoc.Load(ResponseInStream);

 Found := XMLDOMMgt.FindNodeWithNamespace(ResponseXmlDoc.DocumentElement,BodyPathTxt,'soap',SoapNamespaceTxt,ResponseBodyXmlNode);
 IF NOT Found THEN
 ERROR(ExpectedResponseNotReceivedErr);

 ResponseBodyXMLDoc := ResponseBodyXMLDoc.XmlDocument;
 ResponseBodyXMLDoc.AppendChild(ResponseBodyXMLDoc.ImportNode(ResponseBodyXmlNode.FirstChild,TRUE));

 BodyTempBlob.Blob.CREATEOUTSTREAM(BodyOutStream);
 ResponseBodyXMLDoc.Save(BodyOutStream);
 TraceLogXmlDocToTempFile(ResponseBodyXMLDoc,'ResponseBodyContent');
 END;

 PROCEDURE GetResponseContent@22(VAR ResponseBodyInStream@1000 : InStream);
 BEGIN
 ResponseBodyTempBlob.Blob.CREATEINSTREAM(ResponseBodyInStream);
 END;

 PROCEDURE ProcessFaultResponse@15(SupportInfo@1001 : Text);
 VAR
 WebRequestHelper@1002 : Codeunit 1299;
 XMLDOMMgt@1006 : Codeunit 6224;
 WebException@1005 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.WebException";
 XmlDoc@1003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";
 ResponseInputStream@1000 : InStream;
 ErrorText@1009 : Text;
 ServiceURL@1010 : Text;
 BEGIN
 ErrorText := WebRequestHelper.GetWebResponseError(WebException,ServiceURL);

 IF ErrorText <> '' THEN
 ERROR(ErrorText);

 ResponseInputStream := WebException.Response.GetResponseStream;
 IF TraceLogEnabled THEN
 Trace.LogStreamToTempFile(ResponseInputStream,'WebExceptionResponse',TempDebugLogTempBlob);

 XmlDoc := XmlDoc.XmlDocument;
 XmlDoc.Load(ResponseInputStream);

 ErrorText := XMLDOMMgt.FindNodeTextWithNamespace(XmlDoc.DocumentElement,FaultStringXmlPathTxt,'soap',SoapNamespaceTxt);
 IF ErrorText = '' THEN
 ErrorText := WebException.Message;
 ErrorText := InternalErr + ErrorText + ServiceURL;

 IF SupportInfo <> '' THEN
 ErrorText += '\\' + SupportInfo;

 ERROR(ErrorText);
 END;

 PROCEDURE SetGlobals@10(RequestBodyInStream@1000 : InStream;URL@1001 : Text;Username@1002 : Text;Password@1003 : Text);
 BEGIN
 GlobalRequestBodyInStream := RequestBodyInStream;

 GlobalSkipCheckHttps := FALSE;

 GlobalURL := URL;
 GlobalUsername := Username;
 GlobalPassword := Password;

 GlobalProgressDialogEnabled := TRUE;

 TraceLogEnabled := FALSE;
 END;

 PROCEDURE SetTimeout@7(NewTimeout@1000 : Integer);
 BEGIN
 GlobalTimeout := NewTimeout;
 END;

 PROCEDURE SetContentType@5326062(NewContentType@5326062 : Text);
 BEGIN
 GlobalContentType := NewContentType;
 END;

 LOCAL PROCEDURE CheckGlobals@14();
 VAR
 WebRequestHelper@1000 : Codeunit 1299;
 BEGIN
 IF GlobalRequestBodyInStream.EOS THEN
 ERROR(NoRequestBodyErr);

 IF GlobalURL = '' THEN
 ERROR(NoServiceAddressErr);

 IF GlobalSkipCheckHttps THEN
 WebRequestHelper.IsValidUri(GlobalURL)
 ELSE
 WebRequestHelper.IsSecureHttpUrl(GlobalURL);
 END;

 LOCAL PROCEDURE TraceLogStreamToTempFile@33(VAR ToLogInStream@1000 : InStream;Name@1005 : Text;VAR TraceLogTempBlob@1001 : Record 99008535);
 BEGIN
 IF TraceLogEnabled THEN
 Trace.LogStreamToTempFile(ToLogInStream,Name,TraceLogTempBlob);
 END;

 LOCAL PROCEDURE TraceLogXmlDocToTempFile@67(VAR XmlDoc@1004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";Name@1005 : Text);
 BEGIN
 IF TraceLogEnabled THEN
 Trace.LogXmlDocToTempFile(XmlDoc,Name);
 END;

 PROCEDURE SetTraceMode@1(NewTraceMode@1000 : Boolean);
 BEGIN
 TraceLogEnabled := NewTraceMode;
 END;

 PROCEDURE DisableHttpsCheck@13();
 BEGIN
 GlobalSkipCheckHttps := TRUE;
 END;

 PROCEDURE DisableProgressDialog@18();
 BEGIN
 GlobalProgressDialogEnabled := FALSE;
 END;

 BEGIN
 END.
 }
}