Sometimes can happen that some recursively scheduled jobs can go wrong or get stuck, you can re-enable them automatically and after consult the log to see errors; it is not a perfect solution but sometimes the error can be a simple error ex: “another user has modified..” etc. This function could be useful for NAV versions up to 2016, NAV 2017 has an improved management and a robust task scheduling system.
Samples of Jobs in “Error” or “Frozen Completed State”
Before Execution
After Execution
The Simple Solution
The solution is based on a codeunit that takes care of reactivating the jobs in the state “error” or “completed”, it can be changed according to the needs.
It can be scheduled:
- Directly into the NAS (in the same or other NAS instances)
-
On Windows Task Scheduler with codeunit invoked by Powershell
Codeunit 50000 “ChangeJobsStatus”
Fields Added on Table “Job Queue Entry”
CODE
OnRun()
ChangeJobStatus;
ChangeJobStatus()
Documentation()
“Restart Job” IF in errorin processfinished state
OnRun()
IF ChangeJobStatus() = TRUE THEN
MESSAGE(‘Jobs Status Changed!’)
ELSE
MESSAGE(‘Nothing Changed!’)
LOCAL ChangeJobStatus() JobStatusChanged : Boolean
//”Restart Job” IF in errorin processfinished state
JobStatusChanged := FALSE;
recJobQEntry.RESET;
IF recJobQEntry.FINDSET THEN
REPEAT
CASE recJobQEntry.Status OF
//*** STATE: IN PROCESS
recJobQEntry.Status::”In Process”:
BEGIN
recJobQLogEntry.RESET;
recJobQLogEntry.SETRANGE(“Object Type to Run”,recJobQEntry.”Object Type to Run”); //Check Run.Time
recJobQLogEntry.SETRANGE(“Object ID to Run”,recJobQEntry.”Object ID to Run”);
//Check Duration Process Max
IF recJobQEntry.”Duration Process Max” > 0 THEN
IF recJobQLogEntry.FINDLAST THEN
IF CURRENTDATETIME – recJobQLogEntry.”Start Date/Time” > recJobQEntry.”Duration Process Max” THEN BEGIN //CHECK MAX DURATION TIME
recJobQEntry.Status := recJobQEntry.Status::Ready; // –> SET STATUS TO READY
recJobQEntry.MODIFY(FALSE);
JobStatusChanged := TRUE;
END
END;
//*** STATE: ERROR OR FINISHED
recJobQEntry.Status::Error, recJobQEntry.Status::Finished: //IF “ERROR” OR “FINISHED”
BEGIN
recJobQEntry.Status := recJobQEntry.Status::Ready; // –> SET STATUS TO READY
recJobQEntry.MODIFY(FALSE);
JobStatusChanged := TRUE;
END;
END; //END CASE
COMMIT;
UNTIL recJobQEntry.NEXT = 0;
EXIT(JobStatusChanged);
About Scheduling
1) With NAV Codeunit scheduled by NAS


After Execution
2) With NAV Codeunit invoked by Powershell and scheduled by Windows Task Scheduler
Import-Module ‘C:Program FilesMicrosoft Dynamics NAV100ServiceMicrosoft.Dynamics.Nav.Management.dll’
Invoke-NAVCodeunit dynamicsnav100 -CodeunitId 50000 -CompanyName ‘CRONUS Italia S.p.A.’


To Schedule Powershell Script by Windows Task Scheduler
An easy way to schedule a PowerShell script is, to use Windows Task Scheduler, look at this post:
Coffee Break: Proactive Monitoring with Task Scheduler
My Old Post about NAV 2017 Task Scheduler
https://robertostefanettinavblog.com/2016/11/04/nav-2017-task-scheduler/

*This post is locked for comments