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
начинает стрелять.