(Q1) Vorrei sapere ogni volta che una mail è stata inviata correttamente, come posso fare?

Ci sono due soluzioni.

La prima è sottoscrivere questo evento:

    codeunit 18122024 "EOS Adv Mail Routines"

    <summary>This event is raised at the end of standard email sending process.</summary>
    <param name="AdvDocRequest">Current Request</param>
    <param name="AdvDocDocuments">Current Request Document</param>
    [IntegrationEvent(false, false)]
    procedure OnAfterSendMail(AdvDocRequest: Record "EOS AdvDoc Request"; AdvDocDocuments: Record "EOS AdvDoc Documents")
    begin
    end;

Questo evento viene sollevato solamente se l’invio della mail va a buon fine (cioè non viene sollevata una eccezione nel send).

La seconda soluzione è quella di agganciarsi a questo evento e analizzare il risultato salvato nel campo “Status” per ogni docs, nel caso di invio multiplo, o della richiesta, nel caso di mail singola.

codeunit 18122025 "EOS Adv Mail Processing"
    /// <summary>This event is executed after the request processing and after the transaction commit.</summary>
    /// <param name="AdvDocRequest">Processed Request</param>
    /// <param name="AdvDocProcessingLog">This log is already committed and contains execution status and error messages.</param>
    [IntegrationEvent(false, false)]
    local procedure OnAfterAdvDocRequestProcessing(var AdvDocRequest: Record "EOS AdvDoc Request"; var AdvDocProcessingLog: Record "EOS AdvDoc Processing Log")
    begin
    end;

(Q2) Nella report Selection ho aggiunto un report che ha come tabella principale una differente da quella del documento. Come lo gestisco?

Questa situazione, ad esempio, si verifica quando nella report selection delle fatture registrate viene aggiunto un secondo record, ad esempio l’estratto conto. Tale report ha come tabella di partenza la customer e quindi eseguendo la seconda voce passandogli la “Sales Invoice Header” verrebbe sollevato un errore di tabella differente.

E’ stato aggiunto appositamente un evento per gestire questa situazione:

codeunit 18122026 "EOS Adv Mail Sandbox"
/// <summary>This event allows you to print a different record than expected. For example, pass a "customer" record filtered appropriately
/// in place of the document that you originally wanted to print</summary>
/// <param name="AdvDocDocuments">Reference to the original record to be printed</param>
/// <param name="TempReportSelection">Current Report Selection</param>
/// <param name="DocumentToPrint">Open this recordref and apply filters. This record will be passed to the report.</param>
/// <param name="Handled">Return true to override default recordref and use instead returned DocumentToPrint recordref.</param>
[IntegrationEvent(false, false)]
local procedure OnOpenRecordRefToPrint(AdvDocDocuments: Record "EOS AdvDoc Documents"; var TempReportSelection: Record "Report Selections"; var DocumentToPrint: RecordRef; var Handled: Boolean)

Questo evento viene sollevato ogni volta che partendo da una report selection deve essere istanziato un “RecordRef”. Sottoscrivendo questo evento è possibile quindi sapere quale Report Selection stiamo stampando e di conseguenza aprire noi opportunamente il RecordRef.

Nell’esempio sopra descritto ci arriverebbe nella tabella AdvDocDocuments il RecordID che dobbiamo stampare, la “Sales Invoice Header”, ma vedendo che è stato aggiunto nella report selection un report che ha come tabella di partenza un “Customer” allora ci facciamo carico noi di lanciare il report sul record giusto.

Questo esempio, volutamente poco ottimizzato, fà esattamente ciò che ci serve:

[EventSubscriber(ObjectType::Codeunit, Codeunit::"EOS Adv Mail Sandbox", 'OnOpenRecordRefToPrint', '', False, True)]
local procedure OnOpenRecordRefToPrint(AdvDocDocuments: Record "EOS AdvDoc Documents"; var TempReportSelection: Record "Report Selections"; var DocumentToPrint: RecordRef; var Handled: Boolean)
var
    Customer: Record Customer;
    SalesInvoiceHeader: Record "Sales Invoice Header";
    RecRef: RecordRef;
begin
    if AdvDocDocuments."EOS Table No." <> database::"Sales Invoice Header" then
        exit;

    if TempReportSelection."Report ID" <> {Mio Report Estratto Conto} then
        exit;

    //Apro un secondo RecordRef...
    RecRef.Open(AdvDocDocuments."EOS Table No.");

    //...caricando il record che devo stampare
    RecRef.Get(AdvDocDocuments."EOS Record ID");

    //Carico il cliente su cui lanciare l'estratto conto
    Customer.Get(RecRef.Field(SalesInvoiceHeader.FieldNo("Sell-to Customer No.")));

    //Apro il RecordRef, passato per riferimento, sulla tabella "Customer"
    DocumentToPrint.Open(Database::Customer);

    //Carico il record del cliente
    DocumentToPrint.Get(Customer.RecordId());

    //Filtro la tabella sul record corrente, così l'estratto conto non elabora tutti i clienti della tabella ma solo il nostro
    DocumentToPrint.SetRecFilter();

    //Imposto Handled a True, così il chiamante usa il nostro record
    Handled := true;
end;

EOS Labs -