Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
...
Code Block | ||||
---|---|---|---|---|
| ||||
import org.joget.workflow.model.service.WorkflowManager;
import org.joget.workflow.model.WorkflowProcess;
import org.joget.apps.app.service.AppService;
import org.joget.apps.app.service.AppUtil;
import org.joget.commons.util.LogUtil;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
AppService appService = (AppService) AppUtil.getApplicationContext().getBean("appService");
WorkflowManager workflowManager = (WorkflowManager) AppUtil.getApplicationContext().getBean("workflowManager");
String appId = null; //to filter by specific appId
String processId = null; //to filter by specific processId
String processName = null;
String version = null;
String recordId = null;
String requester = null;
String sort = "Started";
boolean desc = false; //find oldest first
int start = 0;
int rows = 15;
int months = 12; //retain last X months data AKA remove data older than X months
Date cutOffDate = Date.from(LocalDate.now().minusMonths(months).atStartOfDay(ZoneId.systemDefault()).toInstant());
int removedCount = 0;
Collection removedPids = new ArrayList();
LogUtil.info("Purge Old Completed Process Data ", "Searching for completed process instances older than " + cutOffDate.toString());
boolean newerThanCutOffFound = false;
while(!newerThanCutOffFound){
//get 15 oldest records
Collection processList = workflowManager.getCompletedProcessList(appId, processId, processName, version, recordId, requester, sort, desc, start, rows);
for (WorkflowProcess workflowProcess : processList) {
String id = workflowProcess.getInstanceId();
Date startedTime = workflowProcess.getStartedTime();
if( cutOffDate.compareTo(startedTime) == 1){
//startedTime is older than cutOffDate, remove process data
LogUtil.info("Purge Old Process Data", "Found [" + id + "] with start time [" + startedTime + "]");
removedCount++;
removedPids.add(id);
appService.getAppDefinitionForWorkflowProcess(id);
workflowManager.removeProcessInstance(id);
}else{
newerThanCutOffFound = true;
break;
}
//System.out.println("id is [" + id + "] date is [" + startedTime + "]");
//System.out.println( "compare " + cutOffDate.compareTo(startedTime));
//System.out.println( "compare2 " + startedTime.compareTo(cutOffDate));
}
//uncomment below to run only once for testing
//newerThanCutOffFound = true;
}
LogUtil.info("Purge Old Completed Process Data ", "Completed with [" + removedCount + "] removed: " + removedPids.toString());
|
...