Activiti5 流程变量设置
//变量和整个流程关联,不能先重复参数,从表ACT_RU_VARIABLE和ACT_HI_VRINST查看 this.taskService.setVariable(taskId,variables) //变量和流程的任务节点关联,从表ACT_HI_VRINST查看 this.taskService.setVariableLocal(taskId,variables)
参考:http://tylanbin.tk/record/201402
使用Activiti的人应该都会发现 一个问题,就是在高度自由的变量存储方式中,不做特殊操作时,所有的变量都会只跟流程实例(历史)进行关联,但act_ru_variable和 act_hi_varinst是有TASK_ID_这么一列的,利用它,将存储的变量和流程的任务节点关联,会大大方便我们对流程的扩展(比如一些自定义 的业务数据),这里记录一下笔者研究的过程及使用方法。
首先,我们常用的任务完成方式无外乎以下两种:
1、使用FormService中的submitTaskFormData(String taskId, Map<String,String> properties)方法
Map<String, String> map = new HashMap<String, String>(); // 填表 for (FormProperty formProperty : taskFormData.getFormProperties()) { if (formProperty.isWritable()) { String name = formProperty.getId(); map.put(name, request.getParameter(name)); } } // 自定义值存储测试 map.put("test", "testVal"); // 提交用户定义的表单,同时也会完成该任务 formService.submitTaskFormData(taskId, map);
这样在表单提交后(变量存储),该任务也随之完成。
2、使用TaskService中的complete(String taskId, Map<String,Object> variables)方法
Map<String, Object> map = new HashMap<String, Object>(); // 填表 for (FormProperty formProperty : taskFormData.getFormProperties()) { if (formProperty.isWritable()) { String name = formProperty.getId(); map.put(name, request.getParameter(name)); } } // 自定义值存储测试 map.put("test", "testVal"); // 完成该任务 taskService.complete(taskId, map);
这样是另一种完成任务的方式。
但是,我们可以查看数据库,无论是第一种还是第二种,act_ru_variable(act_hi_varinst)表的TASK_ID_字段全部为空,这样是无法将test的值与当前任务关联起来的,test的值仍然属于这个流程。
通过阅读API和测试,我们在第二种方式complete之前,调用setVariableLocal或setVariablesLocal即可达到目的。
// 存储特殊的与任务关联的变量值 taskService.setVariableLocal(taskId, "test", "testVal"); taskService.complete(taskId, map);
这样的话,我们在流程完成之后,通过使用org.activiti.engine.history中的HistoricVariableInstanceQuery即可完成对某个流程,某个任务的特殊变量的查询操作,以完成一些自定义的特殊业务。
// 测试查询 List<HistoricTaskInstance> listOfTask = historyService.createHistoricTaskInstanceQuery().processDefinitionKey(key).list(); List<HistoricVariableInstance> listOfVar = null; for (HistoricTaskInstance hti : listOfTask) { System.out.println(hti.getName() + "-" + hti.getId()); listOfVar = historyService.createHistoricVariableInstanceQuery().taskId(hti.getId()).list(); for (HistoricVariableInstance hvi : listOfVar) { System.out.println("\t" + hvi.getId() + "-" + hvi.getVariableName() + "-" + hvi.getValue()); } }
相关推荐
- **添加依赖**:在Java项目中,将"activiti5.22jar包"加入到项目的类路径中。 - **初始化引擎**:通过`ProcessEngineConfiguration`创建`ProcessEngine`实例。 - **部署流程定义**:使用`RepositoryService`部署...
3. **RuntimeService**: 提供了启动流程实例、设置流程变量、信号事件触发等功能,它与正在运行的流程实例打交道。 4. **TaskService**: 处理任务相关的操作,包括分配任务、完成任务、查询任务等。在工作流中,...
5. 配置多实例任务:在Activiti的工作流定义XML文件中,可以通过设置`<userTask>`元素的`multi-instance`属性,并指定相应的`camunda:collection`(数据集)和`camunda:elementVariable`(存储每个实例结果的变量)...
- **启动流程实例**:通过`RuntimeService`启动流程实例,传入变量和发起人信息。 ```java @Autowired private RuntimeService runtimeService; public void startProcess(String businessKey, Map, Object> ...
Activiti工作流引擎是一款开源的企业级业务流程管理(BPM)和工作流系统,它为组织提供了一种灵活、可扩展的方式来设计、执行和管理业务流程。在面试中,了解Activiti的核心服务对于理解其工作原理和实际应用至关...
重要的是要填写`会签" activiti:assignee="#{huiqian}">`中的`#{huiqian}`,这表示任务将分配给`huiqian`变量指定的用户。 5. **添加监听器和循环特性**:在用户任务中,可以添加`taskListener`来监听任务的创建和...
5. **API设计**:Activiti 7 提供了全面的英文API,允许开发者通过Java、RESTful接口或GraphQL来操作流程实例、任务、事件等。这些API是开发自定义集成和应用的关键。 6. **模型驱动开发(MDD)**:Activiti 7 支持...
- **数据库存储**:Activiti使用关系数据库存储流程实例、任务、变量等信息,确保数据的持久化和可靠性。 3. **Activiti API关键类** - **ProcessEngine**:是与Activiti交互的主要入口点,用于创建和管理流程...
- **Process Engine**:负责执行 BPMN 2.0 流程定义,管理流程实例、任务、变量等。 - **Repository Service**:用于存储和检索 BPMN 2.0 流程定义文件。 - **Runtime Service**:处理流程实例的生命周期,如启动...
最后,为了便于调试和监控,Activiti提供了Actuator端点,可以查看流程实例、任务、变量等信息。Spring Boot的Actuator也可以与其他监控工具(如Prometheus、Grafana)集成,对工作流性能进行监控。 总结来说,...
2. **配置 activiti-spring**:在 Spring Boot 的配置文件 `application.properties` 或 `application.yml` 中,设置 Activiti 相关的属性,例如数据库连接信息、流程引擎配置等。 3. **启动流程引擎**:在 ...
Activiti 是一个开源的工作流引擎,它被广泛用于企业级应用中实现业务流程自动化。在Activiti的学习过程中,个人任务是流程执行中的一个重要环节。个人任务是指特定的任务指派给了流程中的某一个用户,该用户有责任...
在SpringBoot的application.properties或application.yml文件中,配置Activiti的相关参数,如数据库连接信息、流程定义资源路径等: ```properties # application.properties 示例 spring.activiti.db-schema-auto-...
在实际应用中, Activiti提供了丰富的API,可以用来进行任务分配、信号发送、流程变量设置等操作。例如,我们可以使用`taskService.createTaskQuery()`查询当前用户待办的任务,`taskService.complete(taskId)`完成...
在SpringBoot的配置文件application.properties或application.yml中,配置Activiti的相关参数,例如数据库连接信息、流程引擎的bean定义等。 ```properties # application.properties 示例 spring.activiti.db-...
Activiti提供了强大的日志和审计功能,允许开发者通过`historyService.createHistoricTaskInstanceQuery()`查询历史任务实例,获取任务的执行时间、执行者、相关变量等信息。这对于流程优化和问题排查非常有帮助。 ...
流程定义描述了流程的各个步骤、转移条件以及参与者等信息。在实际项目中,可以利用`zhouzy-activiti`压缩包中的示例模型或XML文件作为起点,理解并修改成符合自己业务需求的流程。 在Spring Boot应用中启动流程...
Activiti的工作流引擎依赖于一系列的数据库表来存储流程定义、运行时数据、历史记录等信息。以下是一些主要的数据库表: - **ACT_RE_DEPLOYMENT**: 存储部署的信息。 - **ACT_RE_PROCDEF**: 存储流程定义的信息。 -...
- **任务节点**:流程中的每个任务节点可以通过`Task`对象表示,任务完成后通过`TaskService.complete(taskId)`进行提交。 - **服务任务**:可以使用Java类或者表达式执行自定义逻辑,实现业务流程中的复杂操作。 - ...
5. **部署流程定义**:在Java应用中,首先需要将流程定义XML文件部署到Activiti引擎,之后才能启动流程实例。这通常通过`RepositoryService`的`createDeployment()`和`deploy()`方法完成。 6. **任务服务...