接着上篇hello world 说,之前的流程是一个简单的工作流程 不符合业务逻辑,那么稍微正常的流程图应该怎么设计呢?
首先请假是要设置启动人为申请人--填写请假单--到领导审批--审批之通过之后系统发送通过消息然后结束
审核不通过则返回重新填写请假单
一、设置启动人为申请人
谁开启的流程实例,那么说明这个人就是请假的申请人
在开始节点设置开启人 initiator 属性 starter
在用户任务节点设置任务受理人 属性assignee 设置 ${starter}
设置当前用户为操作人
identityService.setAuthenticatedUserId("admin");
获取全局参数
starter runtimeService.getVariable("6ade2265-3d3b-11ec-97fd-00ff0eca940e","starter")
关于el表达式详情 camunda表达式语言
二、填写请假单
填写请假单就要用到camunda的表单功能了
camunda表单分内置动态表单 和外链表单 只有在开始节点和任务节点是可以添加表单
内置表单
在xml的表现形式为节点下的extensionElements标签的formData标签下的 formField
根据流程实例id 获取开始节点 表单数据
@GetMapping("/getStartFormData")
public void getStartFormData( String processDefinitionId) {
StartFormData startFormData = formService.getStartFormData(processDefinitionId);
List<FormField> formFields = startFormData.getFormFields();
for (FormField formField : formFields) {
System.out.println("############");
System.out.println(formField.getId());
System.out.println(formField.getValue());
System.out.println(formField.getType());
System.out.println(formField.getTypeName());
System.out.println(formField.getLabel());
System.out.println(formField.getDefaultValue());
System.out.println("############");
}
}
根据任务id 获取任务节点表单数据
@GetMapping("/getTaskFormData")
public void getTaskFormData(String taskId ) {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
System.out.println(task.getId());
TaskFormData taskFormData = formService.getTaskFormData(task.getId());
System.out.println("############");
System.out.println(taskFormData.getDeploymentId());
System.out.println(taskFormData.getTask());
System.out.println(taskFormData.getFormKey());
List<FormProperty> formProperties = taskFormData.getFormProperties();
System.out.println(formProperties);
List<FormField> formFields = taskFormData.getFormFields();
System.out.println(formFields);
System.out.println("############");
}
根据流程实例id 提交开始节点表单
public void submitStartForm(String processDefinitionId) {
VariableMap variableMap = Variables.createVariables()
.putValue("reason", "请假三天")
.putValue("name", "张三")
ProcessInstance processInstance = formService.submitStartForm(processDefinitionId, variableMap);
System.out.println(processInstance);
}
根据任务id 提交任务表单
@GetMapping("/submitTaskForm")
public void submitTaskForm(String taskId) {
VariableMap variableMap = Variables.createVariables()
.putValue("name", "王五")
.putValue("reason", "年假");
formService.submitTaskForm(taskId, variableMap);
}
外置表单
内置表单的xml表现形式为 节点里面的Formkey 属性
获取开始节点表单formkey
@GetMapping("/getStartFormKey")
public void getStartFormKey(String processDefinitionId){
String startFormKey = formService.getStartFormKey(processDefinitionId);
System.out.println("startFormKey:"+startFormKey);
}
获取任务节点表单formkey
@GetMapping("/getTaskFormKey")
public void getStartFormKey(String processDefinitionId, String taskId){
String taskFormKey = formService.getTaskFormKey(processDefinitionId, taskId);
System.out.println("taskFormKey:"+taskFormKey);
}
三、