web
You’re offline. This is a read only version of the page.
close
Skip to main content

Announcements

No record found.

News and Announcements icon
Community site session details

Community site session details

Session Id :

How to restart a job in “Error” or “Frozen Completed” status

Roberto Stefanetti Profile Picture Roberto Stefanetti 12,998

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

https://blogs.msdn.microsoft.com/nav/2016/01/19/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 was originally posted here.

Comments

*This post is locked for comments