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.
Why do you need this change?
We need to extend the
caseblock insideOnOpenPageof Report 292 "Copy Sales Document" to handle additional custom document types — specificallyFOODStandingOrder— when resolving the source sales document fromFromDocNo. The standard code evaluatesFromDocTypethrough a fixedcasestatement and callsFromSalesHeader.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 onFromSalesHeaderbeing correctly populated at this point. If the custom document type is not handled beforeValidateDocNo()executes,FromSalesHeaderwill remain empty andFromDocNowill 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 correctFromSalesHeader. No event currently exists before theif FromDocNo <> '' then beginblock inOnOpenPage.Describe the request
Add an integration event
OnBeforeOpenPageat the start of triggerOnOpenPage()withIsHandledsupport.Event Signature:
Alternatives evaluated:
OnAfterOpenPage()already exists, but it fires after the document-loadingcaseblock has completed, so a subscriber there cannot change or skip the base retrieval logic. No event currently exists before theif FromDocNo <> '' then beginblock inOnOpenPage.