Codeunit 8811 Customer Statement via Queue

App
Base Application
Namespace
Microsoft.Sales.Customer
Versions
17-28

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Sales/Customer/CustomerStatementViaQueue.Codeunit.al63 lines, Copyright (c) Microsoft Corporation. MIT

// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.Sales.Customer;

using Microsoft.Utilities;
using System.Threading;
using System.Utilities;

/// <summary>
/// Executes customer statement reports from the job queue with error logging support.
/// </summary>
codeunit 8811 "Customer Statement via Queue"
{
    TableNo = "Job Queue Entry";

    trigger OnRun()
    var
        TempErrorMessage: Record "Error Message" temporary;
        ErrorContextElement: Codeunit "Error Context Element";
        ErrorMessageManagement: Codeunit "Error Message Management";
        ErrorMessageHandler: Codeunit "Error Message Handler";
        CustomerLayoutStatement: Codeunit "Customer Layout - Statement";
        XmlContent: Text;
    begin
        Rec.CalcFields("Object Caption to Run");
        ErrorMessageManagement.Activate(ErrorMessageHandler);
        ErrorMessageManagement.PushContext(ErrorContextElement, Rec.RecordId, 0, Rec."Object Caption to Run");

        XmlContent := Rec.GetXmlContent();
        if XmlContent = '' then
            ErrorMessageManagement.LogErrorMessage(0, RequestParametersHasNotBeenSetErr, Rec, Rec.FieldNo(XML), '')
        else
            CustomerLayoutStatement.RunReportWithParameters(XmlContent);

        ErrorMessageHandler.AppendTo(TempErrorMessage);
        LogErrors(TempErrorMessage, Rec);
        ErrorMessageManagement.PopContext(ErrorContextElement);
    end;

    var
        RequestParametersHasNotBeenSetErr: Label 'Request parameters for the Standard Statement report have not been set up.';

    local procedure LogActivityFailed(RelatedRecordID: RecordID; ActivityTitle: Text; ActivityMessage: Text)
    var
        ActivityLog: Record "Activity Log";
    begin
        ActivityLog.LogActivity(
            RelatedRecordID, ActivityLog.Status::Failed, ActivityTitle,
            ActivityMessage, '');
    end;

    local procedure LogErrors(var TempErrorMessage: Record "Error Message" temporary; var JobQueueEntry: Record "Job Queue Entry")
    begin
        if TempErrorMessage.FindSet() then
            repeat
                LogActivityFailed(JobQueueEntry.RecordID, JobQueueEntry."Object Caption to Run", TempErrorMessage."Message");
            until TempErrorMessage.Next() = 0;
    end;
}