(Q1) Quali sono le differenze tecniche principali tra il report Engine C/AL e L’advanced Reporting AL

La prima differenza è nella generazione del buffer.

Nella versione AL è obbligatorio invocare la generazione del buffer se il report è del report engine e poi eseguirlo. Ad Esempio:

IF ReportBufferMgt.TryPrepareBuffer(TempReportSelections."Report ID", RecordVariant, TempReportSelections."Report Setup Code") THEN
    report.RunModal(TempReportSelections."Report ID", IsGUI, FALSE)
ELSE
    report.RunModal(TempReportSelections."Report ID",IsGUI,FALSE,RecVarToPrint);

Questo comporta che il buffer venga generato prima della scelta del “Report Setup” e quindi il report debba scegliere quali righe stampare e quali no.

La versione AL riprende la stampa classica ed è totalmente compatibile con il Report.Runmodal() senza bisogno di popolare alcun buffer.

Questo viene risolto aggiungendo nei report dei “fake dataitem” come questo:

dataitem(FakeSalesHeader; "Sales Header")
{
    DataItemTableView = sorting ("Document Type", "No.");
    Description = 'Fake Sales Header, Only for Report Selection Integration';
    trigger OnPreDataItem()
    begin
        CurrReport.Break();
    end;
}

Che hanno il solo scopo di ricevere la tabella filtrata dall’esterno e permetterne la successiva analisi per capire quale è il record da stampare:

AdvRptRoutines.GetDocumentToPrint(FakeSalesHeader, DocVariant):

Con la limitazione di poter usare questo approccio solo su tabelle previste (ma ogni report include le 14 principali), rende l’elaborazione trasparente.

Il buffer viene quindi generato solo dopo che l’utente ha scelto sulla request page il report setup pertanto il dataset da stampare è realmente l’elaborato finale.

(Q2) Quale è la sequenza di elaborazione nella generazione del buffer report?

Questo diagramma mostra come internamente vengono sollevati i vari eventi a cui possiamo integrarci.

Nello schema i processi color verde acido sono eventi di tipo layout mentre quelli azzurri sono eventi classici.

Diagramma di invocazione eventi


EOS Labs -