mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-08-06 17:36:53 +01:00
38 lines
1.3 KiB
AL
38 lines
1.3 KiB
AL
// Demonstration only. Shows the correct pattern: raise the integration event before entering TryFunction.
|
|
|
|
codeunit 50114 "Payment Processor"
|
|
{
|
|
[IntegrationEvent(false, false)]
|
|
procedure OnBeforeSubmitPayment(var PaymentAmount: Decimal; var Cancel: Boolean)
|
|
begin
|
|
end;
|
|
|
|
procedure SubmitPayment(PaymentAmount: Decimal)
|
|
var
|
|
Cancel: Boolean;
|
|
Success: Boolean;
|
|
begin
|
|
Cancel := false;
|
|
// Event raised outside the try scope - subscriber errors propagate normally to the caller.
|
|
OnBeforeSubmitPayment(PaymentAmount, Cancel);
|
|
if Cancel then
|
|
exit;
|
|
|
|
// Only the operation that can fail transiently lives inside TryFunction.
|
|
Success := TryCallPaymentGateway(PaymentAmount);
|
|
if not Success then
|
|
Error('Payment gateway call failed. Check connectivity and retry.');
|
|
end;
|
|
|
|
[TryFunction]
|
|
local procedure TryCallPaymentGateway(PaymentAmount: Decimal)
|
|
var
|
|
Client: HttpClient;
|
|
Response: HttpResponseMessage;
|
|
begin
|
|
// ... build request, set headers ...
|
|
Client.Get('https://payments.example.com/submit?amount=' + Format(PaymentAmount), Response);
|
|
if not Response.IsSuccessStatusCode() then
|
|
Error('HTTP %1', Response.HttpStatusCode());
|
|
end;
|
|
}
|