Codeunit 1291 DotNet Exception Handler, source in 29
Source29
src/Layers/W1/BaseApp/Modules/System/ExceptionHandling/DotNetExceptionHandler.Codeunit.al89 lines, Copyright (c) Microsoft Corporation. MIT
namespace System.Utilities;
using System;
codeunit 1291 "DotNet Exception Handler"
{
InherentEntitlements = X;
InherentPermissions = X;
trigger OnRun()
begin
end;
var
OuterException: DotNet Exception;
[Scope('OnPrem')]
procedure Catch(var Exception: DotNet Exception; Type: DotNet Type)
begin
Collect();
if not CastToType(Exception, Type) then
Rethrow();
end;
procedure Collect()
begin
OuterException := GetLastErrorObject();
end;
local procedure IsCollected(): Boolean
begin
exit(not IsNull(OuterException));
end;
[Scope('OnPrem')]
procedure TryCastToType(Type: DotNet Type): Boolean
var
Exception: DotNet FormatException;
begin
exit(CastToType(Exception, Type));
end;
[Scope('OnPrem')]
procedure CastToType(var Exception: DotNet Exception; Type: DotNet Type): Boolean
begin
if not IsCollected() then
exit(false);
Exception := OuterException.GetBaseException();
if IsNull(Exception) then
exit(false);
if Type.Equals(Exception.GetType()) then
exit(true);
exit(false);
end;
procedure GetMessage(): Text
var
Exception: DotNet Exception;
begin
if not IsCollected() then
exit;
Exception := OuterException.GetBaseException();
if IsNull(Exception) then
exit;
exit(Exception.Message);
end;
procedure Rethrow()
var
RootCauseMessage: Text;
begin
RootCauseMessage := GetMessage();
if RootCauseMessage <> '' then
Error(RootCauseMessage);
if IsNull(OuterException.InnerException) then
Error(OuterException.Message);
Error(OuterException.InnerException.Message);
end;
}