主页 > 其他  > 

流程定义和流程实例

流程定义和流程实例
流程定义 : 流程图,,ProcessDefinition流程实例: 我们启动的每一个具体的流程,就是一个流程实例,ProcessInstance 流程部署

放在resource/processes 下面的流程图会被自动部署 跟流程部署相关的三个表:

ACT_RE_PROCDEF : 流程定义ACT_RE_DEPLOYMENT : 流程部署ACT_GE_BYTEARRAY : 部署完了,会在这个表里面存,流程定义的xml和图片,会存ACT_RE_DEPLOYMENT的id

更新流程信息,如果流程的id没变,,version会+1,,, 如果流程的id变了,会新开 流程图中的targetNamespace 表示流程的分类:

流程定义api

跟流程实例流程部署的表,就是RE_开头的表ACT_RE_DEPLOYMENT ACT_RE_MODEL ACT_RE_PROCDEF

都是通过RepositoryService操作

流程默认是会自动注入的,,如果需要手动注入,需要配置:

# true: 表示去检查,,false:表示不检查,表示不会自动部署流程 flowable.check-process-definitions=false flowable.process-definition-location-prefix=classpath:/processes/ # 指定流程定义xml文件后缀,,默认的后缀 是 **.bpmn20.xml,**.bpmn flowable.process-definition-location-suffixes=**.bpmn20.xml,**.bpmn @RestController public class ProcessDeployController { @Autowired RepositoryService repositoryService; @PostMapping("/deploy") public RespBean deployProcess(MultipartFile file) throws IOException { Deployment deploy = repositoryService // 开始部署构建 .createDeployment() .name("测试工作流") // 部署表的分类 .category("流程分类") .key("部署的key") // 设置文件的输入流,, 通过这个输入流自动读取xml文件 .addInputStream(file.getOriginalFilename(), file.getInputStream()) // 完成部署 .deploy(); return RespBean.ok("部署成功",deploy.getId()); } }

查询流程信息:

// 查询流程定义 List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().latestVersion().list(); repositoryService.createProcessDefinitionQuery().processDefinitionKey("submit_an_expense_account") .orderByProcessDefinitionVersion().desc().list(); // 使用sql查找 List<ProcessDefinition> list1 = repositoryService.createNativeProcessDefinitionQuery() .sql("SELECT * FROM act_re_procdef WHERE key_ = #{key} order by version_ desc") .parameter("key", "submit_an_expense_account") .list(); // 查询部署表 repositoryService.createDeploymentQuery().deploymentCategory("流程分类").list(); // 删除部署,,删除之后ACT_GE_BYTEARRAY ,,和流程定义表,和部署表,都会被清空 List<Deployment> list = repositoryService.createDeploymentQuery().list(); for (Deployment deployment : list) { repositoryService.deleteDeployment(deployment.getId()); } 流程实例api 流程实例 : ProcessInstance :根据流程定义启动一个流程,,这个启动后的流程就是流程实例执行实例: Execution : 是流程实例在运行时的具体执行路径,除开开始和结束节点 在顺序流程中,流程实例和执行实例通常一一对应在并行网关或者子流程中,一个流程实例可能对应多个执行实例

ACT_RU_TASK: 当前所有待处理的用户任务(user task)

ID_ 任务唯一标识NAME_ 任务名称(如“提交审批”、“经理审核”)ASSIGNEE_ 任务处理人(用户ID)PROC_INST_ID_ 关联的流程实例IDEXECUTION_ID_ 关联的执行实例IDTASK_DEF_KEY_ 任务定义Key(BPMN中定义的id,如userTask_approve)CREATE_TIME_ 任务创建时间DUE_DATE_ 任务截止时间

ACT_RU_EXECUTION: 存储当前所有活跃的执行实例(Execution),表示流程实例的运行路径(如主流程,子流程,并行分支等):

ID_ 执行实例唯一标识PROC_INST_ID_ 关联的流程实例IDPARENT_ID_ 父执行实例ID(用于子流程或并行分支)ACT_ID_ 当前活动节点ID(BPMN中的节点id)IS_ACTIVE_ 是否活跃(1=活跃,0=非活跃)IS_SCOPE_ 是否作用域(用于区分主流程和子流程)

ACT_RU_ACTINST : 流程活动的执行情况,,存储所有正在运行或已完成的节点活动实例:

ID_ 活动实例唯一标识 PROC_INST_ID_ 关联的流程实例ID EXECUTION_ID_ 关联的执行实例ID ACT_ID_ 节点ID(BPMN中的节点id) ACT_NAME_ 节点名称(如“提交申请”、“审批通过”) ACT_TYPE_ 节点类型(如userTask、exclusiveGateway、startEvent) START_TIME_ 节点进入时间 END_TIME_ 节点退出时间(未完成时为null) //发起一个流程: // 设置流程发起人 Authentication.setAuthenticatedUserId("ww"); String processDefinitionKey = "leave"; // 流程实例 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey); System.out.println(processInstance.getId()+processInstance.getName()); // 查看这个人有哪些任务 List<Task> list = taskService.createTaskQuery().taskAssignee("ww").list(); for (Task task : list) { System.out.println(task.getId()+task.getName()); // 完成任务 taskService plete(task.getId()); } // 查看当前正在运行的流程实例 // 流程实例只会有一个,,, // 流程执行结束会为null ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId("xxx").singleResult(); /** * 查看活动节点,,本质上查看 act_ru_execution * 查看当前流程执行到哪一步了 */ // 查询执行实例 List<Execution> executions = runtimeService.createExecutionQuery().list(); for (Execution execution : executions) { List<String> activeActivityIds = runtimeService.getActiveActivityIds(execution.getId()); for (String activeActivityId : activeActivityIds) { System.out.println("activeActivityId = " + activeActivityId); } } // 删除流程实例 runtimeService.deleteProcessInstance("id","reason"); // 挂起的流程定义,,,是无法开启流程实例 List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list(); for (ProcessDefinition processDefinition : list) { // 挂起 repositoryService.suspendProcessDefinitionById(processDefinition.getId()); // 激活 repositoryService.activateProcessDefinitionById(processDefinition.getId()); } // 挂起的流程实例 // 对于一个挂起的流程实例,我们是无法执行相应的 task // 流程实例的挂起,最终也会挂起流程定义 /** * param01: 流程定义的id * param02: 是否挂起这个流程定义所对应的流程实例 * parmas03: 挂起的时间 ,, null表示立即挂起,,也可以给一个具体的时间,表示到期之后才会挂起 */ repositoryService.suspendProcessDefinitionById("definition id",true,null); // 激活流程实例 repositoryService.activateProcessDefinitionById("definition id",true,null); }
标签:

流程定义和流程实例由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“流程定义和流程实例