From a2865c102f01cacb570a880fe5b7f0434749433c Mon Sep 17 00:00:00 2001 From: Vladyslav Kovalchuk Date: Tue, 10 Mar 2026 13:30:57 +0200 Subject: [PATCH] [Bug]: Two sessions can process the same Audit File Export Line simultaneously --- .../app/src/ExportEngine/AuditFileExportMgt.Codeunit.al | 7 ++++++- .../app/src/ExportEngine/AuditLineExportRunner.Codeunit.al | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Apps/W1/AuditFileExport/app/src/ExportEngine/AuditFileExportMgt.Codeunit.al b/Apps/W1/AuditFileExport/app/src/ExportEngine/AuditFileExportMgt.Codeunit.al index 1a2095b2a7..3ae8a1b5e2 100644 --- a/Apps/W1/AuditFileExport/app/src/ExportEngine/AuditFileExportMgt.Codeunit.al +++ b/Apps/W1/AuditFileExport/app/src/ExportEngine/AuditFileExportMgt.Codeunit.al @@ -289,11 +289,16 @@ codeunit 5261 "Audit File Export Mgt." OnBeforeScheduleTask(DoNotScheduleTask, TaskID); if DoNotScheduleTask then AuditFileExportLine."Task ID" := TaskID - else + else begin + if not IsNullGuid(AuditFileExportLine."Task ID") then + if TaskScheduler.TaskExists(AuditFileExportLine."Task ID") then + TaskScheduler.CancelTask(AuditFileExportLine."Task ID"); + AuditFileExportLine."Task ID" := TaskScheduler.CreateTask( Codeunit::"Audit Line Export Runner", Codeunit::"Audit File Export Error Handl.", true, CompanyName(), NotBefore, AuditFileExportLine.RecordId()); + end; AuditFileExportLine.Modify(true); Commit(); NoOfJobs += 1; diff --git a/Apps/W1/AuditFileExport/app/src/ExportEngine/AuditLineExportRunner.Codeunit.al b/Apps/W1/AuditFileExport/app/src/ExportEngine/AuditLineExportRunner.Codeunit.al index 43eacd6ed1..a2435f7bd5 100644 --- a/Apps/W1/AuditFileExport/app/src/ExportEngine/AuditLineExportRunner.Codeunit.al +++ b/Apps/W1/AuditFileExport/app/src/ExportEngine/AuditLineExportRunner.Codeunit.al @@ -24,6 +24,11 @@ codeunit 5265 "Audit Line Export Runner" FileContentInStream: InStream; begin Rec.LockTable(); + Rec.Find(); + if (Rec."Session ID" <> 0) and (Rec."Session ID" <> SessionId()) then + if Rec."Server Instance ID" = ServiceInstanceId() then + if Session.IsSessionActive(Rec."Session ID") then + exit; Rec.Validate("Server Instance ID", ServiceInstanceId()); Rec.Validate("Session ID", SessionId()); Rec.Validate("Created Date/Time", 0DT);