Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

For the process design, we would require 2 separates separate workflow processes.


Figure 1: The main process - Apply Process


Figure 2: Individual Approval Process


Figure 3: Mapping of ApproverGroup

...

Code Block
import org.joget.apps.app.service.*;
import org.joget.apps.form.dao.*;
import org.joget.apps.form.model.*;
import org.joget.apps.form.service.*;
import org.joget.workflow.model.*;
import org.joget.workflow.model.service.*;

//constant value
String foreignKey = "customProperties.apply_id";
String formDefId = "approveForm";
String tableName = "multiApproval_approvals";
String rowCountVariableName = "approvalCount";
String statusVariableName = "status";
int approvalCount = Integer.parseInt("#variable.approvalCount#");
String approvalIds = "#variable.approvalIds#";

//utility bean
FormDataDao formDataDao = (FormDataDao) AppUtil.getApplicationContext().getBean("formDataDao");
WorkflowManager workflowManager = (WorkflowManager) AppUtil.getApplicationContext().getBean("workflowManager");
AppService appService = (AppService) AppUtil.getApplicationContext().getBean("appService");

//get foreign key
String processId = workflowAssignment.getProcessId();

//build condition
String condition = " WHERE " + foreignKey + " = ?";
Object[] paramsArray = new Object[]{processId};

//get subcontractorapproval data
FormRowSet rows = new FormRowSet();
rows = formDataDao.find(formDefId, tableName, condition, paramsArray, "dateCreated", false, null, null);

int rowCount = 0;
String status = "";
String recordId = "";
for (FormRow r : rows) {
    recordId = r.getId();
    String recordStatus = r.get("status");

	if(recordStatus.equalsIgnoreCase("Rejected")){
		status = "Rejected";
		break;
	}
    rowCount++;
}

if(status.equalsIgnoreCase("Rejected")){
	workflowManager.processVariable(processId, statusVariableName, "Rejected");
	//terminate any remaining approval instances
	String[] approvalIdsSplit = approvalIds.split(",");
	for(String approvalId : approvalIdsSplit){
		if(!approvalId.equalsIgnoreCase("") && !approvalId.equalsIgnoreCase(recordId)){
			try{
				workflowManager.processAbort(approvalId);
			}catch(Exception e){
			}
		}
	}
}else if(rowCount =>= approvalCount){
	workflowManager.processVariable(processId, statusVariableName, "Approved");
}


Figure 4: View of instances after submitting the "Apply" activity with all the "Approve" process spawned


Figure 5: Result of Apply process

KB:Download the App