问题:如何让业务对象和对应的流程 关联?

  发现ProcessInstance 有个方法getBusinessKey()可以得到一个businessKey。

  ProcessInstance 对应数据库中的表act_ru_execution有个字段BUSINESS_KEY_对应类中的businessKey,这个字段在创建表时自动被设置为unique

解决:

  1、保证流程的ID和业务对象的类名一致。例如:流程id为LeaveBill,我们的业务对象的类名也创建为LeaveBill。

  2、在流程启动的时候获取业务对象执行方法的时候传入businessKey,workflowService.startProcess(key,businessKey,vars);(这里vars为一些变量根据实际情况可有可无)businessKey 产生规则: className+“.”+objId

    public void startProcess(Long id) {
//1. 获取业务对象
LeaveBill bill = this.get(id);
if(bill!=null){
// 修改业务对象状态
bill.setState(1);// 请假单状态 0初始录入,1.开始审批,2为审批通过
this.update(bill);
//2. 添加流程变量(Map)
Map<String,Object> vars = new HashMap<>();
vars.put("inputUser", bill.getUser().getName());
// 添加变量来描述业务对象的信息
String classType =bill.getClass().getSimpleName();
vars.put("classType", classType);
vars.put("objId", bill.getId());
//3. 启动流程
// 获取流程定义key
String key = classType;
// 获取业务键 产生规则: className+“.”+objId
String businessKey = classType +"." + bill.getId();
this.workflowService.startProcess(key,businessKey,vars);
}
}

  3、根据以下方法就可以用taskId获取业务对象id

    public String getBusinessObjId(String taskId) {
//1 获取任务对象
Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); //2 通过任务对象获取流程实例
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
//3 通过流程实例获取“业务键”
String businessKey = pi.getBusinessKey();
//4 拆分业务键,拆分成“业务对象名称”和“业务对象ID”的数组
// a=b LeaveBill.1
String objId = null;
if(StringUtils.isNotBlank(businessKey)){
objId = businessKey.split("\\.")[1];
}
return objId;
}

  4、根据业务键获取流程实例和任务

ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey("LeaveBill.1").singleResult();
List<Task> task = taskService.createTaskQuery().processInstanceBusinessKey("LeaveBill.1").list();

  

Activiti业务键(businessKey)的更多相关文章

  1. activiti7业务表示Businesskey

    启动流程实例时,指定的businesskey,就会在act_ru_execution #流程实例的执行表中存储businesskey. Businesskey:业务标识,通常为业务表的主键,业务标识和 ...

  2. 【整合篇】Activiti业务与流程的整合

    对于不管是Activtit还是jbpm来说,业务与流程的整合均类似.启动流程是绑定业务.流程与业务的整合放到动态代理中 [java] view plain copy print" style ...

  3. Activiti7 绑定业务主键以及流程定义 流程实例的挂起和激活

    绑定业务主键businessKey /** * 绑定业务主键 */ @Test public void bindingBusinessKey() { // 获取RuntimeService Runti ...

  4. activiti uuid主键

    1.1.1.  activiti默认主键生成方式 ; 下面我们看一下主键的生成策略:主键的生成策略定义在IdGenerator接口中,接口定义如下所示: public interface IdGene ...

  5. Liferay7 BPM门户开发之11: Activiti工作流程开发的一些统一规则和实现原理(完整版)

    注意:以下规则是我为了规范流程的处理过程,不是Activiti公司的官方规定. 1.流程启动需要设置启动者,在Demo程序中,“启动者变量”名统一设置为initUserId 启动时要做的: ident ...

  6. Activiti快速入门

    1.什么是Activiti 在解释activiti之前我们看一下什么是工作流.工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照 ...

  7. A011 Activiti工作流程开发的一些统一规则和实现原理(完整版)

    注意:以下规则是我为了规范流程的处理过程,不是Activiti公司的官方规定. 1.流程启动需要设置启动者,在Demo程序中,“启动者变量”名统一设置为initUserId 启动时要做的: ident ...

  8. Activiti的流程实例及挂起激活(七)

    1.1什么是流程实例 参与者(可以是用户也可以是程序)按照流程定义内容发起一个流程,这就是一个流程实例.是动态的.流程定义和流程实例的图解: 1.2启动流程实例 流程定义部署在 activiti 后, ...

  9. (4)activiti之uel表达式

    有了前面几章,我们肯定有一定的困惑,activiti如何与实际业务整合,比如一条采购单,如何跟一个流程实例互相关联起来? 这里就需要使用到activiti启动流程实例时设置一个流程实例的busines ...

随机推荐

  1. 微信小程序布局篇

    刚刚接触小程序,小程序与HTML5有一定的差别,小程序就几个标签,而HTML5一大堆标签,还不断更新,但是新增标签功能强大.做一下微信小程序的布局练练手.感觉还是挺不错的,也封装了很多东西功能出来,与 ...

  2. iptables开通某些端口

    #!/bin/bash #define all variance or parameter WAH_INT="eth0" WAH_INT_IP="222.222.101. ...

  3. NX二次开发-UFUN创建倒角UF_MODL_create_chamfer

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> UF_initialize(); //创建块 UF_FEATURE_SIGN S ...

  4. Java-Class-@I:org.springframework.web.bind.annotation.RequestMapping

    ylbtech-Java-Class-@I:org.springframework.web.bind.annotation.RequestMapping 1.返回顶部   2.返回顶部 1. pack ...

  5. ashx后门[转]

    https://www.cnblogs.com/Fluorescence-tjy/p/9855828.html 一.标准ASPX一句话木马 .NET平台下的一句话木马则百年不变,最常见的当属下面这句 ...

  6. 解决:Map的area属性标签鼠标Hover可以给area加背景

    css的area标签是不支持hover的,只有a标签才支持.li标签在IE浏览器下才支持,所以采用jquery的mouseenter和mouseleave事件完成.首先讲jQuery对应的事件:1.m ...

  7. 读取.properties配置文件(转载)

    读取.properties 文件 配置文件的一种,内容以键值对的形式存在,且每个键值对独占一行.#号作为行注释的起始标志,中文注释会自动进行unicode编码.示例: # ip and port of ...

  8. 活动:月末送Java技术书福利|抽奖

    本公众号运营了快一年了 原创干货超过200+ 收获了也快1W粉丝 这么多粉丝-- 送书活动怎能少? 虽然这次我们是有备而来 但是-- 所有书籍为作者自掏腰包 所以本次送书数量有限 不能满足到所有人 重 ...

  9. NuGet包介绍

    Antlr 各种语言的语法识别器.解析器.编译和翻译器 Microsoft.AspNet.Web.Optimization 绑定优化CSS和JavaScript文件,也就是App_Start下的Bun ...

  10. mysql主从复制原理分析

    1.主从复制这类NFS存储数据通过inotify+rsync同步到备份的NFS服务器,只不 过Mysql的复制方案是其自带的工具inotify 是一种文件系统的变化通知机制,如文件增加.删除等事件可以 ...