[java]-Activiti使用指南

一、Activiti Designer 流程设计器(IDEA 工具)

一、camunda

1、资源下载渠道

官网
https://camunda.com

github托管地址
https://github.com/camunda/camunda-modeler

CB多的大佬可以扶贫一下
https://download.csdn.net/download/arsenalzjx/11375225

免CB爽歪歪下载
链接:https://pan.baidu.com/s/1SeIijTUwmUOboXSchTTY1A 提取码:xtwl

2、集成方法

下载对应的软件,这里是在win10系统下,以camunda-modeler-3.0.0-win-x64.zip为例
将下载后的压缩包解压
在idea中File -> Settings -> Tools -> External Tools里添加外部工具

上面的具体路径填写

****

通过在项目中右键找到External Tools -> camunda-modeler开始流程设计

在已有的bpmn文件上点右键使用外部扩展工具可以快速打开进行编辑或者查看

二、actiBPM

1.到 IDEA 官网下载 actiBPM 插件

地址:https://plugins.jetbrains.com/,搜索 actiBPM,下载。

然后下载最新版本,安装插件到idea

2.遇到的问题与解决
BPMN文件中文乱码

打开IDEA的【help】-->【Edit Custom VM Options】

打开后在后面添加

-Dfile.encoding=UTF-8

如果依然还有乱码,请正确设置文件编码如下:

如果还有乱码,请重启IDEA应该就能解决

Idea创建bpmn文件没有png图片解决办法

在idea中安装actiBPM插件后创建bpmn文件,发现没有生成相应的png文件

复制bpmn文件把复制后的文件后缀改成xml,右键选择Diagrams——>Show BPMN 2.0 Designer

点击Export to file,选择png格式,得到png文件

最后再次把xml文件后缀名改成bpmn

idea不显示Diagrams的解决办法

右键没找到“Diagrams”的朋友,可以看看是不是自己之前把相关插件关闭了。

操作:

File -> Settings -> Plugins -> 查询“UML Support”,勾选此插件,然后重启即可;

bpmn文件无法通过BPMNEditor设置属性

bpmn文件双击默认是用BPMNEditor打开的,我们一般需要对任务结点设置一些属性,比如审核人,审核条件,驳回条件等等,

设置成功以后部署流程时候你会发现后台设置的属性不是报错就是不生效,说明我们之前设置的变量属性和参数根本没有被BPMNEditor编辑器保存下来(暂时不确定是IDEA的问题还是actiBPM插件的问题)

最终解决方案:直接编辑xml文件内容:将bpmn文件改为xml文件后,手动填充表达式,如下图:

还有需要加上这个设计的id和name

3.bpmn文件的相关操作
流程属性
<process id="holiday2" isClosed="false" isExecutable="true" processType="None" name="第一个流程">
userTask属性设置

<userTask activiti:assignee="${assignee0}" activiti:exclusive="true" id="_3" name="填写请假单"/>
activiti:assignee="${assignee0}" 动态绑定assignee

//1.得到ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2.得到RuntimeService对象
        RuntimeService runtimeService = processEngine.getRuntimeService();
       //3.设置assignee的取值   用户可以在界面上设置流程的执行人
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("assignee0","zhangsan");
        map.put("assignee1","lishi");
        map.put("assignee2","wangwu");
        //4.启动流程实例,同时还要设置流程定义的assignee的值
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday2", map);
        //5.输出
        System.out.println(processEngine.getName());
流程变量
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1542005753287" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema">
  <process id="myProcess_1" isClosed="false" isExecutable="true" processType="None">
    <startEvent id="_2" name="StartEvent"/>
    <userTask activiti:assignee="zhangsan" activiti:exclusive="true" id="_3" name="填写请假申请单"/>
    <userTask activiti:assignee="lishi" activiti:exclusive="true" id="_4" name="部门经理审批"/>
    <userTask activiti:assignee="wangwu" activiti:exclusive="true" id="_5" name="总经理审批"/>
    <userTask activiti:assignee="zhaoliu" activiti:exclusive="true" id="_6" name="人事经理存档"/>
    <endEvent id="_7" name="EndEvent"/>
    <sequenceFlow id="_8" sourceRef="_2" targetRef="_3"/>
    <sequenceFlow id="_9" sourceRef="_3" targetRef="_4"/>
    <sequenceFlow id="_10" sourceRef="_4" targetRef="_5">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${holiday.num>3}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="_11" sourceRef="_4" targetRef="_6">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${holiday.num<=3}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="_12" sourceRef="_5" targetRef="_6"/>
    <sequenceFlow id="_13" sourceRef="_6" targetRef="_7"/>
  </process>
  <bpmndi:BPMNDiagram documentation="background=#FFFFFF;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0" id="Diagram-_1" name="New Diagram">
    <bpmndi:BPMNPlane bpmnElement="myProcess_1">
  ......
  </bpmndi:BPMNDiagram>
</definitions>
对应的流程图

img

流程图.png

组任务、候选人

<userTasj activiti:candiadteUsers="张三,李四"/> 多个候选人之间用英文‘逗号’隔开

排他网关

流程图.png

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1605425953286" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema">
  <process id="holiday7" isClosed="false" isExecutable="true" processType="None">
    <startEvent id="_2" name="StartEvent"/>
    <userTask activiti:assignee="zhangsan" activiti:exclusive="true" id="_3" name="填写请假申请单"/>
    <userTask activiti:assignee="lisi" activiti:exclusive="true" id="_4" name="部门经理审核"/>
    <exclusiveGateway gatewayDirection="Unspecified" id="_5" name="ExclusiveGateway"/>
    <userTask activiti:assignee="wangwu" activiti:exclusive="true" id="_6" name="总经理审核"/>
    <userTask activiti:assignee="zhaoliu" activiti:exclusive="true" id="_7" name="人事经理存档"/>
    <endEvent id="_8" name="EndEvent"/>
    <sequenceFlow id="_9" sourceRef="_2" targetRef="_3"/>
    <sequenceFlow id="_10" sourceRef="_4" targetRef="_5"/>
    <sequenceFlow id="_11" sourceRef="_5" targetRef="_6">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${holiday.num>3}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="_12" sourceRef="_5" targetRef="_7">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${holiday.num>=1}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="_13" sourceRef="_3" targetRef="_4"/>
    <sequenceFlow id="_14" sourceRef="_6" targetRef="_7"/>
    <sequenceFlow id="_15" sourceRef="_7" targetRef="_8"/>
  </process>
  	.........
 </definitions>

排他网关: 当多个条件都达到满足的条件时,选一个,选择id小的那个去执行; 若条件都不满足,则报错

二、activiti自带表结构介绍

img

不同版本的activiti自带表是不一样的,其实我们也不用去关心不同版本的activiti需要那些表,只要配置好数据源,系统启动的时候,会去检查数据库是否包含这些数据库表,如果没有会自动去创建这些表。下面先介绍简单介绍一下,这些表的含义。

表含义介绍博客(引用):https://blog.csdn.net/jack_eusong/article/details/79411053

表关系图介博客(引用):https://blog.csdn.net/claram/article/details/73277358

表前缀说明

ACT_RE RE表示Repository资源库,保存流程定义,模型等设计阶段的数据。
ACT_RU RU表示Runtime运行时,保存流程实例,任务,变量等运行阶段的数据。
ACT_HI 表示History历史,保存历史实例,历史任务等流程历史数据。
ACT_ID ID表示Identity身份,保存用户,群组,关系等组织机构相关数据(Activiti中的组织机构过于简单,仅用于演示。) 。
ACT_GE GE表示General通用,属于一些通用配置。
其他 ACT_EVT_LOG和ACT_PROCDEF_INFO没有按照规则来,两者分别属于HI和RE。

PDM模型

流程表

这里写图片描述

历史数据表

这里写图片描述

用户表、组表

这里写图片描述

这里写图片描述

日志表:
\1. act_evt_log 存储事件处理日志,方便管理员跟踪处理。
通用数据表
\2. act_ge_bytearray 二进制数据表,一些文件存在这个表。
\3. act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录
历史数据表
\4. act_hi_actinst 历史节点表
\5. act_hi_attachment 历史附件表
\6. act_hi_comment 历史意见表
\7. act_hi_detail 历史详情表,提供历史变量的查询
\8. act_hi_identitylink 历史流程人员表
\9. act_hi_procinst 历史流程实例表
10.act_hi_taskinst 历史任务实例表
11.act_hi_varinst 历史变量表
用户组织表
12.act_id_group 用户组信息表
13.act_id_info 用户扩展信息表
14.act_id_membership 用户与用户组对应信息表
15.act_id_user 用户信息表
资源流程规则表
16.act_procdef_info 流程定义信息
17.act_re_deployment 部署信息表
18.act_re_model 流程设计模型部署表
19.act_re_procdef 流程定义数据表
运行时数据库表
20.act_ru_event_subscr 监听表
21.act_ru_execution 运行时流程执行实例表
22.act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息
23.act_ru_job 运行时定时任务数据表
24.act_ru_task 运行时任务节点表
25.act_ru_variable 运行时流程变量数据表

posted on 2023-03-09 21:33  共感的艺术  阅读(288)  评论(1编辑  收藏  举报