一.内置表单
1.部署流程+启动流程
/**
* 部署流程
*/
@RequestMapping("publishProcess")
public void publishProcess() {
String processDefinitionKey=null;
Deployment deployment= repositoryService.createDeployment().addClasspathResource("processes/ActivitiDemo.bpmn").deploy();
System.out.println("部署编号:"+deployment.getId());
List<ProcessDefinition> processDefinition=repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).list();
for (ProcessDefinition pro : processDefinition) {
System.out.println("部署的key"+pro.getKey());
processDefinitionKey=pro.getKey();
}
// 启动流程
runtimeService.startProcessInstanceByKey(processDefinitionKey);
}
/**
* 提交任务表单
*/
@RequestMapping("submit")
public String submitTaskFormData(HttpServletRequest request) {
String taskId= null;
List<Task> task= taskService.createTaskQuery().orderByProcessDefinitionId().desc().list(); //获取最新的任务
taskId=task.get(0).getId();
//拿到最新的一个任务
request.setAttribute("title", "我要申请一个审批(动态表单)");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:ss");
request.setAttribute("date",sdf.format(new Date()) );
request.setAttribute("peopleCount", 2);
TaskFormData taskFormData = formService.getTaskFormData(taskId);//拿取流程启动前的表单字段。
Map<String,String> fromValues = new HashMap<String,String>();
for (FormProperty fp : taskFormData.getFormProperties()) {
String value =String.valueOf(request.getAttribute(fp.getId()));
fromValues.put(fp.getId(),value);
}
//启动流程,提交表单,提交后自动到下一节点,获取数据需要在下一Task获取
formService.submitTaskFormData(taskId, fromValues);
return "提交成功";
}
/**
* 查询任务,应用场景,可以在这里获取不同处理人(组长或经理)待处理的任务信息传给前台显示
*/
@RequestMapping("quertTask")
public void quertTask() {
String assignee="张三"; //这里是UserTask中设置的assignee
List<Task> task= taskService.createTaskQuery().taskAssignee(assignee).orderByProcessDefinitionId().desc().list();
//获取任务信息
for (Task t : task) {
System.out.println("任务编号:"+t.getId()+"\n任务名称:"+t.getName()+"\n处理人:"+t.getAssignee()+"\n创建时间:"+t.getCreateTime());
//获取提交表单的数据
TaskFormData taskFormData = formService.getTaskFormData(t.getId());//拿取流程启动前的表单字段。
for (FormProperty fp : taskFormData.getFormProperties()) {
System.out.println("Form Values:"+taskService.getVariable(t.getId(), fp.getId()));
}
}
System.out.println("已启动");
}
优点:能够根据前台传过来的字段匹配自定义Task的内置表单字段,无须自己put单个赋值,不需要提供实体类
缺点:每一个Task节点如需获取内置表单数据,都需要定义内置表单字段,操作麻烦