我们研究工作流,实质上还是为了解决现实中的问题,工作流的执行不能与实际业务脱离关系,任何与实际业务脱离的技术都是耍流氓。
实际点的应用中我们的工作流是通过业务主键关联到我们到实际的业务,即:businessKey(业务主键)。举一个现实生活中的例子,比如说我们去即快递,包裹的流转用工作流来表示。我们把这个过程简单的抽象为以下几个步骤。
- 客户填写资料并提供包裹
- 快递站点收录包裹
- 运输
- 收货人取件
在这这个期间若果收货人拿运单号来查询物流状态,那么这个运单号我们就可以把他当做业务主键。通过这个业务主键我们可以让工作流和其它工作流之外的业务关联起来。
在工作流中添加业务主键十分容易,只需在启动流程实例的时候,再填写一个参数:businessKey。参照之前的工作流程启动
/**
* 启动流程实例:
* 前提是先已经完成流程定义的部署工作
*
* 背后影响的表:
* act_hi_actinst 已完成的活动信息
* act_hi_identitylink 参与者信息
* act_hi_procinst 流程实例
* act_hi_taskinst 任务实例
* act_ru_execution 执行表
* act_ru_identitylink 参与者信息
* act_ru_task 任务表
*/
@Override
public void startPorcInstance() {
//创建流程实例,通过流程定义的id
//通过流程部署的key启动
// runtimeService.startProcessInstanceByKey("myProcess_1");
//通过流程部署id启动
runtimeService.startProcessInstanceById("myProcess_1:1:2504","123456");
List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().processDefinitionId("myProcess_1:1:2504").list();
System.out.println(list.get(0).getBusinessKey());
}
startProcessInstanceById方法的第二个参数就是业务主键。并且通过查看流程实例也是可以查看业务主键的。
再看一下数据库表,act_hi_procinst。