Codeunit 487 Job Queue Start Report, source in 29
Source29
src/Layers/W1/BaseApp/System/JobQueue/JobQueueStartReport.Codeunit.al253 lines, Copyright (c) Microsoft Corporation. MIT
namespace System.Threading;
using Microsoft.EServices.EDocument;
codeunit 487 "Job Queue Start Report" implements "Job Queue Report Runner"
{
TableNo = "Job Queue Entry";
trigger OnRun()
var
JobQueueStartReportBase: Codeunit "Job Queue Start Report Base";
begin
JobQueueStartReportBase.RunReport(Rec."Object ID to Run", Rec);
end;
procedure RunReport(ReportID: Integer; var JobQueueEntry: Record "Job Queue Entry")
var
ReportInbox: Record "Report Inbox";
JobQueueStartReport: Codeunit "Job Queue Start Report";
RecRef: RecordRef;
OutStr: OutStream;
RunOnRec: Boolean;
IsHandled: Boolean;
ShouldModifyNotifyOnSuccess: Boolean;
begin
ReportInbox.Init();
ReportInbox."User ID" := JobQueueEntry."User ID";
ReportInbox."Job Queue Log Entry ID" := JobQueueEntry.ID;
ReportInbox."Report ID" := ReportID;
ReportInbox.Description := JobQueueEntry.Description;
ReportInbox."Report Output".CreateOutStream(OutStr);
JobQueueStartReport.OnRunReportOnAfterAssignFields(ReportInbox, JobQueueEntry);
RunOnRec := RecRef.Get(JobQueueEntry."Record ID to Process");
if RunOnRec then
RecRef.SetRecFilter();
case JobQueueEntry."Report Output Type" of
JobQueueEntry."Report Output Type"::Print:
ProcessPrint(ReportID, JobQueueEntry, RunOnRec, RecRef);
JobQueueEntry."Report Output Type"::PDF:
begin
ProcessSaveAs(ReportID, JobQueueEntry, RunOnRec, RecRef, REPORTFORMAT::Pdf, OutStr);
ReportInbox."Output Type" := ReportInbox."Output Type"::PDF;
end;
JobQueueEntry."Report Output Type"::Word:
begin
ProcessSaveAs(ReportID, JobQueueEntry, RunOnRec, RecRef, REPORTFORMAT::Word, OutStr);
ReportInbox."Output Type" := ReportInbox."Output Type"::Word;
end;
JobQueueEntry."Report Output Type"::Excel:
begin
ProcessSaveAs(ReportID, JobQueueEntry, RunOnRec, RecRef, REPORTFORMAT::Excel, OutStr);
ReportInbox."Output Type" := ReportInbox."Output Type"::Excel;
end;
end;
OnRunReportOnAfterProcessDifferentReportOutputTypes(ReportID, JobQueueEntry);
case JobQueueEntry."Report Output Type" of
JobQueueEntry."Report Output Type"::"None (Processing only)":
begin
ShouldModifyNotifyOnSuccess := JobQueueEntry."Notify On Success" = false;
OnRunReportOnAfterCalcShouldModifyNotifyOnSuccess(ReportID, JobQueueEntry, ShouldModifyNotifyOnSuccess);
if ShouldModifyNotifyOnSuccess then begin
JobQueueEntry."Notify On Success" := true;
JobQueueEntry.Modify();
end;
end;
JobQueueEntry."Report Output Type"::Print:
;
else begin
IsHandled := false;
OnRunReportOnBeforeReportInboxInsert(ReportInbox, JobQueueEntry, IsHandled);
if not IsHandled then begin
ReportInbox."Created Date-Time" := RoundDateTime(CurrentDateTime, 60000);
ReportInbox.Insert(true);
end;
end;
end;
end;
local procedure ProcessJobQueueRun(ReportID: Integer; var JobQueueEntry: Record "Job Queue Entry"; var ReportInbox: Record "Report Inbox")
var
ShouldModifyNotifyOnSuccess: Boolean;
IsHandled: Boolean;
begin
case JobQueueEntry."Report Output Type" of
JobQueueEntry."Report Output Type"::"None (Processing only)":
begin
ShouldModifyNotifyOnSuccess := JobQueueEntry."Notify On Success" = false;
OnRunReportOnAfterCalcShouldModifyNotifyOnSuccess(ReportID, JobQueueEntry, ShouldModifyNotifyOnSuccess);
if ShouldModifyNotifyOnSuccess then begin
JobQueueEntry."Notify On Success" := true;
JobQueueEntry.Modify();
end;
end;
JobQueueEntry."Report Output Type"::Print:
;
else begin
IsHandled := false;
OnRunReportOnBeforeReportInboxInsert(ReportInbox, JobQueueEntry, IsHandled);
if not IsHandled then begin
ReportInbox."Created Date-Time" := RoundDateTime(CurrentDateTime, 60000);
ReportInbox.Insert(true);
end;
end;
end;
OnRunReportOnBeforeCommit(ReportInbox, JobQueueEntry);
Commit();
end;
local procedure ProcessPrint(ReportID: Integer; var JobQueueEntry: Record "Job Queue Entry"; RunOnRec: Boolean; var RecRef: RecordRef)
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeProcessPrint(ReportID, JobQueueEntry, IsHandled, RecRef);
if IsHandled then
exit;
if RunOnRec then
REPORT.Print(ReportID, JobQueueEntry.GetReportParameters(), JobQueueEntry."Printer Name", RecRef)
else
REPORT.Print(ReportID, JobQueueEntry.GetReportParameters(), JobQueueEntry."Printer Name");
OnAfterProcessPrint(ReportId, JobQueueEntry, RunOnRec);
end;
local procedure ProcessSaveAs(ReportID: Integer; var JobQueueEntry: Record "Job Queue Entry"; RunOnRec: Boolean; var RecordRef: RecordRef; RepFormat: ReportFormat; var OutStream: OutStream)
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeProcessSaveAs(ReportID, JobQueueEntry, RunOnRec, RecordRef, RepFormat, OutStream, IsHandled);
if IsHandled then
exit;
if RunOnRec then
REPORT.SaveAs(ReportID, JobQueueEntry.GetReportParameters(), RepFormat, OutStream, RecordRef)
else
REPORT.SaveAs(ReportID, JobQueueEntry.GetReportParameters(), RepFormat, OutStream);
end;
#if not CLEAN27
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Job Queue Start Report Base", OnBeforeRunReport, '', false, false)]
local procedure OnBeforeRunReportBase(ReportID: Integer; var JobQueueEntry: Record "Job Queue Entry"; var IsHandled: Boolean)
begin
OnBeforeRunReport(ReportID, JobQueueEntry, IsHandled);
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Job Queue Start Report Base", OnBeforeRunReportInterface, '', false, false)]
local procedure OnBeforeRunReportInterfaceBase(ReportID: Integer; var JobQueueEntry: Record "Job Queue Entry")
var
ReportInbox: Record "Report Inbox";
begin
ReportInbox.Init();
ReportInbox."User ID" := JobQueueEntry."User ID";
ReportInbox."Job Queue Log Entry ID" := JobQueueEntry.ID;
ReportInbox."Report ID" := ReportID;
ReportInbox.Description := JobQueueEntry.Description;
OnRunReportOnAfterAssignFields(ReportInbox, JobQueueEntry);
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Job Queue Start Report Runner", OnAfterRunReport, '', false, false)]
local procedure OnAfterRunReportInterface(ReportID: Integer; var JobQueueEntry: Record "Job Queue Entry")
var
ReportInbox: Record "Report Inbox";
begin
ReportInbox.Init();
ReportInbox."User ID" := JobQueueEntry."User ID";
ReportInbox."Job Queue Log Entry ID" := JobQueueEntry.ID;
ReportInbox."Report ID" := ReportID;
ReportInbox.Description := JobQueueEntry.Description;
OnRunReportOnBeforeCommit(ReportInbox, JobQueueEntry);
end;
#endif
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Job Queue Start Report Runner", OnAfterExecuteReport, '', false, false)]
local procedure OnAfterExecuteReportBaseRunner(ReportID: Integer; var JobQueueEntry: Record "Job Queue Entry"; var ShouldModifyNotifyOnSuccess: Boolean)
var
ReportInbox: Record "Report Inbox";
OriginalReportOutputType: Enum "Job Queue Report Output Type";
begin
OriginalReportOutputType := JobQueueEntry."Report Output Type";
OnRunReportOnAfterProcessDifferentReportOutputTypes(ReportID, JobQueueEntry);
if JobQueueEntry."Report Output Type" = OriginalReportOutputType then
OnRunReportOnAfterCalcShouldModifyNotifyOnSuccess(ReportID, JobQueueEntry, ShouldModifyNotifyOnSuccess)
else begin
ReportInbox.Init();
ReportInbox."User ID" := JobQueueEntry."User ID";
ReportInbox."Job Queue Log Entry ID" := JobQueueEntry.ID;
ReportInbox."Report ID" := ReportID;
ReportInbox.Description := JobQueueEntry.Description;
ProcessJobQueueRun(ReportID, JobQueueEntry, ReportInbox);
end;
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeProcessPrint(ReportID: Integer; var JobQueueEntry: Record "Job Queue Entry"; var IsHandled: Boolean; var RecordRef: RecordRef)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeProcessSaveAs(ReportID: Integer; var JobQueueEntry: Record "Job Queue Entry"; RunOnRec: Boolean; var RecordRef: RecordRef; RepFormat: ReportFormat; var OutStream: OutStream; var IsHandled: Boolean)
begin
end;
#if not CLEAN27
[IntegrationEvent(false, false)]
[Obsolete('This event has been moved to "Job Queue Start Report Base".', '27.0')]
local procedure OnBeforeRunReport(ReportID: Integer; var JobQueueEntry: Record "Job Queue Entry"; var IsHandled: Boolean)
begin
end;
#endif
[IntegrationEvent(false, false)]
local procedure OnRunReportOnAfterCalcShouldModifyNotifyOnSuccess(ReportID: Integer; var JobQueueEntry: Record "Job Queue Entry"; var ShouldModifyNotifyOnSuccess: Boolean)
begin
end;
[IntegrationEvent(false, false)]
#if not CLEAN27 // Warn users about breaking change even though event still exists
[Obsolete('This event will continue existing but only called for Job Queue Entries with output type <> None with this obsoletion. To handle Job Queue Entries of type None, hook into "Job Queue Start Report Base".OnBeforeRunReportInterface.', '27.0')]
#endif
internal procedure OnRunReportOnAfterAssignFields(var ReportInbox: Record "Report Inbox"; var JobQueueEntry: Record "Job Queue Entry")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnRunReportOnAfterProcessDifferentReportOutputTypes(ReportID: Integer; var JobQueueEntry: Record "Job Queue Entry")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnRunReportOnBeforeReportInboxInsert(ReportInbox: Record "Report Inbox"; var JobQueueEntry: Record "Job Queue Entry"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
#if not CLEAN27 // Warn users about breaking change even though event still exists
[Obsolete('This event will continue existing but only called for Job Queue Entries with output type <> None with this obsoletion. To handle Job Queue Entries of type None, hook into "Job Queue Start Report Runner".OnAfterRunReport.', '27.0')]
#endif
local procedure OnRunReportOnBeforeCommit(ReportInbox: Record "Report Inbox"; var JobQueueEntry: Record "Job Queue Entry")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterProcessPrint(ReportID: Integer; var JobQueueEntry: Record "Job Queue Entry"; RunOnRec: Boolean)
begin
end;
}