This commit is contained in:
TheDoubleH 2022-02-11 17:30:04 +00:00
parent de09820554
commit e4f08bf9a7
187 changed files with 6620 additions and 6342 deletions

View file

@ -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 &ldquo;External Data Handling Codeunit&rdquo; 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.&quot;Service URL&quot;,BankDataConvServiceSetup.&quot;User Name&quot;,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 &quot;'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.WebException&quot;;
WebExceptionStatus@1004 : DotNet &quot;'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.WebExceptionStatus&quot;;
XmlDoc@1003 : DotNet &quot;'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument&quot;;
HttpWebResponseError@1007 : DotNet &quot;'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebResponse&quot;;
HttpStatusCode@1008 : DotNet &quot;'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpStatusCode&quot;;
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>&#34;Service URL&#34;,BankDataConvServiceSetup<span style=color:#f92672>.</span>&#34;User Name&#34;,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> &#34;&#39;System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#39;.System.Net.WebException&#34;;
WebExceptionStatus@<span style=color:#ae81ff>1004</span> : <span style=color:#66d9ef>DotNet</span> &#34;&#39;System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#39;.System.Net.WebExceptionStatus&#34;;
XmlDoc@<span style=color:#ae81ff>1003</span> : <span style=color:#66d9ef>DotNet</span> &#34;&#39;System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#39;.System.Xml.XmlDocument&#34;;
HttpWebResponseError@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>DotNet</span> &#34;&#39;System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#39;.System.Net.HttpWebResponse&#34;;
HttpStatusCode@<span style=color:#ae81ff>1008</span> : <span style=color:#66d9ef>DotNet</span> &#34;&#39;System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#39;.System.Net.HttpStatusCode&#34;;
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>&#39;WebExceptionResponse&#39;</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>&#39;soap&#39;</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> &#34;&#39;mscorlib&#39;.System.Exception&#34;;
<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> &#34;&#39;mscorlib&#39;.System.FormatException&#34;;<span style=color:#66d9ef>Type</span>@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>DotNet</span> &#34;&#39;mscorlib&#39;.System.Type&#34;<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> &#34;&#39;mscorlib&#39;.System.Type&#34;<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> &#34;&#39;mscorlib&#39;.System.FormatException&#34;;
<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> &#34;&#39;mscorlib&#39;.System.FormatException&#34;;<span style=color:#66d9ef>Type</span>@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>DotNet</span> &#34;&#39;mscorlib&#39;.System.Type&#34;<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 &quot;'mscorlib'.System.Exception&quot;;
PROCEDURE Catch@3(VAR Exception@1002 : DotNet &quot;'mscorlib'.System.FormatException&quot;;Type@1007 : DotNet &quot;'mscorlib'.System.Type&quot;);
BEGIN
Collect;
IF NOT CastToType(Exception,Type) THEN
Rethrow;
END;
PROCEDURE Collect@1();
BEGIN
OuterException := GETLASTERROROBJECT;
END;
PROCEDURE TryCastToType@5(Type@1000 : DotNet &quot;'mscorlib'.System.Type&quot;) : Boolean;
VAR
Exception@1001 : DotNet &quot;'mscorlib'.System.FormatException&quot;;
BEGIN
EXIT(CastToType(Exception,Type));
END;
PROCEDURE CastToType@2(VAR Exception@1002 : DotNet &quot;'mscorlib'.System.FormatException&quot;;Type@1007 : DotNet &quot;'mscorlib'.System.Type&quot;) : 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>

View file

@ -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 &ldquo;External Data Handling Codeunit&rdquo; 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 &quot;'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebRequest&quot;;
HttpStatusCode@1002 : DotNet &quot;'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpStatusCode&quot;;
ResponseHeaders@1001 : DotNet &quot;'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Collections.Specialized.NameValueCollection&quot;;
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> &#34;&#39;System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#39;.System.Net.HttpWebRequest&#34;;
HttpStatusCode@<span style=color:#ae81ff>1002</span> : <span style=color:#66d9ef>DotNet</span> &#34;&#39;System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#39;.System.Net.HttpStatusCode&#34;;
ResponseHeaders@<span style=color:#ae81ff>1001</span> : <span style=color:#66d9ef>DotNet</span> &#34;&#39;System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#39;.System.Collections.Specialized.NameValueCollection&#34;;
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.&quot;Service URL&quot;,BankDataConvServiceSetup.&quot;User Name&quot;,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 &quot;'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.WebException&quot;;
WebExceptionStatus@1004 : DotNet &quot;'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.WebExceptionStatus&quot;;
XmlDoc@1003 : DotNet &quot;'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument&quot;;
HttpWebResponseError@1007 : DotNet &quot;'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebResponse&quot;;
HttpStatusCode@1008 : DotNet &quot;'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpStatusCode&quot;;
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>&#34;Service URL&#34;,
BankDataConvServiceSetup<span style=color:#f92672>.</span>&#34;User Name&#34;,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> &#34;&#39;System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#39;.System.Net.WebException&#34;;
WebExceptionStatus@<span style=color:#ae81ff>1004</span> : <span style=color:#66d9ef>DotNet</span> &#34;&#39;System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#39;.System.Net.WebExceptionStatus&#34;;
XmlDoc@<span style=color:#ae81ff>1003</span> : <span style=color:#66d9ef>DotNet</span> &#34;&#39;System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#39;.System.Xml.XmlDocument&#34;;
HttpWebResponseError@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>DotNet</span> &#34;&#39;System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#39;.System.Net.HttpWebResponse&#34;;
HttpStatusCode@<span style=color:#ae81ff>1008</span> : <span style=color:#66d9ef>DotNet</span> &#34;&#39;System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#39;.System.Net.HttpStatusCode&#34;;
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>&#39;WebExceptionResponse&#39;</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>&#39;soap&#39;</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> &#34;&#39;mscorlib&#39;.System.Exception&#34;;
<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> &#34;&#39;mscorlib&#39;.System.FormatException&#34;;<span style=color:#66d9ef>Type</span>@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>DotNet</span> &#34;&#39;mscorlib&#39;.System.Type&#34;<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> &#34;&#39;mscorlib&#39;.System.Type&#34;<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> &#34;&#39;mscorlib&#39;.System.FormatException&#34;;
<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> &#34;&#39;mscorlib&#39;.System.FormatException&#34;;<span style=color:#66d9ef>Type</span>@<span style=color:#ae81ff>1007</span> : <span style=color:#66d9ef>DotNet</span> &#34;&#39;mscorlib&#39;.System.Type&#34;<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 &quot;'mscorlib'.System.Exception&quot;;
PROCEDURE Catch@3(VAR Exception@1002 : DotNet &quot;'mscorlib'.System.FormatException&quot;;Type@1007 : DotNet &quot;'mscorlib'.System.Type&quot;);
BEGIN
Collect;
IF NOT CastToType(Exception,Type) THEN
Rethrow;
END;
PROCEDURE Collect@1();
BEGIN
OuterException := GETLASTERROROBJECT;
END;
PROCEDURE TryCastToType@5(Type@1000 : DotNet &quot;'mscorlib'.System.Type&quot;) : Boolean;
VAR
Exception@1001 : DotNet &quot;'mscorlib'.System.FormatException&quot;;
BEGIN
EXIT(CastToType(Exception,Type));
END;
PROCEDURE CastToType@2(VAR Exception@1002 : DotNet &quot;'mscorlib'.System.FormatException&quot;;Type@1007 : DotNet &quot;'mscorlib'.System.Type&quot;) : 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>