Skip to content

[W1][Report][292][Copy Sales Document] Add integration event OnBeforeOpenPage in OnOpenPage to allow extending source document type handling. #30119

@mavohra

Description

@mavohra

Why do you need this change?

We need to extend the case block inside OnOpenPage of Report 292 "Copy Sales Document" to handle additional custom document types — specifically FOODStandingOrder — when resolving the source sales document from FromDocNo. The standard code evaluates FromDocType through a fixed case statement and calls FromSalesHeader.Get(...) accordingly, but there is no extensibility hook before this block to allow extensions to inject handling for custom document types or skip the standard resolution entirely.

All subsequent logic in ValidateDocNo() and the request page fields depends on FromSalesHeader being correctly populated at this point. If the custom document type is not handled before ValidateDocNo() executes, FromSalesHeader will remain empty and FromDocNo will be cleared, breaking the request page state.

OnAfterOpenPage() already exists but fires after thecaseblock has completed, making it too late to inject custom document type handling or correct FromSalesHeader. No event currently exists before the if FromDocNo <> '' then begin block in OnOpenPage.

Describe the request

Add an integration event OnBeforeOpenPage at the start of trigger OnOpenPage() with IsHandled support.

trigger OnOpenPage()
var
    IsHandled: Boolean;
begin
    if FromDocNo <> '' then begin
        IsHandled := false;
        OnBeforeOpenPage(FromDocNo, FromDocType, FromSalesHeader, 
            FromSalesShptHeader, FromSalesInvHeader, FromReturnRcptHeader, 
            FromSalesCrMemoHeader, FromSalesHeaderArchive, 
            FromDocNoOccurrence, FromDocVersionNo, IsHandled); 
        if not IsHandled then
            case FromDocType of
                FromDocType::Quote:
                    if FromSalesHeader.Get(FromSalesHeader."Document Type"::Quote, FromDocNo) then
                        ;
                FromDocType::"Blanket Order":
                    if FromSalesHeader.Get(FromSalesHeader."Document Type"::"Blanket Order", FromDocNo) then
                        ;
                FromDocType::Order:
                    if FromSalesHeader.Get(FromSalesHeader."Document Type"::Order, FromDocNo) then
                        ;
                // ......
            end;
        if FromSalesHeader."No." = '' then
            FromDocNo := '';
    end;
    ValidateDocNo();
    OnAfterOpenPage();
end;  

Event Signature:

 [IntegrationEvent(false, false)]
local procedure OnBeforeOpenPage(
    FromDocNo: Code[20];
    FromDocType: Enum "Sales Document Type From";
    var FromSalesHeader: Record "Sales Header";
    var FromSalesShptHeader: Record "Sales Shipment Header";
    var FromSalesInvHeader: Record "Sales Invoice Header";
    var FromReturnRcptHeader: Record "Return Receipt Header";
    var FromSalesCrMemoHeader: Record "Sales Cr.Memo Header";
    var FromSalesHeaderArchive: Record "Sales Header Archive";
    FromDocNoOccurrence: Integer;
    FromDocVersionNo: Integer;
    var IsHandled: Boolean)
begin
end;

Alternatives evaluated:
OnAfterOpenPage() already exists, but it fires after the document-loading case block has completed, so a subscriber there cannot change or skip the base retrieval logic. No event currently exists before theif FromDocNo <> '' then beginblock in OnOpenPage.

Metadata

Metadata

Assignees

No one assigned

    Labels

    missing-infoThe issue misses information that prevents it from completion.

    Type

    No fields configured for Task.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions