OBJECT Codeunit 70090 Web Service Request Mgt.
{
  OBJECT-PROPERTIES
  {
    Date=15.10.14;
    Time=03:35:15;
    Modified=Yes;
    Version List=NAVW18.00;
  }
  PROPERTIES
  {
    OnRun=BEGIN
            CheckGlobals;
            SendRequestToWebService(GlobalRequestBodyInStream,GlobalURL,GlobalUsername,GlobalPassword);
          END;

  }
  CODE
  {
    VAR
      BodyPathTxt@1001 : TextConst '@@@={Locked};ENU=/soap:Envelope/soap:Body;DEA=/soap:Envelope/soap:Body';
      ContentTypeTxt@1000 : TextConst '@@@={Locked};ENU="multipart/form-data; charset=utf-8";DEA="multipart/form-data; charset=utf-8"';
      FaultStringXmlPathTxt@1012 : TextConst '@@@={Locked};ENU=/soap:Envelope/soap:Body/soap:Fault/faultstring;DEA=/soap:Envelope/soap:Body/soap:Fault/faultstring';
      NoRequestBodyErr@1015 : TextConst 'ENU=The request body is not set.;DEA=Der Anfragetext ist nicht festgelegt.';
      NoServiceAddressErr@1017 : TextConst 'ENU=The web service URI is not set.;DEA=Die Webdienst-URI ist nicht festgelegt.';
      ExpectedResponseNotReceivedErr@1009 : TextConst 'ENU=The expected data was not received from the web service.;DEA=Die erwarteten Daten wurden nicht vom Webdienst empfangen.';
      SchemaNamespaceTxt@1007 : TextConst '@@@={Locked};ENU=http://www.w3.org/2001/XMLSchema;DEA=http://www.w3.org/2001/XMLSchema';
      SchemaInstanceNamespaceTxt@1006 : TextConst '@@@={Locked};ENU=http://www.w3.org/2001/XMLSchema-instance;DEA=http://www.w3.org/2001/XMLSchema-instance';
      SecurityUtilityNamespaceTxt@1003 : TextConst '@@@={Locked};ENU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd;DEA=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd';
      SecurityExtensionNamespaceTxt@1004 : TextConst '@@@={Locked};ENU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd;DEA=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
      SoapNamespaceTxt@1002 : TextConst '@@@={Locked};ENU=http://schemas.xmlsoap.org/soap/envelope/;DEA=http://schemas.xmlsoap.org/soap/envelope/';
      UsernameTokenNamepsaceTxt@1005 : TextConst '@@@={Locked};ENU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText;DEA=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;
      Trace@1016 : Codeunit 70092;
      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;
      InvalidUrlErr@1025 : TextConst 'ENU=The URL is not valid.;DEA=Die URL ist ungltig.';
      ConnectionErr@1027 : TextConst 'ENU=Connection to the remote service could not be established.\\;DEA=Die Verbindung zum Remoteservice konnte nicht hergestellt werden.\\';
      InternalErr@1028 : TextConst 'ENU=The remote service has returned the following error message:\\;DEA=Der Remoteservice hat folgende Fehlermeldung zurckgegeben:\\';
      NonSecureUrlErr@1026 : TextConst 'ENU=The URL is not secure.;DEA=Die URL ist nicht sicher.';
      ServiceURLTxt@1029 : TextConst 'ENU=\\Service URL: %1.;DEA=\\Service-URL: %1.';
      GlobalSkipCheckHttps@1018 : Boolean;
      GlobalProgressDialogEnabled@1023 : Boolean;
      ProcessingWindowMsg@1019 : TextConst 'ENU=Please wait while the server is processing your request.\This may take several minutes.;DEA=Bitte warten Sie, bis der Server Ihre Anfrage verarbeitet.\Dies kann mehrere Minuten dauern.';

    LOCAL PROCEDURE SendRequestToWebService@17(BodyContentInStream@1002 : InStream;URI@1003 : Text;Username@1004 : Text;Password@1005 : Text);
    VAR
      HttpWebRequest@1007 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebRequest";
      ResponseInStream@1006 : InStream;
    BEGIN
      BuildWebRequest(URI,HttpWebRequest);
      CreateSoapRequest(HttpWebRequest.GetRequestStream,BodyContentInStream,Username,Password);
      GetWebResponse(HttpWebRequest,ResponseInStream);
      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");
    BEGIN
      HttpWebRequest := HttpWebRequest.Create(ServiceUrl);
      HttpWebRequest.Method := 'POST';
      HttpWebRequest.KeepAlive := TRUE;
      HttpWebRequest.AllowAutoRedirect := TRUE;
      HttpWebRequest.UseDefaultCredentials := TRUE;
      HttpWebRequest.ContentType := ContentTypeTxt;
      IF GlobalTimeout <= 0 THEN
        GlobalTimeout := 600000;
      HttpWebRequest.Timeout := GlobalTimeout;
    END;

    LOCAL PROCEDURE GetWebResponse@6(VAR HttpWebRequest@1001 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebRequest";VAR ResponseInStream@1002 : InStream);
    VAR
      ProcessingWindow@1000 : Dialog;
    BEGIN
      IF GlobalProgressDialogEnabled THEN
        ProcessingWindow.OPEN(ProcessingWindowMsg);
      CLEARLASTERROR;
      HttpWebResponse := HttpWebRequest.GetResponse;
      ResponseInStream := HttpWebResponse.GetResponseStream;
      IF GlobalProgressDialogEnabled THEN
        ProcessingWindow.CLOSE;
    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
      XMLDOMMgt@1006 : Codeunit 6224;
      DotNetExceptionHandler@1000 : Codeunit 70091;
      WebException@1005 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.WebException";
      WebExceptionStatus@1004 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.WebExceptionStatus";
      XmlDoc@1003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";
      HttpWebResponseError@1007 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebResponse";
      HttpStatusCode@1008 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpStatusCode";
      ResponseInputStream@1002 : InStream;
      ErrorText@1009 : Text;
      ServiceURL@1010 : Text;
    BEGIN
      DotNetExceptionHandler.Collect;

      IF NOT DotNetExceptionHandler.CastToType(WebException,GETDOTNETTYPE(WebException)) THEN
        DotNetExceptionHandler.Rethrow;

      IF NOT ISNULL(WebException.Response) THEN
        IF NOT ISNULL(WebException.Response.ResponseUri) THEN
          ServiceURL := STRSUBSTNO(ServiceURLTxt,WebException.Response.ResponseUri.AbsoluteUri);

      ErrorText := ConnectionErr + WebException.Message + ServiceURL;
      IF NOT WebException.Status.Equals(WebExceptionStatus.ProtocolError) THEN
        ERROR(ErrorText);

      IF ISNULL(WebException.Response) THEN
        DotNetExceptionHandler.Rethrow;

      ResponseInputStream := WebException.Response.GetResponseStream;
      TraceLogStreamToTempFile(ResponseInputStream,'WebExceptionResponse',TempDebugLogTempBlob);

      HttpWebResponseError := WebException.Response;
      IF NOT (HttpWebResponseError.StatusCode.Equals(HttpStatusCode.Found) OR
              HttpWebResponseError.StatusCode.Equals(HttpStatusCode.InternalServerError))
      THEN
        ERROR(ErrorText);

      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 CheckUrl@8(Url@1000 : Text);
    VAR
      Uri@1002 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Uri";
      UriKind@1001 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.UriKind";
    BEGIN
      IF NOT Uri.TryCreate(Url,UriKind.Absolute,Uri) THEN
        ERROR(InvalidUrlErr);

      IF NOT GlobalSkipCheckHttps AND NOT (Uri.Scheme = 'https') THEN
        ERROR(NonSecureUrlErr);
    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;

    LOCAL PROCEDURE CheckGlobals@14();
    BEGIN
      IF GlobalRequestBodyInStream.EOS THEN
        ERROR(NoRequestBodyErr);

      IF GlobalURL = '' THEN
        ERROR(NoServiceAddressErr);

      CheckUrl(GlobalURL);
    END;

    LOCAL PROCEDURE TraceLogStreamToTempFile@33(VAR ToLogInStream@1000 : InStream;Name@1005 : Text;VAR TraceLogTempBlob@1001 : Record 99008535);
    BEGIN
      IF NOT TraceLogEnabled THEN
        EXIT;

      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 NOT TraceLogEnabled THEN
        EXIT;

      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
    {
      dynamicsblog.at
    }
    END.
  }
}

OBJECT Codeunit 70091 DotNet Exception Handler
{
  OBJECT-PROPERTIES
  {
    Date=15.10.14;
    Time=03:35:09;
    Modified=Yes;
    Version List=NAVW18.00;
  }
  PROPERTIES
  {
    OnRun=BEGIN
          END;

  }
  CODE
  {
    VAR
      OuterException@1000 : DotNet "'mscorlib'.System.Exception";

    PROCEDURE Catch@3(VAR Exception@1002 : DotNet "'mscorlib'.System.Exception";Type@1007 : DotNet "'mscorlib'.System.Type");
    BEGIN
      Collect;
      IF NOT CastToType(Exception,Type) THEN
        Rethrow;
    END;

    PROCEDURE Collect@1();
    BEGIN
      //should be checked
      //OuterException := GETLASTERROROBJECT;
    END;

    PROCEDURE TryCastToType@5(Type@1000 : DotNet "'mscorlib'.System.Type") : Boolean;
    VAR
      Exception@1001 : DotNet "'mscorlib'.System.FormatException";
    BEGIN
      EXIT(CastToType(Exception,Type));
    END;

    PROCEDURE CastToType@2(VAR Exception@1002 : DotNet "'mscorlib'.System.Exception";Type@1007 : DotNet "'mscorlib'.System.Type") : Boolean;
    BEGIN
      //should be checked

      //Exception := OuterException;

      //REPEAT
      //  IF Type.Equals(Exception.GetType) THEN
      //    EXIT(TRUE);
      //  Exception := Exception.InnerException;
      //UNTIL ISNULL(Exception);

      EXIT(FALSE);
    END;

    PROCEDURE Rethrow@4();
    BEGIN
      IF ISNULL(OuterException.InnerException) THEN
        ERROR(OuterException.Message);

      ERROR(OuterException.InnerException.Message);
    END;

    BEGIN
    {
      dynamicsblog.at
    }
    END.
  }
}

OBJECT Codeunit 70092 Trace
{
  OBJECT-PROPERTIES
  {
    Date=15.10.14;
    Time=03:35:23;
    Modified=Yes;
    Version List=NAVW18.00;
  }
  PROPERTIES
  {
    OnRun=BEGIN
          END;

  }
  CODE
  {
    VAR
      TraceLogInStream@1000 : InStream;
      TraceStreamLogAlreadyInUseErr@1001 : TextConst 'ENU=Debug stream logging is already in use.;DEA=Debugstream-Protokollierung wird bereits verwendet.';

    PROCEDURE LogStreamToTempFile@33(VAR ToLogInStream@1000 : InStream;Name@1005 : Text;VAR TraceLogTempBlob@1001 : Record 99008535) Filename : Text;
    VAR
      FileManagement@1002 : Codeunit 419;
      OutStream@1003 : OutStream;
    BEGIN
      TraceLogTempBlob.CALCFIELDS(Blob);
      IF TraceLogTempBlob.Blob.HASVALUE THEN
        IF NOT TraceLogInStream.EOS THEN
          ERROR(TraceStreamLogAlreadyInUseErr);

      TraceLogTempBlob.Blob.CREATEOUTSTREAM(OutStream);
      COPYSTREAM(OutStream,ToLogInStream);

      Filename := FileManagement.ServerTempFileName(Name + '.XML');

      TraceLogTempBlob.Blob.EXPORT(Filename);

      TraceLogTempBlob.Blob.CREATEINSTREAM(TraceLogInStream);
      ToLogInStream := TraceLogInStream;
    END;

    PROCEDURE LogXmlDocToTempFile@67(VAR XmlDoc@1004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";Name@1005 : Text) Filename : Text;
    VAR
      FileManagement@1002 : Codeunit 419;
    BEGIN
      Filename := FileManagement.ServerTempFileName(Name + '.XML');
      XmlDoc.Save(Filename);
    END;

    BEGIN
    {
      dynamicsblog.at
    }
    END.
  }
}

