deploy: 9e06f72056
This commit is contained in:
parent
de09820554
commit
e4f08bf9a7
187 changed files with 6620 additions and 6342 deletions
|
|
@ -6,16 +6,16 @@
|
|||
<link rel=alternate type=application/rss+xml href=/navpatterns/1-patterns/net-exception-handling-in-cal/index.xml title="AL Guidelines">
|
||||
<meta name=description content>
|
||||
<title>NET Exception Handling in CAL :: AL Guidelines</title>
|
||||
<link href=/css/nucleus.css?1644506471 rel=stylesheet>
|
||||
<link href=/css/fontawesome-all.min.css?1644506471 rel=stylesheet>
|
||||
<link href=/css/featherlight.min.css?1644506471 rel=stylesheet>
|
||||
<link href=/css/perfect-scrollbar.min.css?1644506471 rel=stylesheet>
|
||||
<link href=/css/auto-complete.css?1644506471 rel=stylesheet>
|
||||
<link href=/css/theme.css?1644506471 rel=stylesheet>
|
||||
<link href=/css/theme-blue.css?1644506471 rel=stylesheet>
|
||||
<link href=/css/variant.css?1644506471 rel=stylesheet>
|
||||
<link href=/css/print.css?1644506471 rel=stylesheet media=print>
|
||||
<script src=/js/jquery.min.js?1644506471></script>
|
||||
<link href=/css/nucleus.css?1644600601 rel=stylesheet>
|
||||
<link href=/css/fontawesome-all.min.css?1644600601 rel=stylesheet>
|
||||
<link href=/css/featherlight.min.css?1644600601 rel=stylesheet>
|
||||
<link href=/css/perfect-scrollbar.min.css?1644600601 rel=stylesheet>
|
||||
<link href=/css/auto-complete.css?1644600601 rel=stylesheet>
|
||||
<link href=/css/theme.css?1644600601 rel=stylesheet>
|
||||
<link href=/css/theme-blue.css?1644600601 rel=stylesheet>
|
||||
<link href=/css/variant.css?1644600601 rel=stylesheet>
|
||||
<link href=/css/print.css?1644600601 rel=stylesheet media=print>
|
||||
<script src=/js/jquery.min.js?1644600601></script>
|
||||
<style>:root #header+#content>#left>#rlblock_left{display:none!important}</style>
|
||||
</head>
|
||||
<body data-url=/navpatterns/1-patterns/net-exception-handling-in-cal/>
|
||||
|
|
@ -33,9 +33,9 @@ ALGuidelines.Dev
|
|||
<input data-search-input id=search-by type=search placeholder=Search...>
|
||||
<span data-search-clear><i class="fas fa-times"></i></span>
|
||||
</div>
|
||||
<script src=/js/lunr.min.js?1644506471></script>
|
||||
<script src=/js/auto-complete.js?1644506471></script>
|
||||
<script src=/js/search.js?1644506471></script>
|
||||
<script src=/js/lunr.min.js?1644600601></script>
|
||||
<script src=/js/auto-complete.js?1644600601></script>
|
||||
<script src=/js/search.js?1644600601></script>
|
||||
</div>
|
||||
<div class=highlightable>
|
||||
<ul class=topics>
|
||||
|
|
@ -302,111 +302,131 @@ ALGuidelines.Dev
|
|||
<p>For instance, if a failure to establish a connection to the web service due to lack of Internet access, a <strong>WebException</strong> is thrown with the relevant error details. <strong>COD1290 Web Service Mgt.</strong> codeunit wraps up the required functionality to interact with a web service in C/AL, handling all the required plumping work to send web requests, receive web responses, and extract valid and error details from the web response.</p>
|
||||
<h3 id=code-sample>Code Sample</h3>
|
||||
<p>The “External Data Handling Codeunit” is a consumer of <strong>COD1290 Web Service Mgt.</strong> codeunit. If a runtime exception occurs, it gets handled as follows:</p>
|
||||
<pre><code>LOCAL PROCEDURE SendDataToConversionService@1(VAR PaymentFileTempBlob@1003 : Record 99008535;BodyTempBlob@1004 : Record 99008535;PostingExch@1007 : Record 1220);
|
||||
VAR
|
||||
BankDataConvServiceSetup@1000 : Record 1260;
|
||||
WebServiceRequestMgt@1001 : Codeunit 1290;
|
||||
BodyInStream@1005 : InStream;
|
||||
ResponseInStream@1002 : InStream;
|
||||
BEGIN
|
||||
IF NOT BodyTempBlob.Blob.HASVALUE THEN
|
||||
ERROR(NoRequestBodyErr);
|
||||
PrepareSOAPRequestBody(BodyTempBlob);
|
||||
COMMIT;
|
||||
BankDataConvServiceSetup.GET;
|
||||
BodyTempBlob.Blob.CREATEINSTREAM(BodyInStream);
|
||||
WebServiceRequestMgt.SetGlobals(BodyInStream,
|
||||
BankDataConvServiceSetup."Service URL",BankDataConvServiceSetup."User Name",BankDataConvServiceSetup.GetPassword);
|
||||
IF NOT WebServiceRequestMgt.RUN THEN
|
||||
WebServiceRequestMgt.ProcessFaultResponse;
|
||||
WebServiceRequestMgt.GetResponseContent(ResponseInStream);
|
||||
CheckIfErrorsOccurred(ResponseInStream,PostingExch);
|
||||
ReadContentFromResponse(PaymentFileTempBlob,ResponseInStream);
|
||||
END;
|
||||
<div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-al data-lang=al><span style=color:#66d9ef>LOCAL</span> <span style=color:#66d9ef>PROCEDURE</span> SendDataToConversionService@<span style=color:#ae81ff>1</span><span style=color:#f92672>(</span><span style=color:#66d9ef>VAR</span> PaymentFileTempBlob@<span style=color:#ae81ff>1003</span> : <span style=color:#66d9ef>Record</span> <span style=color:#ae81ff>99008535</span>;BodyTempBlob@<span style=color:#ae81ff>1004</span> : <span style=color:#66d9ef>Record</span> <span style=color:#ae81ff>99008535</span>;PostingExch@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>Record</span> <span style=color:#ae81ff>1220</span><span style=color:#f92672>)</span>;
|
||||
<span style=color:#66d9ef>VAR</span>
|
||||
BankDataConvServiceSetup@<span style=color:#ae81ff>1000</span> : <span style=color:#66d9ef>Record</span> <span style=color:#ae81ff>1260</span>;
|
||||
WebServiceRequestMgt@<span style=color:#ae81ff>1001</span> : <span style=color:#66d9ef>Codeunit</span> <span style=color:#ae81ff>1290</span>;
|
||||
BodyInStream@<span style=color:#ae81ff>1005</span> : <span style=color:#66d9ef>InStream</span>;
|
||||
ResponseInStream@<span style=color:#ae81ff>1002</span> : <span style=color:#66d9ef>InStream</span>;
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>NOT</span> BodyTempBlob<span style=color:#f92672>.</span><span style=color:#66d9ef>Blob</span><span style=color:#f92672>.</span>HASVALUE <span style=color:#66d9ef>THEN</span>
|
||||
ERROR<span style=color:#f92672>(</span>NoRequestBodyErr<span style=color:#f92672>)</span>;
|
||||
|
||||
PROCEDURE ProcessFaultResponse@15();
|
||||
VAR
|
||||
XMLDOMMgt@1006 : Codeunit 6224;
|
||||
DotNetExceptionHandler@1000 : Codeunit 1291;
|
||||
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;
|
||||
BEGIN
|
||||
DotNetExceptionHandler.Collect;
|
||||
IF NOT DotNetExceptionHandler.CastToType(WebException,GETDOTNETTYPE(WebException)) THEN
|
||||
DotNetExceptionHandler.Rethrow;
|
||||
IF NOT WebException.Status.Equals(WebExceptionStatus.ProtocolError) THEN
|
||||
ERROR(WebException.Message);
|
||||
ResponseInputStream := WebException.Response.GetResponseStream;
|
||||
DebugLogStreamToTempFile(ResponseInputStream,'WebExceptionResponse',TempDebugLogTempBlob);
|
||||
HttpWebResponseError := WebException.Response;
|
||||
IF NOT (HttpWebResponseError.StatusCode.Equals(HttpStatusCode.Found) OR
|
||||
HttpWebResponseError.StatusCode.Equals(HttpStatusCode.InternalServerError))
|
||||
THEN
|
||||
ERROR(WebException.Message);
|
||||
XmlDoc := XmlDoc.XmlDocument;
|
||||
XmlDoc.Load(ResponseInputStream);
|
||||
ERROR(XMLDOMMgt.FindNodeTextWithNamespace(XmlDoc.DocumentElement,FaultStringXmlPathTxt,'soap',SoapNamespaceTxt));
|
||||
END;
|
||||
PrepareSOAPRequestBody<span style=color:#f92672>(</span>BodyTempBlob<span style=color:#f92672>)</span>;
|
||||
|
||||
OBJECT Codeunit 1291 DotNet Exception Handler
|
||||
COMMIT;
|
||||
|
||||
BankDataConvServiceSetup<span style=color:#f92672>.</span>GET;
|
||||
BodyTempBlob<span style=color:#f92672>.</span><span style=color:#66d9ef>Blob</span><span style=color:#f92672>.</span>CREATEINSTREAM<span style=color:#f92672>(</span>BodyInStream<span style=color:#f92672>)</span>;
|
||||
WebServiceRequestMgt<span style=color:#f92672>.</span>SetGlobals<span style=color:#f92672>(</span>BodyInStream,
|
||||
BankDataConvServiceSetup<span style=color:#f92672>.</span>"Service URL",BankDataConvServiceSetup<span style=color:#f92672>.</span>"User Name",BankDataConvServiceSetup<span style=color:#f92672>.</span>GetPassword<span style=color:#f92672>)</span>;
|
||||
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>NOT</span> WebServiceRequestMgt<span style=color:#f92672>.</span>RUN <span style=color:#66d9ef>THEN</span>
|
||||
WebServiceRequestMgt<span style=color:#f92672>.</span>ProcessFaultResponse;
|
||||
|
||||
WebServiceRequestMgt<span style=color:#f92672>.</span>GetResponseContent<span style=color:#f92672>(</span>ResponseInStream<span style=color:#f92672>)</span>;
|
||||
|
||||
CheckIfErrorsOccurred<span style=color:#f92672>(</span>ResponseInStream,PostingExch<span style=color:#f92672>)</span>;
|
||||
|
||||
ReadContentFromResponse<span style=color:#f92672>(</span>PaymentFileTempBlob,ResponseInStream<span style=color:#f92672>)</span>;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
</code></pre></div><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-al data-lang=al><span style=color:#66d9ef>PROCEDURE</span> ProcessFaultResponse@<span style=color:#ae81ff>15</span><span style=color:#f92672>()</span>;
|
||||
<span style=color:#66d9ef>VAR</span>
|
||||
XMLDOMMgt@<span style=color:#ae81ff>1006</span> : <span style=color:#66d9ef>Codeunit</span> <span style=color:#ae81ff>6224</span>;
|
||||
DotNetExceptionHandler@<span style=color:#ae81ff>1000</span> : <span style=color:#66d9ef>Codeunit</span> <span style=color:#ae81ff>1291</span>;
|
||||
WebException@<span style=color:#ae81ff>1005</span> : <span style=color:#66d9ef>DotNet</span> "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.WebException";
|
||||
WebExceptionStatus@<span style=color:#ae81ff>1004</span> : <span style=color:#66d9ef>DotNet</span> "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.WebExceptionStatus";
|
||||
XmlDoc@<span style=color:#ae81ff>1003</span> : <span style=color:#66d9ef>DotNet</span> "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";
|
||||
HttpWebResponseError@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>DotNet</span> "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebResponse";
|
||||
HttpStatusCode@<span style=color:#ae81ff>1008</span> : <span style=color:#66d9ef>DotNet</span> "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpStatusCode";
|
||||
ResponseInputStream@<span style=color:#ae81ff>1002</span> : <span style=color:#66d9ef>InStream</span>;
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
DotNetExceptionHandler<span style=color:#f92672>.</span>Collect;
|
||||
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>NOT</span> DotNetExceptionHandler<span style=color:#f92672>.</span>CastToType<span style=color:#f92672>(</span>WebException,GETDOTNETTYPE<span style=color:#f92672>(</span>WebException<span style=color:#f92672>)) </span><span style=color:#66d9ef>THEN</span>
|
||||
DotNetExceptionHandler<span style=color:#f92672>.</span>Rethrow;
|
||||
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>NOT</span> WebException<span style=color:#f92672>.</span>Status<span style=color:#f92672>.</span>Equals<span style=color:#f92672>(</span>WebExceptionStatus<span style=color:#f92672>.</span>ProtocolError<span style=color:#f92672>) </span><span style=color:#66d9ef>THEN</span>
|
||||
ERROR<span style=color:#f92672>(</span>WebException<span style=color:#f92672>.</span>Message<span style=color:#f92672>)</span>;
|
||||
|
||||
ResponseInputStream <span style=color:#f92672>:=</span> WebException<span style=color:#f92672>.</span>Response<span style=color:#f92672>.</span>GetResponseStream;
|
||||
DebugLogStreamToTempFile<span style=color:#f92672>(</span>ResponseInputStream,<span style=color:#e6db74>'WebExceptionResponse'</span>,TempDebugLogTempBlob<span style=color:#f92672>)</span>;
|
||||
|
||||
HttpWebResponseError <span style=color:#f92672>:=</span> WebException<span style=color:#f92672>.</span>Response;
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>NOT</span> <span style=color:#f92672>(</span>HttpWebResponseError<span style=color:#f92672>.</span>StatusCode<span style=color:#f92672>.</span>Equals<span style=color:#f92672>(</span>HttpStatusCode<span style=color:#f92672>.</span>Found<span style=color:#f92672>) </span><span style=color:#f92672>OR</span>
|
||||
HttpWebResponseError<span style=color:#f92672>.</span>StatusCode<span style=color:#f92672>.</span>Equals<span style=color:#f92672>(</span>HttpStatusCode<span style=color:#f92672>.</span>InternalServerError<span style=color:#f92672>))
|
||||
</span><span style=color:#f92672> </span><span style=color:#66d9ef>THEN</span>
|
||||
ERROR<span style=color:#f92672>(</span>WebException<span style=color:#f92672>.</span>Message<span style=color:#f92672>)</span>;
|
||||
|
||||
XmlDoc <span style=color:#f92672>:=</span> XmlDoc<span style=color:#f92672>.</span><span style=color:#66d9ef>XmlDocument</span>;
|
||||
XmlDoc<span style=color:#f92672>.</span>Load<span style=color:#f92672>(</span>ResponseInputStream<span style=color:#f92672>)</span>;
|
||||
|
||||
ERROR<span style=color:#f92672>(</span>XMLDOMMgt<span style=color:#f92672>.</span>FindNodeTextWithNamespace<span style=color:#f92672>(</span>XmlDoc<span style=color:#f92672>.</span>DocumentElement,FaultStringXmlPathTxt,<span style=color:#e6db74>'soap'</span>,SoapNamespaceTxt<span style=color:#f92672>))</span>;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
</code></pre></div><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-al data-lang=al>OBJECT <span style=color:#66d9ef>Codeunit</span> <span style=color:#ae81ff>1291</span> <span style=color:#66d9ef>DotNet</span> Exception Handler
|
||||
{
|
||||
OBJECT-PROPERTIES
|
||||
{
|
||||
Date=;
|
||||
Time=;
|
||||
Version List=;
|
||||
OBJECT<span style=color:#f92672>-</span>PROPERTIES
|
||||
{
|
||||
<span style=color:#66d9ef>Date</span>=;
|
||||
<span style=color:#66d9ef>Time</span>=;
|
||||
<span style=color:#66d9ef>Version</span> <span style=color:#66d9ef>List</span>=;
|
||||
}
|
||||
PROPERTIES
|
||||
{
|
||||
OnRun=<span style=color:#66d9ef>BEGIN</span>
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
|
||||
}
|
||||
<span style=color:#66d9ef>CODE</span>
|
||||
{
|
||||
<span style=color:#66d9ef>VAR</span>
|
||||
OuterException@<span style=color:#ae81ff>1000</span> : <span style=color:#66d9ef>DotNet</span> "'mscorlib'.System.Exception";
|
||||
|
||||
<span style=color:#66d9ef>PROCEDURE</span> Catch@<span style=color:#ae81ff>3</span><span style=color:#f92672>(</span><span style=color:#66d9ef>VAR</span> Exception@<span style=color:#ae81ff>1002</span> : <span style=color:#66d9ef>DotNet</span> "'mscorlib'.System.FormatException";<span style=color:#66d9ef>Type</span>@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>DotNet</span> "'mscorlib'.System.Type"<span style=color:#f92672>)</span>;
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
Collect;
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>NOT</span> CastToType<span style=color:#f92672>(</span>Exception,<span style=color:#66d9ef>Type</span><span style=color:#f92672>) </span><span style=color:#66d9ef>THEN</span>
|
||||
Rethrow;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
|
||||
<span style=color:#66d9ef>PROCEDURE</span> Collect@<span style=color:#ae81ff>1</span><span style=color:#f92672>()</span>;
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
OuterException <span style=color:#f92672>:=</span> GETLASTERROROBJECT;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
|
||||
<span style=color:#66d9ef>PROCEDURE</span> TryCastToType@<span style=color:#ae81ff>5</span><span style=color:#f92672>(</span><span style=color:#66d9ef>Type</span>@<span style=color:#ae81ff>1000</span> : <span style=color:#66d9ef>DotNet</span> "'mscorlib'.System.Type"<span style=color:#f92672>) </span>: <span style=color:#66d9ef>Boolean</span>;
|
||||
<span style=color:#66d9ef>VAR</span>
|
||||
Exception@<span style=color:#ae81ff>1001</span> : <span style=color:#66d9ef>DotNet</span> "'mscorlib'.System.FormatException";
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
<span style=color:#66d9ef>EXIT</span><span style=color:#f92672>(</span>CastToType<span style=color:#f92672>(</span>Exception,<span style=color:#66d9ef>Type</span><span style=color:#f92672>))</span>;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
|
||||
<span style=color:#66d9ef>PROCEDURE</span> CastToType@<span style=color:#ae81ff>2</span><span style=color:#f92672>(</span><span style=color:#66d9ef>VAR</span> Exception@<span style=color:#ae81ff>1002</span> : <span style=color:#66d9ef>DotNet</span> "'mscorlib'.System.FormatException";<span style=color:#66d9ef>Type</span>@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>DotNet</span> "'mscorlib'.System.Type"<span style=color:#f92672>) </span>: <span style=color:#66d9ef>Boolean</span>;
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
Exception <span style=color:#f92672>:=</span> OuterException;
|
||||
|
||||
<span style=color:#66d9ef>REPEAT</span>
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#66d9ef>Type</span><span style=color:#f92672>.</span>Equals<span style=color:#f92672>(</span>Exception<span style=color:#f92672>.</span>GetType<span style=color:#f92672>()) </span><span style=color:#66d9ef>THEN</span>
|
||||
<span style=color:#66d9ef>EXIT</span><span style=color:#f92672>(</span>TRUE<span style=color:#f92672>)</span>;
|
||||
Exception <span style=color:#f92672>:=</span> Exception<span style=color:#f92672>.</span>InnerException;
|
||||
<span style=color:#66d9ef>UNTIL</span> ISNULL<span style=color:#f92672>(</span>Exception<span style=color:#f92672>)</span>;
|
||||
|
||||
<span style=color:#66d9ef>EXIT</span><span style=color:#f92672>(</span>FALSE<span style=color:#f92672>)</span>;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
|
||||
<span style=color:#66d9ef>PROCEDURE</span> Rethrow@<span style=color:#ae81ff>4</span><span style=color:#f92672>()</span>;
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>NOT</span> ISNULL<span style=color:#f92672>(</span>OuterException<span style=color:#f92672>.</span>InnerException<span style=color:#f92672>) </span><span style=color:#66d9ef>THEN</span>
|
||||
ERROR<span style=color:#f92672>(</span>OuterException<span style=color:#f92672>.</span>InnerException<span style=color:#f92672>.</span>Message<span style=color:#f92672>)</span>;
|
||||
|
||||
ERROR<span style=color:#f92672>(</span>OuterException<span style=color:#f92672>.</span>Message<span style=color:#f92672>)</span>;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
<span style=color:#66d9ef>END</span><span style=color:#f92672>.
|
||||
</span><span style=color:#f92672> </span>}
|
||||
}
|
||||
PROPERTIES
|
||||
{
|
||||
OnRun=BEGIN
|
||||
END;
|
||||
}
|
||||
CODE
|
||||
{
|
||||
VAR
|
||||
OuterException@1000 : DotNet "'mscorlib'.System.Exception";
|
||||
PROCEDURE Catch@3(VAR Exception@1002 : DotNet "'mscorlib'.System.FormatException";Type@1007 : DotNet "'mscorlib'.System.Type");
|
||||
BEGIN
|
||||
Collect;
|
||||
IF NOT CastToType(Exception,Type) THEN
|
||||
Rethrow;
|
||||
END;
|
||||
PROCEDURE Collect@1();
|
||||
BEGIN
|
||||
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.FormatException";Type@1007 : DotNet "'mscorlib'.System.Type") : Boolean;
|
||||
BEGIN
|
||||
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 NOT ISNULL(OuterException.InnerException) THEN
|
||||
ERROR(OuterException.InnerException.Message);
|
||||
ERROR(OuterException.Message);
|
||||
END;
|
||||
BEGIN
|
||||
END.
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<h2 id=nav-usages>NAV Usages</h2>
|
||||
</code></pre></div><h2 id=nav-usages>NAV Usages</h2>
|
||||
<p>The DotNet Exception Handler codeunit has been used for the Web service integration required for:</p>
|
||||
<ol>
|
||||
<li>Payment Export from the Payment Journal for creating bank-specific payment files.</li>
|
||||
|
|
@ -429,12 +449,12 @@ END.
|
|||
<div style=left:-1000px;overflow:scroll;position:absolute;top:-1000px;border:none;box-sizing:content-box;height:200px;margin:0;padding:0;width:200px>
|
||||
<div style=border:none;box-sizing:content-box;height:200px;margin:0;padding:0;width:200px></div>
|
||||
</div>
|
||||
<script src=/js/clipboard.min.js?1644506471></script>
|
||||
<script src=/js/perfect-scrollbar.min.js?1644506471></script>
|
||||
<script src=/js/perfect-scrollbar.jquery.min.js?1644506471></script>
|
||||
<script src=/js/jquery.svg.pan.zoom.js?1644506471></script>
|
||||
<script src=/js/featherlight.min.js?1644506471></script>
|
||||
<script src=/js/modernizr.custom-3.6.0.js?1644506471></script>
|
||||
<script src=/js/relearn.js?1644506471></script>
|
||||
<script src=/js/clipboard.min.js?1644600601></script>
|
||||
<script src=/js/perfect-scrollbar.min.js?1644600601></script>
|
||||
<script src=/js/perfect-scrollbar.jquery.min.js?1644600601></script>
|
||||
<script src=/js/jquery.svg.pan.zoom.js?1644600601></script>
|
||||
<script src=/js/featherlight.min.js?1644600601></script>
|
||||
<script src=/js/modernizr.custom-3.6.0.js?1644600601></script>
|
||||
<script src=/js/relearn.js?1644600601></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -5,16 +5,16 @@
|
|||
<meta name=generator content="Hugo 0.92.1">
|
||||
<meta name=description content>
|
||||
<title>TryFunction NET Exception Handling in CAL :: AL Guidelines</title>
|
||||
<link href=/css/nucleus.css?1644506469 rel=stylesheet>
|
||||
<link href=/css/fontawesome-all.min.css?1644506469 rel=stylesheet>
|
||||
<link href=/css/featherlight.min.css?1644506469 rel=stylesheet>
|
||||
<link href=/css/perfect-scrollbar.min.css?1644506469 rel=stylesheet>
|
||||
<link href=/css/auto-complete.css?1644506469 rel=stylesheet>
|
||||
<link href=/css/theme.css?1644506469 rel=stylesheet>
|
||||
<link href=/css/theme-blue.css?1644506469 rel=stylesheet>
|
||||
<link href=/css/variant.css?1644506469 rel=stylesheet>
|
||||
<link href=/css/print.css?1644506469 rel=stylesheet media=print>
|
||||
<script src=/js/jquery.min.js?1644506469></script>
|
||||
<link href=/css/nucleus.css?1644600599 rel=stylesheet>
|
||||
<link href=/css/fontawesome-all.min.css?1644600599 rel=stylesheet>
|
||||
<link href=/css/featherlight.min.css?1644600599 rel=stylesheet>
|
||||
<link href=/css/perfect-scrollbar.min.css?1644600599 rel=stylesheet>
|
||||
<link href=/css/auto-complete.css?1644600599 rel=stylesheet>
|
||||
<link href=/css/theme.css?1644600599 rel=stylesheet>
|
||||
<link href=/css/theme-blue.css?1644600599 rel=stylesheet>
|
||||
<link href=/css/variant.css?1644600599 rel=stylesheet>
|
||||
<link href=/css/print.css?1644600599 rel=stylesheet media=print>
|
||||
<script src=/js/jquery.min.js?1644600599></script>
|
||||
<style>:root #header+#content>#left>#rlblock_left{display:none!important}</style>
|
||||
</head>
|
||||
<body data-url=/navpatterns/1-patterns/net-exception-handling-in-cal/tryfunction-net-exception-handling-in-cal/>
|
||||
|
|
@ -32,9 +32,9 @@ ALGuidelines.Dev
|
|||
<input data-search-input id=search-by type=search placeholder=Search...>
|
||||
<span data-search-clear><i class="fas fa-times"></i></span>
|
||||
</div>
|
||||
<script src=/js/lunr.min.js?1644506469></script>
|
||||
<script src=/js/auto-complete.js?1644506469></script>
|
||||
<script src=/js/search.js?1644506469></script>
|
||||
<script src=/js/lunr.min.js?1644600599></script>
|
||||
<script src=/js/auto-complete.js?1644600599></script>
|
||||
<script src=/js/search.js?1644600599></script>
|
||||
</div>
|
||||
<div class=highlightable>
|
||||
<ul class=topics>
|
||||
|
|
@ -300,129 +300,153 @@ ALGuidelines.Dev
|
|||
<p>For instance, if a failure to establish a connection to the web service due to lack of Internet access, a <strong>WebException</strong> is thrown with the relevant error details. <strong>COD1290 Web Service Mgt.</strong> codeunit wraps up the required functionality to interact with a web service in C/AL, handling all the required plumping work to send web requests, receive web responses, and extract valid and error details from the web response.</p>
|
||||
<h3 id=code-sample>Code Sample</h3>
|
||||
<p>The “External Data Handling Codeunit” is a consumer of <strong>COD1290 Web Service Mgt.</strong> codeunit. If a runtime exception occurs, it gets handled as follows:</p>
|
||||
<pre><code>\[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;
|
||||
<div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-al data-lang=al>[TryFunction]
|
||||
<span style=color:#66d9ef>PROCEDURE</span> SendRequestToWebService@<span style=color:#ae81ff>17</span><span style=color:#f92672>()</span>;
|
||||
<span style=color:#66d9ef>VAR</span>
|
||||
WebRequestHelper@<span style=color:#ae81ff>1000</span> : <span style=color:#66d9ef>Codeunit</span> <span style=color:#ae81ff>1299</span>;
|
||||
HttpWebRequest@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>DotNet</span> "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebRequest";
|
||||
HttpStatusCode@<span style=color:#ae81ff>1002</span> : <span style=color:#66d9ef>DotNet</span> "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpStatusCode";
|
||||
ResponseHeaders@<span style=color:#ae81ff>1001</span> : <span style=color:#66d9ef>DotNet</span> "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Collections.Specialized.NameValueCollection";
|
||||
ResponseInStream@<span style=color:#ae81ff>1006</span> : <span style=color:#66d9ef>InStream</span>;
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
CheckGlobals;
|
||||
|
||||
LOCAL PROCEDURE SendDataToConversionService@1(VAR PaymentFileTempBlob@1003 : Record 99008535;BodyTempBlob@1004 : Record 99008535;PostingExch@1007 : Record 1220);
|
||||
VAR
|
||||
BankDataConvServiceSetup@1000 : Record 1260;
|
||||
WebServiceRequestMgt@1001 : Codeunit 1290;
|
||||
BodyInStream@1005 : InStream;
|
||||
ResponseInStream@1002 : InStream;
|
||||
BEGIN
|
||||
IF NOT BodyTempBlob.Blob.HASVALUE THEN
|
||||
ERROR(NoRequestBodyErr);
|
||||
PrepareSOAPRequestBody(BodyTempBlob);
|
||||
COMMIT;
|
||||
BankDataConvServiceSetup.GET;
|
||||
BodyTempBlob.Blob.CREATEINSTREAM(BodyInStream);
|
||||
WebServiceRequestMgt.SetGlobals(BodyInStream,
|
||||
BankDataConvServiceSetup."Service URL",BankDataConvServiceSetup."User Name",BankDataConvServiceSetup.GetPassword);
|
||||
IF NOT WebServiceRequestMgt.SendRequestToWebService THEN
|
||||
WebServiceRequestMgt.ProcessFaultResponse;
|
||||
WebServiceRequestMgt.GetResponseContent(ResponseInStream);
|
||||
CheckIfErrorsOccurred(ResponseInStream,PostingExch);
|
||||
ReadContentFromResponse(PaymentFileTempBlob,ResponseInStream);
|
||||
END;
|
||||
BuildWebRequest<span style=color:#f92672>(</span>GlobalURL,HttpWebRequest<span style=color:#f92672>)</span>;
|
||||
|
||||
PROCEDURE ProcessFaultResponse@15();
|
||||
VAR
|
||||
XMLDOMMgt@1006 : Codeunit 6224;
|
||||
DotNetExceptionHandler@1000 : Codeunit 1291;
|
||||
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;
|
||||
BEGIN
|
||||
DotNetExceptionHandler.Collect;
|
||||
IF NOT DotNetExceptionHandler.CastToType(WebException,GETDOTNETTYPE(WebException)) THEN
|
||||
DotNetExceptionHandler.Rethrow;
|
||||
IF NOT WebException.Status.Equals(WebExceptionStatus.ProtocolError) THEN
|
||||
ERROR(WebException.Message);
|
||||
ResponseInputStream := WebException.Response.GetResponseStream;
|
||||
DebugLogStreamToTempFile(ResponseInputStream,'WebExceptionResponse',TempDebugLogTempBlob);
|
||||
HttpWebResponseError := WebException.Response;
|
||||
IF NOT (HttpWebResponseError.StatusCode.Equals(HttpStatusCode.Found) OR
|
||||
HttpWebResponseError.StatusCode.Equals(HttpStatusCode.InternalServerError))
|
||||
THEN
|
||||
ERROR(WebException.Message);
|
||||
XmlDoc := XmlDoc.XmlDocument;
|
||||
XmlDoc.Load(ResponseInputStream);
|
||||
ERROR(XMLDOMMgt.FindNodeTextWithNamespace(XmlDoc.DocumentElement,FaultStringXmlPathTxt,'soap',SoapNamespaceTxt));
|
||||
END;
|
||||
ResponseInStreamTempBlob<span style=color:#f92672>.</span>INIT;
|
||||
ResponseInStreamTempBlob<span style=color:#f92672>.</span><span style=color:#66d9ef>Blob</span><span style=color:#f92672>.</span>CREATEINSTREAM<span style=color:#f92672>(</span>ResponseInStream<span style=color:#f92672>)</span>;
|
||||
|
||||
OBJECT Codeunit 1291 DotNet Exception Handler
|
||||
CreateSoapRequest<span style=color:#f92672>(</span>HttpWebRequest<span style=color:#f92672>.</span>GetRequestStream,GlobalRequestBodyInStream,GlobalUsername,GlobalPassword<span style=color:#f92672>)</span>;
|
||||
|
||||
WebRequestHelper<span style=color:#f92672>.</span>GetWebResponse<span style=color:#f92672>(</span>HttpWebRequest,HttpWebResponse,ResponseInStream,
|
||||
HttpStatusCode,ResponseHeaders,GlobalProgressDialogEnabled<span style=color:#f92672>)</span>;
|
||||
|
||||
ExtractContentFromResponse<span style=color:#f92672>(</span>ResponseInStream,ResponseBodyTempBlob<span style=color:#f92672>)</span>;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
</code></pre></div><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-al data-lang=al><span style=color:#66d9ef>LOCAL</span> <span style=color:#66d9ef>PROCEDURE</span> SendDataToConversionService@<span style=color:#ae81ff>1</span><span style=color:#f92672>(</span><span style=color:#66d9ef>VAR</span> PaymentFileTempBlob@<span style=color:#ae81ff>1003</span> : <span style=color:#66d9ef>Record</span> <span style=color:#ae81ff>99008535</span>;BodyTempBlob@<span style=color:#ae81ff>1004</span> : <span style=color:#66d9ef>Record</span> <span style=color:#ae81ff>99008535</span>;PostingExch@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>Record</span> <span style=color:#ae81ff>1220</span><span style=color:#f92672>)</span>;
|
||||
<span style=color:#66d9ef>VAR</span>
|
||||
BankDataConvServiceSetup@<span style=color:#ae81ff>1000</span> : <span style=color:#66d9ef>Record</span> <span style=color:#ae81ff>1260</span>;
|
||||
WebServiceRequestMgt@<span style=color:#ae81ff>1001</span> : <span style=color:#66d9ef>Codeunit</span> <span style=color:#ae81ff>1290</span>;
|
||||
BodyInStream@<span style=color:#ae81ff>1005</span> : <span style=color:#66d9ef>InStream</span>;
|
||||
ResponseInStream@<span style=color:#ae81ff>1002</span> : <span style=color:#66d9ef>InStream</span>;
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>NOT</span> BodyTempBlob<span style=color:#f92672>.</span><span style=color:#66d9ef>Blob</span><span style=color:#f92672>.</span>HASVALUE <span style=color:#66d9ef>THEN</span>
|
||||
ERROR<span style=color:#f92672>(</span>NoRequestBodyErr<span style=color:#f92672>)</span>;
|
||||
|
||||
PrepareSOAPRequestBody<span style=color:#f92672>(</span>BodyTempBlob<span style=color:#f92672>)</span>;
|
||||
|
||||
COMMIT;
|
||||
|
||||
BankDataConvServiceSetup<span style=color:#f92672>.</span>GET;
|
||||
BodyTempBlob<span style=color:#f92672>.</span><span style=color:#66d9ef>Blob</span><span style=color:#f92672>.</span>CREATEINSTREAM<span style=color:#f92672>(</span>BodyInStream<span style=color:#f92672>)</span>;
|
||||
WebServiceRequestMgt<span style=color:#f92672>.</span>SetGlobals<span style=color:#f92672>(</span>BodyInStream,BankDataConvServiceSetup<span style=color:#f92672>.</span>"Service URL",
|
||||
BankDataConvServiceSetup<span style=color:#f92672>.</span>"User Name",BankDataConvServiceSetup<span style=color:#f92672>.</span>GetPassword<span style=color:#f92672>)</span>;
|
||||
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>NOT</span> WebServiceRequestMgt<span style=color:#f92672>.</span>SendRequestToWebService <span style=color:#66d9ef>THEN</span>
|
||||
WebServiceRequestMgt<span style=color:#f92672>.</span>ProcessFaultResponse;
|
||||
|
||||
WebServiceRequestMgt<span style=color:#f92672>.</span>GetResponseContent<span style=color:#f92672>(</span>ResponseInStream<span style=color:#f92672>)</span>;
|
||||
|
||||
CheckIfErrorsOccurred<span style=color:#f92672>(</span>ResponseInStream,PostingExch<span style=color:#f92672>)</span>;
|
||||
|
||||
ReadContentFromResponse<span style=color:#f92672>(</span>PaymentFileTempBlob,ResponseInStream<span style=color:#f92672>)</span>;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
</code></pre></div><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-al data-lang=al><span style=color:#66d9ef>PROCEDURE</span> ProcessFaultResponse@<span style=color:#ae81ff>15</span><span style=color:#f92672>()</span>;
|
||||
<span style=color:#66d9ef>VAR</span>
|
||||
XMLDOMMgt@<span style=color:#ae81ff>1006</span> : <span style=color:#66d9ef>Codeunit</span> <span style=color:#ae81ff>6224</span>;
|
||||
DotNetExceptionHandler@<span style=color:#ae81ff>1000</span> : <span style=color:#66d9ef>Codeunit</span> <span style=color:#ae81ff>1291</span>;
|
||||
WebException@<span style=color:#ae81ff>1005</span> : <span style=color:#66d9ef>DotNet</span> "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.WebException";
|
||||
WebExceptionStatus@<span style=color:#ae81ff>1004</span> : <span style=color:#66d9ef>DotNet</span> "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.WebExceptionStatus";
|
||||
XmlDoc@<span style=color:#ae81ff>1003</span> : <span style=color:#66d9ef>DotNet</span> "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";
|
||||
HttpWebResponseError@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>DotNet</span> "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebResponse";
|
||||
HttpStatusCode@<span style=color:#ae81ff>1008</span> : <span style=color:#66d9ef>DotNet</span> "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpStatusCode";
|
||||
ResponseInputStream@<span style=color:#ae81ff>1002</span> : <span style=color:#66d9ef>InStream</span>;
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
DotNetExceptionHandler<span style=color:#f92672>.</span>Collect;
|
||||
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>NOT</span> DotNetExceptionHandler<span style=color:#f92672>.</span>CastToType<span style=color:#f92672>(</span>WebException,GETDOTNETTYPE<span style=color:#f92672>(</span>WebException<span style=color:#f92672>)) </span><span style=color:#66d9ef>THEN</span>
|
||||
DotNetExceptionHandler<span style=color:#f92672>.</span>Rethrow;
|
||||
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>NOT</span> WebException<span style=color:#f92672>.</span>Status<span style=color:#f92672>.</span>Equals<span style=color:#f92672>(</span>WebExceptionStatus<span style=color:#f92672>.</span>ProtocolError<span style=color:#f92672>) </span><span style=color:#66d9ef>THEN</span>
|
||||
ERROR<span style=color:#f92672>(</span>WebException<span style=color:#f92672>.</span>Message<span style=color:#f92672>)</span>;
|
||||
|
||||
ResponseInputStream <span style=color:#f92672>:=</span> WebException<span style=color:#f92672>.</span>Response<span style=color:#f92672>.</span>GetResponseStream;
|
||||
DebugLogStreamToTempFile<span style=color:#f92672>(</span>ResponseInputStream,<span style=color:#e6db74>'WebExceptionResponse'</span>,TempDebugLogTempBlob<span style=color:#f92672>)</span>;
|
||||
|
||||
HttpWebResponseError <span style=color:#f92672>:=</span> WebException<span style=color:#f92672>.</span>Response;
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>NOT</span> <span style=color:#f92672>(</span>HttpWebResponseError<span style=color:#f92672>.</span>StatusCode<span style=color:#f92672>.</span>Equals<span style=color:#f92672>(</span>HttpStatusCode<span style=color:#f92672>.</span>Found<span style=color:#f92672>) </span><span style=color:#f92672>OR</span>
|
||||
HttpWebResponseError<span style=color:#f92672>.</span>StatusCode<span style=color:#f92672>.</span>Equals<span style=color:#f92672>(</span>HttpStatusCode<span style=color:#f92672>.</span>InternalServerError<span style=color:#f92672>))
|
||||
</span><span style=color:#f92672> </span><span style=color:#66d9ef>THEN</span>
|
||||
ERROR<span style=color:#f92672>(</span>WebException<span style=color:#f92672>.</span>Message<span style=color:#f92672>)</span>;
|
||||
|
||||
XmlDoc <span style=color:#f92672>:=</span> XmlDoc<span style=color:#f92672>.</span><span style=color:#66d9ef>XmlDocument</span>;
|
||||
XmlDoc<span style=color:#f92672>.</span>Load<span style=color:#f92672>(</span>ResponseInputStream<span style=color:#f92672>)</span>;
|
||||
|
||||
ERROR<span style=color:#f92672>(</span>XMLDOMMgt<span style=color:#f92672>.</span>FindNodeTextWithNamespace<span style=color:#f92672>(</span>XmlDoc<span style=color:#f92672>.</span>DocumentElement,FaultStringXmlPathTxt,<span style=color:#e6db74>'soap'</span>,SoapNamespaceTxt<span style=color:#f92672>))</span>;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
</code></pre></div><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-al data-lang=al>OBJECT <span style=color:#66d9ef>Codeunit</span> <span style=color:#ae81ff>1291</span> <span style=color:#66d9ef>DotNet</span> Exception Handler
|
||||
{
|
||||
OBJECT-PROPERTIES
|
||||
{
|
||||
Date=;
|
||||
Time=;
|
||||
Version List=;
|
||||
OBJECT<span style=color:#f92672>-</span>PROPERTIES
|
||||
{
|
||||
<span style=color:#66d9ef>Date</span>=;
|
||||
<span style=color:#66d9ef>Time</span>=;
|
||||
<span style=color:#66d9ef>Version</span> <span style=color:#66d9ef>List</span>=;
|
||||
}
|
||||
PROPERTIES
|
||||
{
|
||||
OnRun=<span style=color:#66d9ef>BEGIN</span>
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
}
|
||||
<span style=color:#66d9ef>CODE</span>
|
||||
{
|
||||
<span style=color:#66d9ef>VAR</span>
|
||||
OuterException@<span style=color:#ae81ff>1000</span> : <span style=color:#66d9ef>DotNet</span> "'mscorlib'.System.Exception";
|
||||
|
||||
<span style=color:#66d9ef>PROCEDURE</span> Catch@<span style=color:#ae81ff>3</span><span style=color:#f92672>(</span><span style=color:#66d9ef>VAR</span> Exception@<span style=color:#ae81ff>1002</span> : <span style=color:#66d9ef>DotNet</span> "'mscorlib'.System.FormatException";<span style=color:#66d9ef>Type</span>@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>DotNet</span> "'mscorlib'.System.Type"<span style=color:#f92672>)</span>;
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
Collect;
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>NOT</span> CastToType<span style=color:#f92672>(</span>Exception,<span style=color:#66d9ef>Type</span><span style=color:#f92672>) </span><span style=color:#66d9ef>THEN</span>
|
||||
Rethrow;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
|
||||
<span style=color:#66d9ef>PROCEDURE</span> Collect@<span style=color:#ae81ff>1</span><span style=color:#f92672>()</span>;
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
OuterException <span style=color:#f92672>:=</span> GETLASTERROROBJECT;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
|
||||
<span style=color:#66d9ef>PROCEDURE</span> TryCastToType@<span style=color:#ae81ff>5</span><span style=color:#f92672>(</span><span style=color:#66d9ef>Type</span>@<span style=color:#ae81ff>1000</span> : <span style=color:#66d9ef>DotNet</span> "'mscorlib'.System.Type"<span style=color:#f92672>) </span>: <span style=color:#66d9ef>Boolean</span>;
|
||||
<span style=color:#66d9ef>VAR</span>
|
||||
Exception@<span style=color:#ae81ff>1001</span> : <span style=color:#66d9ef>DotNet</span> "'mscorlib'.System.FormatException";
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
<span style=color:#66d9ef>EXIT</span><span style=color:#f92672>(</span>CastToType<span style=color:#f92672>(</span>Exception,<span style=color:#66d9ef>Type</span><span style=color:#f92672>))</span>;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
|
||||
<span style=color:#66d9ef>PROCEDURE</span> CastToType@<span style=color:#ae81ff>2</span><span style=color:#f92672>(</span><span style=color:#66d9ef>VAR</span> Exception@<span style=color:#ae81ff>1002</span> : <span style=color:#66d9ef>DotNet</span> "'mscorlib'.System.FormatException";<span style=color:#66d9ef>Type</span>@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>DotNet</span> "'mscorlib'.System.Type"<span style=color:#f92672>) </span>: <span style=color:#66d9ef>Boolean</span>;
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
Exception <span style=color:#f92672>:=</span> OuterException;
|
||||
|
||||
<span style=color:#66d9ef>REPEAT</span>
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#66d9ef>Type</span><span style=color:#f92672>.</span>Equals<span style=color:#f92672>(</span>Exception<span style=color:#f92672>.</span>GetType<span style=color:#f92672>()) </span><span style=color:#66d9ef>THEN</span>
|
||||
<span style=color:#66d9ef>EXIT</span><span style=color:#f92672>(</span>TRUE<span style=color:#f92672>)</span>;
|
||||
Exception <span style=color:#f92672>:=</span> Exception<span style=color:#f92672>.</span>InnerException;
|
||||
<span style=color:#66d9ef>UNTIL</span> ISNULL<span style=color:#f92672>(</span>Exception<span style=color:#f92672>)</span>;
|
||||
|
||||
<span style=color:#66d9ef>EXIT</span><span style=color:#f92672>(</span>FALSE<span style=color:#f92672>)</span>;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
|
||||
<span style=color:#66d9ef>PROCEDURE</span> Rethrow@<span style=color:#ae81ff>4</span><span style=color:#f92672>()</span>;
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>NOT</span> ISNULL<span style=color:#f92672>(</span>OuterException<span style=color:#f92672>.</span>InnerException<span style=color:#f92672>) </span><span style=color:#66d9ef>THEN</span>
|
||||
ERROR<span style=color:#f92672>(</span>OuterException<span style=color:#f92672>.</span>InnerException<span style=color:#f92672>.</span>Message<span style=color:#f92672>)</span>;
|
||||
|
||||
ERROR<span style=color:#f92672>(</span>OuterException<span style=color:#f92672>.</span>Message<span style=color:#f92672>)</span>;
|
||||
<span style=color:#66d9ef>END</span>;
|
||||
|
||||
<span style=color:#66d9ef>BEGIN</span>
|
||||
<span style=color:#66d9ef>END</span><span style=color:#f92672>.
|
||||
</span><span style=color:#f92672> </span>}
|
||||
}
|
||||
PROPERTIES
|
||||
{
|
||||
OnRun=BEGIN
|
||||
END;
|
||||
}
|
||||
CODE
|
||||
{
|
||||
VAR
|
||||
OuterException@1000 : DotNet "'mscorlib'.System.Exception";
|
||||
PROCEDURE Catch@3(VAR Exception@1002 : DotNet "'mscorlib'.System.FormatException";Type@1007 : DotNet "'mscorlib'.System.Type");
|
||||
BEGIN
|
||||
Collect;
|
||||
IF NOT CastToType(Exception,Type) THEN
|
||||
Rethrow;
|
||||
END;
|
||||
PROCEDURE Collect@1();
|
||||
BEGIN
|
||||
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.FormatException";Type@1007 : DotNet "'mscorlib'.System.Type") : Boolean;
|
||||
BEGIN
|
||||
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 NOT ISNULL(OuterException.InnerException) THEN
|
||||
ERROR(OuterException.InnerException.Message);
|
||||
ERROR(OuterException.Message);
|
||||
END;
|
||||
BEGIN
|
||||
END.
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<h2 id=nav-usages>NAV Usages</h2>
|
||||
</code></pre></div><h2 id=nav-usages>NAV Usages</h2>
|
||||
<p>The <strong>CO1291 DotNet Exception Handler</strong> codeunit has been used for the Web service integration required for:</p>
|
||||
<ol>
|
||||
<li>Payment Export from the Payment Journal for creating bank-specific payment files.</li>
|
||||
|
|
@ -441,12 +465,12 @@ END.
|
|||
<div style=left:-1000px;overflow:scroll;position:absolute;top:-1000px;border:none;box-sizing:content-box;height:200px;margin:0;padding:0;width:200px>
|
||||
<div style=border:none;box-sizing:content-box;height:200px;margin:0;padding:0;width:200px></div>
|
||||
</div>
|
||||
<script src=/js/clipboard.min.js?1644506469></script>
|
||||
<script src=/js/perfect-scrollbar.min.js?1644506469></script>
|
||||
<script src=/js/perfect-scrollbar.jquery.min.js?1644506469></script>
|
||||
<script src=/js/jquery.svg.pan.zoom.js?1644506469></script>
|
||||
<script src=/js/featherlight.min.js?1644506469></script>
|
||||
<script src=/js/modernizr.custom-3.6.0.js?1644506469></script>
|
||||
<script src=/js/relearn.js?1644506469></script>
|
||||
<script src=/js/clipboard.min.js?1644600599></script>
|
||||
<script src=/js/perfect-scrollbar.min.js?1644600599></script>
|
||||
<script src=/js/perfect-scrollbar.jquery.min.js?1644600599></script>
|
||||
<script src=/js/jquery.svg.pan.zoom.js?1644600599></script>
|
||||
<script src=/js/featherlight.min.js?1644600599></script>
|
||||
<script src=/js/modernizr.custom-3.6.0.js?1644600599></script>
|
||||
<script src=/js/relearn.js?1644600599></script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue