}
@RequestMapping(value = "/client/app/(~:appId)/(~:version)/assignment/(*:activityId)/submit", method = RequestMethod.POST)
public String clientAssignmentSubmit(HttpServletRequest request, ModelMap model, @RequestParam(required = false) String appId, @RequestParam(required = false) String version, @RequestParam("activityId") String activityId) {
// check assignment
WorkflowAssignment assignment = workflowManager.getAssignment(activityId);
if (assignment == null) {
return "client/app/assignmentUnavailable";
}
// get app
AppDefinition appDef = null;
if (appId != null && !appId.isEmpty()) {
appDef = appService.getAppDefinition(appId, version);
} else {
appDef = appService.getAppDefinitionForWorkflowActivity(activityId);
}
// extract form values from request
FormData formData = new FormData();
formData = formService.retrieveFormDataFromRequest(formData, request);
// set process instance ID as primary key
String processId = assignment.getProcessId();
// load form
Long appVersion = (appDef != null) ? appDef.getVersion() : null;
String formUrl = AppUtil.getRequestContextPath() + "/web/client/app/" + appId + "/" + appVersion + "/assignment/" + activityId + "/submit";
PackageActivityForm activityForm = appService.viewAssignmentForm(appDef, assignment, formData, formUrl);
Form form = activityForm.getForm();
// submit form
FormData formResult = formService.executeFormActions(form, formData);
if (formResult.getFormResult(AssignmentWithdrawButton.DEFAULT_ID) != null) {
// withdraw assignment
workflowManager.assignmentWithdraw(activityId);
return "client/app/dialogClose";
} else if (formResult.getFormResult(AssignmentCompleteButton.DEFAULT_ID) != null) {
// complete assignment
Map<String, String> variableMap = AppUtil.retrieveVariableDataFromRequest(request);
formResult = appService.completeAssignmentForm(form, assignment, formData, variableMap);
Map<String, String> errors = formResult.getFormErrors();
if (!formResult.getStay() && errors.isEmpty() && activityForm.isAutoContinue()) {
// redirect to next activity if available
WorkflowAssignment nextActivity = workflowManager.getAssignmentByProcess(processId);
if (nextActivity != null) {
String assignmentUrl = "/web/client/app/" + appId + "/" + appVersion + "/assignment/" + nextActivity.getActivityId();
return "redirect:" + assignmentUrl;
}
}
}