`
fackyou200
  • 浏览: 308524 次
  • 性别: Icon_minigender_1
  • 来自: 山西太原
社区版块
存档分类
最新评论

Activiti5 的变量信息加入taskId

 
阅读更多

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());
	}
}

 

分享到:
评论

相关推荐

    activiti5.22jar包_activiti_

    - **添加依赖**:在Java项目中,将"activiti5.22jar包"加入到项目的类路径中。 - **初始化引擎**:通过`ProcessEngineConfiguration`创建`ProcessEngine`实例。 - **部署流程定义**:使用`RepositoryService`部署...

    activiti工作流PPT

    3. **RuntimeService**: 提供了启动流程实例、设置流程变量、信号事件触发等功能,它与正在运行的流程实例打交道。 4. **TaskService**: 处理任务相关的操作,包括分配任务、完成任务、查询任务等。在工作流中,...

    Activiti多实例任务实现会签

    5. 配置多实例任务:在Activiti的工作流定义XML文件中,可以通过设置`&lt;userTask&gt;`元素的`multi-instance`属性,并指定相应的`camunda:collection`(数据集)和`camunda:elementVariable`(存储每个实例结果的变量)...

    springboot整合activiti完整demo

    - **启动流程实例**:通过`RuntimeService`启动流程实例,传入变量和发起人信息。 ```java @Autowired private RuntimeService runtimeService; public void startProcess(String businessKey, Map, Object&gt; ...

    Activiti工作流面试相关知识

    Activiti工作流引擎是一款开源的企业级业务流程管理(BPM)和工作流系统,它为组织提供了一种灵活、可扩展的方式来设计、执行和管理业务流程。在面试中,了解Activiti的核心服务对于理解其工作原理和实际应用至关...

    _activiti7cloud_英文开发指南.rar

    5. **API设计**:Activiti 7 提供了全面的英文API,允许开发者通过Java、RESTful接口或GraphQL来操作流程实例、任务、事件等。这些API是开发自定义集成和应用的关键。 6. **模型驱动开发(MDD)**:Activiti 7 支持...

    ActivitiAPI

    - **数据库存储**:Activiti使用关系数据库存储流程实例、任务、变量等信息,确保数据的持久化和可靠性。 3. **Activiti API关键类** - **ProcessEngine**:是与Activiti交互的主要入口点,用于创建和管理流程...

    Activiti-develop

    - **Process Engine**:负责执行 BPMN 2.0 流程定义,管理流程实例、任务、变量等。 - **Repository Service**:用于存储和检索 BPMN 2.0 流程定义文件。 - **Runtime Service**:处理流程实例的生命周期,如启动...

    Spring Boot wIth Activiti

    最后,为了便于调试和监控,Activiti提供了Actuator端点,可以查看流程实例、任务、变量等信息。Spring Boot的Actuator也可以与其他监控工具(如Prometheus、Grafana)集成,对工作流性能进行监控。 总结来说,...

    springboot+activiti流程设计

    2. **配置 activiti-spring**:在 Spring Boot 的配置文件 `application.properties` 或 `application.yml` 中,设置 Activiti 相关的属性,例如数据库连接信息、流程引擎配置等。 3. **启动流程引擎**:在 ...

    Activiti 学习笔记12:分配个人任务

    Activiti 是一个开源的工作流引擎,它被广泛用于企业级应用中实现业务流程自动化。在Activiti的学习过程中,个人任务是流程执行中的一个重要环节。个人任务是指特定的任务指派给了流程中的某一个用户,该用户有责任...

    Activiti文档代码基于SpringBoot

    在SpringBoot的application.properties或application.yml文件中,配置Activiti的相关参数,如数据库连接信息、流程定义资源路径等: ```properties # application.properties 示例 spring.activiti.db-schema-auto-...

    activitidemo.zip

    在实际应用中, Activiti提供了丰富的API,可以用来进行任务分配、信号发送、流程变量设置等操作。例如,我们可以使用`taskService.createTaskQuery()`查询当前用户待办的任务,`taskService.complete(taskId)`完成...

    springboot2整合activiti7.rar

    在SpringBoot的配置文件application.properties或application.yml中,配置Activiti的相关参数,例如数据库连接信息、流程引擎的bean定义等。 ```properties # application.properties 示例 spring.activiti.db-...

    activiti工作流实例代码

    Activiti提供了强大的日志和审计功能,允许开发者通过`historyService.createHistoricTaskInstanceQuery()`查询历史任务实例,获取任务的执行时间、执行者、相关变量等信息。这对于流程优化和问题排查非常有帮助。 ...

    springboot集成activiti6工作流 #资源达人分享计划#

    流程定义描述了流程的各个步骤、转移条件以及参与者等信息。在实际项目中,可以利用`zhouzy-activiti`压缩包中的示例模型或XML文件作为起点,理解并修改成符合自己业务需求的流程。 在Spring Boot应用中启动流程...

    Activiti-API 个人总结方法文档

    Activiti的工作流引擎依赖于一系列的数据库表来存储流程定义、运行时数据、历史记录等信息。以下是一些主要的数据库表: - **ACT_RE_DEPLOYMENT**: 存储部署的信息。 - **ACT_RE_PROCDEF**: 存储流程定义的信息。 -...

    oa办公系统

    - **任务节点**:流程中的每个任务节点可以通过`Task`对象表示,任务完成后通过`TaskService.complete(taskId)`进行提交。 - **服务任务**:可以使用Java类或者表达式执行自定义逻辑,实现业务流程中的复杂操作。 - ...

    activity 一个简单实例

    5. **部署流程定义**:在Java应用中,首先需要将流程定义XML文件部署到Activiti引擎,之后才能启动流程实例。这通常通过`RepositoryService`的`createDeployment()`和`deploy()`方法完成。 6. **任务服务...

Global site tag (gtag.js) - Google Analytics