Business Central — OnCustomDocumentMergerEx даже не запускается

Недавно я попытался реорганизовать устаревшую часть нашего кода, которая представляет собой подписку на событие OnBeforeMergeDocument, потому что у меня были некоторые проблемы с именем принтера, о которых я писал в этом посте о переполнении стека .

Затем я попытался привязаться к новому событию, используя следующий код

          [EventSubscriber(ObjectType::Codeunit, Codeunit::ReportManagement, 'OnCustomDocumentMergerEx', '', true, true)]
    local procedure OnCustomDocumentMergerEx(ObjectID: Integer; ReportAction: Option SaveAsPdf,SaveAsWord,SaveAsExcel,Preview,Print,SaveAsHtml; ObjectPayload: JsonObject; XmlData: InStream; LayoutData: InStream; var DocumentStream: OutStream; var IsHandled: Boolean)
    var
        Test: Text;
    begin
        Test := 'test';
        IsHandled := true;
    end;

Как и в случае с событием OnBeforeMergeDocument, я ожидал, что оно сработает при предварительном просмотре, печати или отправке отчета (например, если вы перейдете в Business Central > опубликованные счета-фактуры > распечатать/отправить > распечатать). Однако это не так, и я получаю сообщение «Пользовательский макет отчета для» пуст. почему это? и почему событие не срабатывает, когда я думаю, что оно сработает?

1 ответ

Это поведение сильно отличается для локального развертывания/развертывания SaaS и версий с 19 по 21. Я предполагаю, что вы используете экземпляр SaaS, обновленный до последней версии (21.3). В этой версии подготовка макета отчета по умолчанию осуществляется платформой, а события приложения не инициируются. Чтобы изменить поток, подпишитесь на событиеApplicationReportMergeStrategyв кодовом блокеReporting Triggersи измените стратегию слияния на Application.

          [EventSubscriber(ObjectType::Codeunit, Codeunit::"Reporting Triggers", 'ApplicationReportMergeStrategy', '', false, false)]
    local procedure SetMergeStrategy(ObjectId: Integer; LayoutCode: Text; var InApplication: Boolean)
    begin
        // if ObjectId = ... - if the strategy is set for a specific report object
        InApplication := true;
    end;

Как только стратегия слияния изменена на Применение, событиеOnCustomDocumentMergerExначинает стрелять.

Другие вопросы по тегам