I am currently working on a solution that requires a Dynamics NAV client to communicate with Dynamics NAV web service. This I have done before with the classic client and have used automation objects for the job. Now I wanted to do this with dotnet only objects in the Role Tailored Client. Took some time to put all things together but here it is. This version is running the request from the client.
OBJECT Codeunit 50027 IC Addon Inbox WebService { OBJECT-PROPERTIES { Date=09.04.14; Time=17:28:02; Modified=Yes; Version List=IC7.10; } PROPERTIES { OnRun=BEGIN END; } CODE { PROCEDURE LoadTransaction@1100408001(FromPartnerCode@1100408004 : Code[20];FromRespCenterCode@1100408005 : Code[10];ToPartnerCode@1100408006 : Code[20];ToRespCenterCode@1100408007 : Code[10];Transaction@1100408000 : BigText;PDFInvoice@1100408001 : BigText;PDFDetails@1100408002 : BigText;XMLInvoice@1100408003 : BigText;VAR ResponseMessage@1100408009 : Text) Success : Boolean; VAR Loader@1000000000 : Codeunit 50019; TransactionStream@1000000014 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.MemoryStream"; PDFInvoiceStream@1000000016 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.MemoryStream"; PDFDetailsStream@1000000015 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.MemoryStream"; XMLInvoiceStream@1000000013 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.MemoryStream"; BEGIN TransactionStream := TransactionStream.MemoryStream; PDFInvoiceStream := PDFInvoiceStream.MemoryStream; PDFDetailsStream := PDFDetailsStream.MemoryStream; XMLInvoiceStream := XMLInvoiceStream.MemoryStream; IF Transaction.LENGTH > 0 THEN Transaction.WRITE(TransactionStream); IF PDFInvoice.LENGTH > 0 THEN PDFInvoice.WRITE(PDFInvoiceStream); IF PDFDetails.LENGTH > 0 THEN PDFDetails.WRITE(PDFDetailsStream); IF XMLInvoice.LENGTH > 0 THEN XMLInvoice.WRITE(XMLInvoiceStream); Loader.SetProperties( FromPartnerCode, FromRespCenterCode, ToPartnerCode, ToRespCenterCode, TransactionStream, PDFInvoiceStream, PDFDetailsStream, XMLInvoiceStream, Transaction.LENGTH > 0, PDFInvoice.LENGTH > 0, PDFDetails.LENGTH > 0, XMLInvoice.LENGTH > 0); IF Loader.RUN THEN EXIT(TRUE) ELSE BEGIN ResponseMessage := GETLASTERRORTEXT; EXIT(FALSE); END; END; BEGIN END. } }
OBJECT Codeunit 50028 IC Addon Web Service Client { OBJECT-PROPERTIES { Date=08.03.15; Time=16:01:05; Modified=Yes; Version List=IC7.10.0432; } PROPERTIES { OnRun=BEGIN END; } CODE { VAR Text001@1000000019 : TextConst 'ENU=Succesfully delivered;ISL=Sending hepnaÐist'; Text003@1100408001 : TextConst 'ENU=Error: %1\%2;ISL=St”Ðuvilla: %1\%2'; Credential@1000000015 : DotNet "'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.NetworkCredential"; HttpWebRequest@1000000014 : DotNet "'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebRequest"; HttpWebResponse@1000000013 : DotNet "'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.WebResponse"; HttpWebException@1000000017 : DotNet "'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.WebException"; MemoryStream@1000000012 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.MemoryStream"; XMLRequestDoc@1000000011 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"; XMLResponseDoc@1000000010 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument"; XMLProsInstr@1000000009 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlProcessingInstruction"; XMLElement1@1000000008 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlElement"; XMLElement2@1000000007 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlElement"; XMLElement3@1000000006 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlElement"; XMLNode4@1000000005 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode"; XMLNsMgr@1000000004 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNamespaceManager"; Bytes@1000000003 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Array"; String@1000000002 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.String"; Convert@1000000001 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Convert"; ServerFile@1000000000 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.File"; NAVWebRequest@1000000018 : DotNet "'NAVWebRequest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f53f0925d26e1382'.NAVWebRequest.NAVWebRequest"; RespCenter@1100408000 : Record 5714; CompanyInfo@1100408002 : Record 79; Log@1000000016 : Record 50009; FileMgt@1100408003 : Codeunit 419; WebServiceName@1100408008 : Text[1024]; InStr@1100408005 : InStream; Text006@1100408007 : TextConst 'ENU=Export;ISL=Flytja £t'; Text009@1100408006 : TextConst 'ENU=All Files (*.*)|*.*;ISL=Allar skr r (*.*)|*.*'; PROCEDURE SendToPartner@1100408000(ICOutboxTrans@1100408000 : Record 414;ICPartner@1100408001 : Record 413;FileName@1100408002 : Text[250]); BEGIN ICPartner.TESTFIELD("Inbox Details"); WebServiceName := FindWebServiceName(ICPartner."Inbox Details"); WITH ICOutboxTrans DO BEGIN CALCFIELDS("PDF Document","XML Document","Details Document"); IF "Responsibility Center" <> '' THEN BEGIN RespCenter.GET("Responsibility Center"); RespCenter.TESTFIELD("IC Partner Code"); CompanyInfo."IC Partner Code" := RespCenter."IC Partner Code"; END ELSE BEGIN CompanyInfo.GET; CompanyInfo.TESTFIELD("IC Partner Code"); END; END; SendTransactionToPartnerDotNet(ICOutboxTrans,ICPartner,FileName) END; LOCAL PROCEDURE FindWebServiceName@1100408002(URL@1100408000 : Text[1024]) WebServiceName : Text[1024]; VAR i@1100408001 : Integer; BEGIN FOR i := 1 TO STRLEN(URL) DO IF COPYSTR(URL,i,1) = '/' THEN WebServiceName := COPYSTR(URL,i + 1); END; LOCAL PROCEDURE SendTransactionToPartnerDotNet@1100408003(ICOutboxTrans@1100408000 : Record 414;ICPartner@1100408001 : Record 413;FileName@1100408002 : Text[250]); VAR TempFile@1000000001 : File; TempFileName@1000000000 : Text[250]; WebServiceUserID@1000000003 : Text[1024]; OutStr@1000000002 : OutStream; BEGIN WITH ICOutboxTrans DO BEGIN Log.GET("Transaction No."); Log."Delivered Date and Time" := CURRENTDATETIME; Log."Delivered by User ID" := USERID; XMLRequestDoc := XMLResponseDoc.XmlDocument; XMLProsInstr := XMLRequestDoc.CreateProcessingInstruction('xml','version="1.0" encoding="utf-8"'); XMLRequestDoc.AppendChild(XMLProsInstr); XMLElement1 := XMLRequestDoc.CreateElement('soap','Envelope','http://schemas.xmlsoap.org/soap/envelope/'); XMLElement1.SetAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance'); XMLElement1.SetAttribute('xmlns:xsd','http://www.w3.org/2001/XMLSchema'); XMLElement2 := XMLRequestDoc.CreateElement('soap','Body', 'http://schemas.xmlsoap.org/soap/envelope/'); XMLElement3 := XMLRequestDoc.CreateElement('LoadTransaction'); XMLElement3.SetAttribute('xmlns',STRSUBSTNO('urn:microsoft-dynamics-schemas/codeunit/%1',WebServiceName)); XMLNode4 := XMLRequestDoc.CreateElement('fromPartnerCode'); XMLNode4.InnerText := CompanyInfo."IC Partner Code"; XMLElement3.AppendChild(XMLNode4); XMLNode4 := XMLRequestDoc.CreateElement('fromRespCenterCode'); IF ICPartner."Send Resp. Center Code" THEN XMLNode4.InnerText := "Responsibility Center"; XMLElement3.AppendChild(XMLNode4); XMLNode4 := XMLRequestDoc.CreateElement('toPartnerCode'); XMLNode4.InnerText := "IC Partner Code"; XMLElement3.AppendChild(XMLNode4); XMLNode4 := XMLRequestDoc.CreateElement('toRespCenterCode'); XMLNode4.InnerText := "IC Partner Resp. Center"; XMLElement3.AppendChild(XMLNode4); XMLNode4 := XMLRequestDoc.CreateElement('transaction'); XMLNode4.InnerText := Convert.ToBase64String(ServerFile.ReadAllBytes(FileName)); XMLElement3.AppendChild(XMLNode4); TempFile.OPEN(FileName); TempFile.CREATEINSTREAM(InStr); Log.Transaction.CREATEOUTSTREAM(OutStr); COPYSTREAM(OutStr,InStr); TempFile.CLOSE; ServerFile.Delete(FileName); XMLNode4 := XMLRequestDoc.CreateElement('pDFInvoice'); IF "PDF Document".HASVALUE THEN BEGIN "PDF Document".CREATEINSTREAM(InStr); TempFileName := FileMgt.ServerTempFileName('pdf'); TempFile.CREATE(TempFileName); TempFile.CREATEOUTSTREAM(OutStr); COPYSTREAM(OutStr,InStr); TempFile.CLOSE; XMLNode4.InnerText := Convert.ToBase64String(ServerFile.ReadAllBytes(TempFileName)); ServerFile.Delete(TempFileName); END; XMLElement3.AppendChild(XMLNode4); XMLNode4 := XMLRequestDoc.CreateElement('pDFDetails'); IF "Details Document".HASVALUE THEN BEGIN "Details Document".CREATEINSTREAM(InStr); TempFileName := FileMgt.ServerTempFileName('pdf'); TempFile.CREATE(TempFileName); TempFile.CREATEOUTSTREAM(OutStr); COPYSTREAM(OutStr,InStr); TempFile.CLOSE; XMLNode4.InnerText := Convert.ToBase64String(ServerFile.ReadAllBytes(TempFileName)); ServerFile.Delete(TempFileName); END; XMLElement3.AppendChild(XMLNode4); XMLNode4 := XMLRequestDoc.CreateElement('xMLInvoice'); IF "XML Document".HASVALUE THEN BEGIN "XML Document".CREATEINSTREAM(InStr); TempFileName := FileMgt.ServerTempFileName('xml'); TempFile.CREATE(TempFileName); TempFile.CREATEOUTSTREAM(OutStr); COPYSTREAM(OutStr,InStr); TempFile.CLOSE; XMLNode4.InnerText := Convert.ToBase64String(ServerFile.ReadAllBytes(TempFileName)); ServerFile.Delete(TempFileName); END; XMLElement3.AppendChild(XMLNode4); XMLNode4 := XMLRequestDoc.CreateElement('responseMessage'); XMLElement3.AppendChild(XMLNode4); XMLElement2.AppendChild(XMLElement3); XMLElement1.AppendChild(XMLElement2); XMLRequestDoc.AppendChild(XMLElement1); HttpWebRequest := HttpWebRequest.Create(ICPartner."Inbox Details"); HttpWebRequest.Timeout := 30000; WebServiceUserID := ICPartner.GetUserID; IF WebServiceUserID = '' THEN HttpWebRequest.UseDefaultCredentials(TRUE) ELSE BEGIN HttpWebRequest.UseDefaultCredentials(FALSE); Credential := Credential.NetworkCredential; Credential.UserName := WebServiceUserID; Credential.Password := ICPartner.GetPassword; Credential.Domain := ICPartner.GetDomain; HttpWebRequest.Credentials := Credential; END; HttpWebRequest.Method := 'POST'; HttpWebRequest.ContentType := 'text/xml; charset=utf-8'; HttpWebRequest.Accept := 'text/xml'; HttpWebRequest.Headers.Add('SOAPAction','LoadTransaction'); MemoryStream := HttpWebRequest.GetRequestStream; XMLRequestDoc.Save(MemoryStream); MemoryStream.Flush; MemoryStream.Close; NAVWebRequest := NAVWebRequest.NAVWebRequest; IF NOT NAVWebRequest.doRequest(HttpWebRequest,HttpWebException,HttpWebResponse) THEN BEGIN Log.Delivered := FALSE; Log.SetMessage(HttpWebException.Message); Log.MODIFY; COMMIT; ERROR(Text003,HttpWebException.Status.ToString,HttpWebException.Message); END; MemoryStream := HttpWebResponse.GetResponseStream; XMLResponseDoc := XMLResponseDoc.XmlDocument; XMLResponseDoc.Load(MemoryStream); MemoryStream.Flush; MemoryStream.Close; XMLNsMgr := XMLNsMgr.XmlNamespaceManager(XMLResponseDoc.NameTable); XMLNsMgr.AddNamespace('urn',STRSUBSTNO('urn:microsoft-dynamics-schemas/codeunit/%1',WebServiceName)); XMLNode4 := XMLResponseDoc.SelectSingleNode('//urn:return_value',XMLNsMgr); IF UPPERCASE(XMLNode4.InnerText) = 'FALSE' THEN BEGIN XMLNode4 := XMLResponseDoc.SelectSingleNode('//urn:responseMessage',XMLNsMgr); Log.Delivered := FALSE; Log.SetMessage(XMLNode4.InnerText); Log.MODIFY; COMMIT; ERROR(XMLNode4.InnerText); END; Log.Delivered := TRUE; Log.SetMessage(Text001); Log.MODIFY; COMMIT; END; END; EVENT XMLResponseDoc@1000000010::NodeInserting@93(sender@1000000001 : Variant;e@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeChangedEventArgs"); BEGIN END; EVENT XMLResponseDoc@1000000010::NodeInserted@94(sender@1000000001 : Variant;e@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeChangedEventArgs"); BEGIN END; EVENT XMLResponseDoc@1000000010::NodeRemoving@95(sender@1000000001 : Variant;e@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeChangedEventArgs"); BEGIN END; EVENT XMLResponseDoc@1000000010::NodeRemoved@96(sender@1000000001 : Variant;e@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeChangedEventArgs"); BEGIN END; EVENT XMLResponseDoc@1000000010::NodeChanging@97(sender@1000000001 : Variant;e@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeChangedEventArgs"); BEGIN END; EVENT XMLResponseDoc@1000000010::NodeChanged@98(sender@1000000001 : Variant;e@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeChangedEventArgs"); BEGIN END; EVENT XMLRequestDoc@1000000011::NodeInserting@93(sender@1000000001 : Variant;e@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeChangedEventArgs"); BEGIN END; EVENT XMLRequestDoc@1000000011::NodeInserted@94(sender@1000000001 : Variant;e@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeChangedEventArgs"); BEGIN END; EVENT XMLRequestDoc@1000000011::NodeRemoving@95(sender@1000000001 : Variant;e@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeChangedEventArgs"); BEGIN END; EVENT XMLRequestDoc@1000000011::NodeRemoved@96(sender@1000000001 : Variant;e@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeChangedEventArgs"); BEGIN END; EVENT XMLRequestDoc@1000000011::NodeChanging@97(sender@1000000001 : Variant;e@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeChangedEventArgs"); BEGIN END; EVENT XMLRequestDoc@1000000011::NodeChanged@98(sender@1000000001 : Variant;e@1000000000 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeChangedEventArgs"); BEGIN END; BEGIN END. } }
OBJECT Codeunit 50019 IC Addon Load Transaction { OBJECT-PROPERTIES { Date=02.05.14; Time=10:12:10; Modified=Yes; Version List=IC7.10; } PROPERTIES { OnRun=BEGIN LoadTransaction; END; } CODE { VAR Text001@1100408000 : TextConst 'ENU=IC Partner Code %1 not found;ISL=Mf. f‚lagak¢ti %1 finnst ekki'; Text002@1100408001 : TextConst 'ENU=Responsibility Center Code mismatch, %1 <> %2;ISL=µbyrgÐast”Ðvark¢ti stemmir ekki, %1 <> %2'; Convert@1100408004 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Convert"; DocumentFile@1100408003 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.File"; Bytes@1100408010 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Array"; MemoryStream@1100408008 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.MemoryStream"; FileMgt@1100408009 : Codeunit 419; TempFile@1100408007 : File; InStr@1000000011 : InStream; OutStr@1000000010 : OutStream; TempFileName@1100408006 : Text[1024]; Text003@1100408011 : TextConst 'ENU=No data received;ISL=Engin g”gn m¢ttekin'; Text004@1100408012 : TextConst 'ENU=Transaction no. %1 is already imported;ISL=F‘rsla nr. %1 er çegar innflutt'; Text005@1000000000 : TextConst 'ENU=From Partner Code Error in Transaction, %1 <> %2;ISL=Fr mf. f‚lagak¢ta villa ¡ f‘rslu, %1 <> %2'; Text006@1000000001 : TextConst 'ENU=To Partner Code Error in Transaction, %1 <> %2;ISL=Til mf. f‚lagak¢ta villa ¡ f‘rslu, %1 <> %2'; FromPartnerCode@1000000009 : Code[20]; FromRespCenterCode@1000000008 : Code[10]; ToPartnerCode@1000000007 : Code[20]; ToRespCenterCode@1000000006 : Code[10]; Transaction@1000000005 : BigText; PDFInvoice@1000000004 : BigText; PDFDetails@1000000003 : BigText; XMLInvoice@1000000002 : BigText; LOCAL PROCEDURE LoadTransaction@1100408001(); VAR ICPartner@1100408010 : Record 413; TempBlob@1100408024 : TEMPORARY Record 99008535; TempICOutboxTrans@1100408020 : TEMPORARY Record 414; TempICOutBoxJnlLine@1100408019 : TEMPORARY Record 415; TempICIOBoxJnlDim@1100408018 : TEMPORARY Record 423; TempICOutBoxSalesHdr@1100408017 : TEMPORARY Record 426; TempICOutBoxSalesLine@1100408016 : TEMPORARY Record 427; TempICOutBoxPurchHdr@1100408015 : TEMPORARY Record 428; TempICOutBoxPurchLine@1100408014 : TEMPORARY Record 429; TempICDocDim@1100408013 : TEMPORARY Record 442; ICInboxTransaction@1100408022 : Record 418; ICInboxTransaction2@1100408032 : Record 418; ICInboxJnlLine@1100408030 : Record 419; ICInboxSalesHdr@1100408029 : Record 434; ICInboxSalesLine@1100408028 : Record 435; ICInboxPurchHdr@1100408027 : Record 436; ICInboxPurchLine@1100408026 : Record 437; ICInboxJnlLineDim@1100408025 : Record 423; ICInboxDocDim@1100408023 : Record 442; HandledICInboxTransaction@1000000000 : Record 420; ICInboxOutboxMgt@1100408021 : Codeunit 427; FromICPartnerCode@1100408012 : Code[20]; ToICPartnerCode@1100408011 : Code[20]; ICOutboxExportXML@1100408008 : XMLport 12; NewTableID@1100408031 : Integer; BEGIN IF NOT ICPartner.GET(FromPartnerCode) THEN ERROR(Text001,FromPartnerCode); IF ICPartner."Responsibility Center" <> FromRespCenterCode THEN ERROR(Text002,ICPartner."Responsibility Center",FromRespCenterCode); IF NOT ICPartner.GET(ToPartnerCode) THEN ERROR(Text001,ToPartnerCode); IF ICPartner."Responsibility Center" <> ToRespCenterCode THEN ERROR(Text002,ICPartner."Responsibility Center",ToRespCenterCode); IF Transaction.LENGTH > 0 THEN BEGIN Bytes := Convert.FromBase64String(Transaction); MemoryStream := MemoryStream.MemoryStream(Bytes); TempBlob.Blob.CREATEOUTSTREAM(OutStr); MemoryStream.WriteTo(OutStr); TempBlob.Blob.CREATEINSTREAM(InStr); ICOutboxExportXML.SETSOURCE(InStr); ICOutboxExportXML.IMPORT; ICOutboxExportXML.GetICOutboxTrans(TempICOutboxTrans); ICOutboxExportXML.GetICOutBoxJnlLine(TempICOutBoxJnlLine); ICOutboxExportXML.GetICIOBoxJnlDim(TempICIOBoxJnlDim); ICOutboxExportXML.GetICOutBoxSalesHdr(TempICOutBoxSalesHdr); ICOutboxExportXML.GetICOutBoxSalesLine(TempICOutBoxSalesLine); ICOutboxExportXML.GetICOutBoxPurchHdr(TempICOutBoxPurchHdr); ICOutboxExportXML.GetICOutBoxPurchLine(TempICOutBoxPurchLine); ICOutboxExportXML.GetICSalesDocDim(TempICDocDim); ICOutboxExportXML.GetICSalesDocLineDim(TempICDocDim); ICOutboxExportXML.GetICPurchDocDim(TempICDocDim); ICOutboxExportXML.GetICPurchDocLineDim(TempICDocDim); FromICPartnerCode := ICOutboxExportXML.GetFromICPartnerCode; ToICPartnerCode := ICOutboxExportXML.GetToICPartnerCode; TempICOutBoxSalesHdr.MODIFYALL("Responsibility Center",FromRespCenterCode); TempICOutBoxSalesHdr.MODIFYALL("IC Partner Resp. Center",ToRespCenterCode); TempICOutBoxPurchHdr.MODIFYALL("Responsibility Center",FromRespCenterCode); TempICOutBoxPurchHdr.MODIFYALL("IC Partner Resp. Center",ToRespCenterCode); IF FromICPartnerCode <> FromPartnerCode THEN ERROR(Text005,FromICPartnerCode,FromPartnerCode); IF ToICPartnerCode <> ToPartnerCode THEN ERROR(Text006,ToICPartnerCode,ToPartnerCode); ICInboxTransaction2.SETRANGE("Transaction No.",TempICOutboxTrans."Transaction No."); ICInboxTransaction2.SETRANGE("IC Partner Code",FromICPartnerCode); ICInboxTransaction2.SETRANGE("Transaction Source",TempICOutboxTrans."Transaction Source"); IF ICInboxTransaction2.FINDFIRST THEN ERROR(Text004,TempICOutboxTrans."Transaction No."); HandledICInboxTransaction.SETRANGE("Transaction No.",TempICOutboxTrans."Transaction No."); HandledICInboxTransaction.SETRANGE("IC Partner Code",FromICPartnerCode); HandledICInboxTransaction.SETRANGE("Transaction Source",TempICOutboxTrans."Transaction Source"); IF HandledICInboxTransaction.FINDFIRST THEN ERROR(Text004,TempICOutboxTrans."Transaction No."); IF TempICOutboxTrans.FIND('-') THEN BEGIN ICInboxOutboxMgt.OutboxTransToInbox(TempICOutboxTrans,ICInboxTransaction,FromICPartnerCode); TempICOutBoxJnlLine.SETRANGE("Transaction No.",TempICOutboxTrans."Transaction No."); TempICOutBoxJnlLine.SETRANGE("IC Partner Code",TempICOutboxTrans."IC Partner Code"); TempICOutBoxJnlLine.SETRANGE("Transaction Source",TempICOutboxTrans."Transaction Source"); IF TempICOutBoxJnlLine.FIND('-') THEN REPEAT ICInboxOutboxMgt.OutboxJnlLineToInbox(ICInboxTransaction,TempICOutBoxJnlLine,ICInboxJnlLine); TempICIOBoxJnlDim.SETRANGE("Transaction No.",TempICOutboxTrans."Transaction No."); TempICIOBoxJnlDim.SETRANGE("IC Partner Code",TempICOutboxTrans."IC Partner Code"); TempICIOBoxJnlDim.SETRANGE("Transaction Source",TempICOutboxTrans."Transaction Source"); TempICIOBoxJnlDim.SETRANGE("Line No.",ICInboxJnlLine."Line No."); IF TempICIOBoxJnlDim.FIND('-') THEN REPEAT ICInboxOutboxMgt.OutboxJnlLineDimToInbox( ICInboxJnlLine,TempICIOBoxJnlDim,ICInboxJnlLineDim,DATABASE::"IC Inbox Jnl. Line"); UNTIL TempICIOBoxJnlDim.NEXT = 0; UNTIL TempICOutBoxJnlLine.NEXT = 0; TempICOutBoxSalesHdr.SETRANGE("IC Transaction No.",TempICOutboxTrans."Transaction No."); TempICOutBoxSalesHdr.SETRANGE("IC Partner Code",TempICOutboxTrans."IC Partner Code"); TempICOutBoxSalesHdr.SETRANGE("Transaction Source",TempICOutboxTrans."Transaction Source"); IF TempICOutBoxSalesHdr.FIND('-') THEN REPEAT ICInboxOutboxMgt.OutboxSalesHdrToInbox(ICInboxTransaction,TempICOutBoxSalesHdr,ICInboxPurchHdr); UNTIL TempICOutBoxSalesHdr.NEXT = 0; TempICOutBoxSalesLine.SETRANGE("IC Transaction No.",TempICOutboxTrans."Transaction No."); TempICOutBoxSalesLine.SETRANGE("IC Partner Code",TempICOutboxTrans."IC Partner Code"); TempICOutBoxSalesLine.SETRANGE("Transaction Source",TempICOutboxTrans."Transaction Source"); IF TempICOutBoxSalesLine.FIND('-') THEN BEGIN REPEAT ICInboxOutboxMgt.OutboxSalesLineToInbox(ICInboxTransaction,TempICOutBoxSalesLine,ICInboxPurchLine); UNTIL TempICOutBoxSalesLine.NEXT = 0; ICInboxPurchLine.SETRANGE("IC Transaction No.",ICInboxPurchHdr."IC Transaction No."); ICInboxPurchLine.SETRANGE("IC Partner Code",ICInboxPurchHdr."IC Partner Code"); ICInboxPurchLine.SETRANGE("Transaction Source",ICInboxPurchHdr."Transaction Source"); ICInboxPurchLine.SETRANGE("VAT Base Amount",-0.5,0.5); ICInboxPurchLine.CALCSUMS("Amount Including VAT"); ICInboxPurchHdr."Payable Rounding Amount" := ICInboxPurchLine."Amount Including VAT"; ICInboxPurchLine.SETRANGE("VAT Base Amount"); ICInboxPurchLine.CALCSUMS("Amount Including VAT","VAT Base Amount"); ICInboxPurchHdr."Payable Amount" := ICInboxPurchLine."Amount Including VAT"; ICInboxPurchHdr."Line Extension Amount" := ICInboxPurchLine."VAT Base Amount" - ICInboxPurchHdr."Payable Rounding Amount"; ICInboxPurchHdr."Tax Exclusive Amount" := ICInboxPurchHdr."Line Extension Amount"; ICInboxPurchHdr."Tax Inclusive Amount" := ICInboxPurchLine."Amount Including VAT" - ICInboxPurchHdr."Payable Rounding Amount"; ICInboxPurchHdr."Tax Amount" := ICInboxPurchHdr."Tax Inclusive Amount" - ICInboxPurchHdr."Tax Exclusive Amount"; ICInboxPurchHdr.MODIFY; END; TempICOutBoxPurchHdr.SETRANGE("IC Transaction No.",TempICOutboxTrans."Transaction No."); TempICOutBoxPurchHdr.SETRANGE("IC Partner Code",TempICOutboxTrans."IC Partner Code"); TempICOutBoxPurchHdr.SETRANGE("Transaction Source",TempICOutboxTrans."Transaction Source"); IF TempICOutBoxPurchHdr.FIND('-') THEN REPEAT ICInboxOutboxMgt.OutboxPurchHdrToInbox(ICInboxTransaction,TempICOutBoxPurchHdr,ICInboxSalesHdr); UNTIL TempICOutBoxPurchHdr.NEXT = 0; TempICOutBoxPurchLine.SETRANGE("IC Transaction No.",TempICOutboxTrans."Transaction No."); TempICOutBoxPurchLine.SETRANGE("IC Partner Code",TempICOutboxTrans."IC Partner Code"); TempICOutBoxPurchLine.SETRANGE("Transaction Source",TempICOutboxTrans."Transaction Source"); IF TempICOutBoxPurchLine.FIND('-') THEN REPEAT ICInboxOutboxMgt.OutboxPurchLineToInbox(ICInboxTransaction,TempICOutBoxPurchLine,ICInboxSalesLine); UNTIL TempICOutBoxPurchLine.NEXT = 0; TempICDocDim.SETRANGE("Transaction No.",TempICOutboxTrans."Transaction No."); TempICDocDim.SETRANGE("IC Partner Code",TempICOutboxTrans."IC Partner Code"); TempICDocDim.SETRANGE("Transaction Source",TempICOutboxTrans."Transaction Source"); IF TempICDocDim.FIND('-') THEN REPEAT CASE TempICDocDim."Table ID" OF DATABASE::"IC Outbox Sales Header": NewTableID := DATABASE::"IC Inbox Purchase Header"; DATABASE::"IC Outbox Sales Line": NewTableID := DATABASE::"IC Inbox Purchase Line"; DATABASE::"IC Outbox Purchase Header": NewTableID := DATABASE::"IC Inbox Sales Header"; DATABASE::"IC Outbox Purchase Line": NewTableID := DATABASE::"IC Inbox Sales Line"; END; ICInboxOutboxMgt.OutboxDocDimToInbox( TempICDocDim,ICInboxDocDim,NewTableID,FromICPartnerCode,ICInboxTransaction."Transaction Source"); UNTIL TempICDocDim.NEXT = 0; END; ICInboxTransaction."Responsibility Center" := ToRespCenterCode; ICInboxTransaction."IC Partner Resp. Center" := FromRespCenterCode; IF XMLInvoice.LENGTH > 0 THEN BEGIN Bytes := Convert.FromBase64String(XMLInvoice); MemoryStream := MemoryStream.MemoryStream(Bytes); ICInboxTransaction."XML Document".CREATEOUTSTREAM(OutStr); MemoryStream.WriteTo(OutStr); END; IF PDFInvoice.LENGTH > 0 THEN BEGIN Bytes := Convert.FromBase64String(PDFInvoice); MemoryStream := MemoryStream.MemoryStream(Bytes); ICInboxTransaction."PDF Document".CREATEOUTSTREAM(OutStr); MemoryStream.WriteTo(OutStr); END; IF PDFDetails.LENGTH > 0 THEN BEGIN Bytes := Convert.FromBase64String(PDFDetails); MemoryStream := MemoryStream.MemoryStream(Bytes); ICInboxTransaction."Details Document".CREATEOUTSTREAM(OutStr); MemoryStream.WriteTo(OutStr); END; ICInboxTransaction.MODIFY; END ELSE ERROR(Text003); END; PROCEDURE SetProperties@1000000000(VAR SetFromPartnerCode@1000000007 : Code[20];VAR SetFromRespCenterCode@1000000006 : Code[10];VAR SetToPartnerCode@1000000005 : Code[20];VAR SetToRespCenterCode@1000000004 : Code[10];VAR SetTransaction@1000000003 : InStream;VAR SetPDFInvoice@1000000002 : InStream;VAR SetPDFDetails@1000000001 : InStream;VAR SetXMLInvoice@1000000000 : InStream;TransactionHasValue@1000000011 : Boolean;PDFInvoiceHasValue@1000000010 : Boolean;PDFDetailsHasValue@1000000009 : Boolean;XMLInvoiceHasValue@1000000008 : Boolean); BEGIN FromPartnerCode := SetFromPartnerCode; FromRespCenterCode := SetFromRespCenterCode; ToPartnerCode := SetToPartnerCode; ToRespCenterCode := SetToRespCenterCode; IF TransactionHasValue THEN Transaction.READ(SetTransaction); IF PDFInvoiceHasValue THEN PDFInvoice.READ(SetPDFInvoice); IF PDFDetailsHasValue THEN PDFDetails.READ(SetPDFDetails); IF XMLInvoiceHasValue THEN XMLInvoice.READ(SetXMLInvoice); END; BEGIN END. } }
Hi Gunnar,
Thanks for your post. It was very useful for me. But I have a doubt. How I can manage a error 500 with HttpWebRequest.GetResponse sentece?. If my webservice return a error, I can not manage it.
Thank in advance.
the same problem
how to emulate on RTC this code:
IF WinHTTP.status 200 THEN BEGIN
?
Thank you for your replies. I finally got on the task. The result are in my newest blog entry -> https://dynamics.is/?p=1255
Hi Gunner,
I need a help from you. while using XML automation variable i a have written a piece of code for finding the StatusCode in the Response XML.
I have used the following code for that.
//Check for statusCode, validating if the Request was successful
NodeList := Source.getElementsByTagName(‘statusCode’);
Node := NodeList.nextNode;
Status += Node.text;
IF Status ‘Success’ THEN
Error(‘The Response is unsuccessful full’);
I want to change this code to Dot Net since i am using Dot Net variable instead of XML automation variables. Please help me. Thanks
Hi,
Just a quick question, this solution works with any webservice or just NAV to NAV WS
Should work with any SOAP service
Hi Gunnar, where can I download this example? Copying to text file and importing in NAV doesn’t work 🙁
Hi Dag,
I have updated the post, you should be able to copy the objects now.
Hi Gunnar,
Thanks for wounderful Articles. I have a problem with BC. I am calling httpwebservices.getresponse it works fine but sometimes threw
Could not create SSL/TLS secure channel