基于工作流的平台管理系统设计,Activiti工作流引擎使用

图片 8

此间举多少个例子

2.6 Eclipse Designer存在的标题

其一插件有三个很看不惯的Bug一直未修复,安装了插件后Eclipse的复制和粘帖火速键会被转移为(Ctrl+Insert、Shift+Insert);Bug描述请见:

  • Activit
    Forums中告诉的Bug

  • Jira的登记

故而最后大家只可以单独开四个装置了Eclipse
Designer的Eclipse特意用来设计流程图,那样就不影响平常使用Eclipse
JAVAEE了。

❶ 客户联系顾客服务职员,提交申请, 富含借贷音信, 手持居民身份证件照片,
信用卡音讯等

2.1.1 修改源代码方式

修改源码

org.activiti.engine.impl.bpmn.diagram.ProcessDiagramCanvas

在构造方法

public ProcessDiagramCanvas(int width, int height)

中有一行代码是设置字体的,暗许是用 Arial 字体,那正是乱码产生的缘故,把字改为本土的普通话字体就可以,比方:

Font font = new Font("WenQuanYi Micro Hei", Font.BOLD, 11);

当然假让你有安顿文件读取工具那么能够设置在*.properties文件中,笔者正是那样做的:

Font font = new Font(PropertyFileUtil.get("activiti.diagram.canvas.font"), Font.BOLD, 11);

七个好的规划不是一步到位的规划,
而是一个鲁人持竿的历程以及持续重构的进程.
然而相当的重大的一些正是在一同来能够基于当前的急需以及所能预言的需求实行设计,
並且在这么些基础框架代码上支出要特别有利于和简洁.

5.5 查询时和作业关联

提醒:此前在事情对象增多了PROCESS_INSTANCE_ID字段

思路:现在得以选用那一个字段查询了,不管是Task照旧ProcessInstance都能够获取流程实例ID,能够依据流程实例ID查询实体然后把流程对象设置到实体的五性格能中由Action可能Controller输出到前台。

代码请参见:

图片 1归来乐乎,查看更加的多

2.最早使用碰到难点采访

因为Activiti刚刚退出不久所以资料比较空缺,普通话资料越来越少的可怜,所以开始的时候二头雾水(即便在此以前用过职业流,不过感到距离相当多),况兼官方的手册还不是很周密;所以本身把小编在攻读应用的进度境遇的片段疑难都位列出来分享给我们;以下几点是自己遇上和想到的,尽管你还会有哪些疑难可以在评价杏月本人调换再补偿。

鉴于这样一个运行管理种类涉及到各个不相同的事务数据.
如借款人音信有关涉嫌借款ID, 信用卡音讯等; 如出借人消息则涉及顾客ID,
电话号码等; 而对此资本相关如提前还款则涉嫌到提前还款日期, 还款金额等.
所以一套支撑差别实务的流水生产线数据表结构也是不行主要.

6.UI及截图

结合实际业务描述一个政工从上马到停止的历程,对于吸引的同窗看完柳暗花明了;这里运用请假作为例子。

图片 2

4.2 业务对象和流程关联测验

代码请转移:

❷ 申请提交系统后, 由风控实行复核

2.1 陈设流程图后汉语乱码

乱码是一直缠绕着国人的难题,在此之前各种本事、工具出现乱码的主题素材写过比很多作品,这里也不例外……,Activiti的乱码难题在流程图中。

流程图的乱码如下图所示:

图片 3

消除办法有二种:

➤可配置化的基于工作项目(Request Type)
和陈设(process_cfg)在运行时动态设置流程相应的管理人/组

6.2 流程状态

图片 4

➤ 最近, 别的三个类型其行使到的情景和那一个系统有类似之处,
其独立于该业务管理平台. 在这种场馆下, 将该职业流相关的模块实行公共化,
以JA昂科威包的情势提供, 使得其余叁个种类的支出能够短时间内达到平等的作用

6.1 单唯二个列表肩负申请

如此那般的补益是报名和流程办理分离开管理,列表呈现未运营流程的请假记录(数据库PROCESS_INSTANCE_ID为空)。

报名界面包车型地铁截图:

图片 5

对于互连网经济平台来讲,首要的专门的职业愈发是关联资金业务相关操作时都有须要有连带的审查批准流程.同期在流水生产线的流转进度中要求和一一业务系统开展互动,完结真正的事情管理,
并记录这几个进程中全体人的操作以及每一步操作时所涉及数额快速照相,以便于内外界审计和主题素材的追溯.

5.4 已完成(HistoricProcessInstance)

早就告竣的流水生产线实例。

从表ACT_HI_PROCINST中查询数据。

/**
 * 获取已经完成的流程实例查询对象
 * @param userId    用户ID
 */
@Transactional(readOnly = true)
publicHistoricProcessInstanceQuery createFinishedProcessInstanceQuery(String userId) {
    HistoricProcessInstanceQuery finishedQuery = historyService.createHistoricProcessInstanceQuery()
            .processDefinitionKey(getProcessDefKey()).finished();
    returnfinishedQuery;
}

 

?

多变历程

5.1 未签收(Task)

该类职分针对于把Task分配给三个角色时,举个例子部门长官,因为机构高管剧中人物能够钦赐多少人所以必要先签收再办理,术语:抢占式

对应的API查询:

/**
 * 获取未签收的任务查询对象
 * @param userId    用户ID
 */
@Transactional(readOnly = true)
publicTaskQuery createUnsignedTaskQuery(String userId) {
    TaskQuery taskCandidateUserQuery = taskService.createTaskQuery().processDefinitionKey(getProcessDefKey())
            .taskCandidateUser(userId);
    returntaskCandidateUserQuery;
}

?

图片 6

2.2 使用引擎提供的Form依然自定义业务Form

❸ 借款人确认, 通过客服服务人口上传具名照片

2.2.1 引擎提供的Form

概念表单的不二等秘书技在种种Task标签中定义extensionElementsactiviti:formProperty就能够,达到这几个节点的时候能够经过API读取表单成分。

Activiti官方的例证使用的正是在工艺流程定义中安装每五个节点呈现怎么的表单哪些字段必要出示、哪些字段只读、哪些字段必填。

不过这种方法唯有适用于相比轻易的流程,对于有些复杂也许页面须求职业逻辑的剖断的图景就不适用了。

对于数据的保留都以在汽油发动机的表中,不低价和其他表的关系、对整个系统的宏图也不利于!

正如上面曾说起, 对于三个体系规划, 不容许一步到位,
在开始时代时要吸引最亟需缓和的题目, 比方在这么些系统起首阶段,
最基本的安排性富含:

1.2 Activiti与JBPM5?

对于Activiti、jBPM4、jBPM5我们应该怎么着选拔,在InfoQ上有一篇文章写的很好,从大的规模相比较各种引擎之间的差距,请参考小说:纵观jBPM:从jBPM3到jBPM5以及Activiti5

  1. 完结一个创设Request的页面,
    用于录入工作数据

  2. 福寿双全二个Request详细页面, 用于呈现详细情形,
    包涵操作历史, 和作业操作按键

2.3.2 startProcessInstanceById

javadoc对其证实:

startProcessInstanceById(String processDefinitionId, String businessKey, Map variables) 
          Starts a new process instance in the exactly specified version of the process definition with the given id.

 

processDefinitionId:这些参数的值能够透过repositoryService.createProcessDefinitionQuery()方法查询,对应数据库:ACT_RE_PROCDEF;每趟安顿三遍流程定义就能够增添一条数据,同名的版本号加上。

特意表达: 此可以钦定不一致版本的流程定义,让客商多一层选用。

➤ 数据库设计 和RequestService对底层数据操作的包装

4.1 验证流程图设计是还是不是科学

代码请转移:

不仅仅的重构满含:

Activiti专业流引擎使用

  1. 有的通用的activiti流程,
    如一步操作即创办后只供给一步成功操作, 两步流程 –
    创制后一步核实一步操作等, 分化的事体会选拔一样的流程.

  2. 在activiti流程一样的情景下,
    分裂的业务的手续其管理人/组则不相同

  3. 昔不近日业务流程的莫过于代码开荒相应简洁,
    和办事流引擎解耦, 即实际的开 发职员在不领悟办事流引擎具体做事规律的意况下能够张开飞快的开垦, 并
    只需求关注具体 的事务要求

7.开启Logger

  1. 添加log4j的jar
  2. 设置log4j.logger.java.sql=DEBUG

一. 借款人存折音讯修改

1.3 Activiti资料

  • 官网:

  • 下载:

  • 本子:Activiti的版本是从5开始的,因为Activiti是使用jBPM4的源码;本子公布:五个月宣布一回。

  • Eclipse Plugin: 

  • Activit中文群:5435716

人家的系统是怎么样落到实处的?

1.简单介专门的学业流引擎与Activiti

对此专门的工作流引擎的分解请参谋百度宏观:干活流引擎

◆✦以下对第二、三点进行实行✦◆

2.2.2 自定义业务Form

这种措施应该是大家用的最多的了,因为相似的事务体系业务逻辑都会相比较复杂,而且数据库中比很多表都会有依据关系,表单中有广大动静判定。

譬喻大家的系统适用jQuery
UI作为UI,有多数javascript代码,页面的大队人马操作供给特殊管理(比如:多个选用的排外、各个节点依据项目和操作人展现差异的开关);基本每种公司都有一套本人的UI风格,要保证四个连串的操作习贯一致只可以选拔自定义表单本领满意。

哪个种类达成越来越好?

2.5 流程图设计工具用哪些

Activiti提供了四个流程设计工具,不过面向对象分化。

  • Activiti
    Modeler,面向业务人士,使用开源的BPMN设计工具Signavio,使用BPMN描述业务流程图

  • Eclipse
    Designer,面向开垦人士,Eclipse的插件,能够让开垦职员定制各样节点的性质(ID、Name、Listener、Attr等)

☞ 基础框架代码的规划

5.3 运行中(ProcessInstance)

简简单单正是从未完结的流程,全体参加过的人都应当能够阅览那几个实例,不过Activiti的API未有得以由此客户查询的办法,那么些只可以和睦用hack的点子管理了,笔者当下还不曾拍卖。

从表ACT_RU_EXECUTION中查询数据。

对应的API查询:

/**
 * 获取未经完成的流程实例查询对象
 * @param userId    用户ID
 */
@Transactional(readOnly = true)
publicProcessInstanceQuery createUnFinishedProcessInstanceQuery(String userId) {
    ProcessInstanceQuery unfinishedQuery = runtimeService.createProcessInstanceQuery().processDefinitionKey(getProcessDefKey())
            .active();
    returnunfinishedQuery;
}

?

❸ 运维机构张开退换操

2.3 业务和流程的关联格局

本条主题材料在群里面很几个人都问过,那也是自身刚刚起始吸引的地方;

新生看了以下API开掘RuntimeService有三个艺术:

基础框架代码设计

1.1 笔者与办事流引擎

在率先家公司做事的时候根本任务就是开荒OA系统,当然基本都是有专门的学业流的支撑,可是当下利用的办事流引擎是商铺部分牛人开拓的(典故是用叁个开源的引擎修改的),名为CoreFlow;作用绝对Activiti来讲相比弱,不过能满意普通的选取,当然也许有相当多的标题由此后来我们不得不修改引擎的代码打补丁。

未来是自己工作的第二家同盟社,因为要开垦ERP、OA等系统须要采取职业流,在等级次序调研阶段本人先找找资料采纳使用哪个开源办事流引擎,最后明确了Activiti5并依赖厂商的架构做了一些DEMO。

该流程发起原因根本是出于借款人信用卡转移原因供给修改. 流程关键步骤为:

2.3.3 怎样抉择

提出使用startProcessInstanceByKey,特殊情状供给使用过去的本子选拔选用startProcessInstanceById

☞设计通用的底层数据来协理分裂的事情

3.1 集成Spring

对此和Spring的集成Activiti做的正确,轻便计划部分Bean代理就能够实现,可是有七个和事务相关的地方要唤醒:

  • 配置processEngineConfiguration的时候属性transactionManager要选拔和事务作用的同二个事务管理Bean,不然事务不联合。

  • 对于完结了org.activiti.engine.delegate包中的接口的类需求被专业调节的兑现类须求被Spring代理,并且增进事务的Annotation可能在xml中布局,比方:

    /**
     * 创建缴费流程的时候自动创建实体
     *
     * @author HenryYan
     */
    @Service
    @Transactional
    publicclass CreatePaymentProcessListener implementsExecutionListener {
       ....
    }
    

?

图片 7

6.3.1 当前节点定位JS

Java代码请移步:

Javascript思路:先通过Ajax获取当前节点的坐标,在钦定地点加多深藕红边框,然后加载图片。

代码移步:

  1. 能够满意分裂的业务域的须要, 如出借, 借款, 资金有关的实际职业数据

  2. 可见记录每一步的操作审查批准或职业施行结果, 同一时候记录相关的数据快速照相

2.1.2.2 使用Ant脚本打包Zip文件

那也是大家运用的主意,你可以手动选项xml和png打包成zip格式的文本,也可以像大家一样采取ant
target的章程打包那多个公文。

<?xml version="1.0" encoding="UTF-8"?>
<project name="foo">

    <property name="workflow.definition" value="foo-common-core/src/main/resources/diagrams" />
    <property name="workflow.deployments" value="foo-common-core/src/main/resources/deployments" />

<target name="workflow.package.oa.leave">
        <echo>打包流程定义及流程图::OA-请假</echo>
        <zip destfile="${workflow.deployments}/oa/leave.zip" basedir="${workflow.definition}/oa/leave" update="true"
            includes="*.xml,*.png" />
    </target>
</project>

诸有此类当修改流程定义文件后只要运转ant命令就能够打包了:

ant workflow.package.oa.leave

未来配置bar大概zip文件查看流程图图片就不是乱码了,而是你的压缩包里面包车型的士png文件。

图片 8

4.行使单元测验

单元测验均接纳Spring的AbstractTransactionalJUnit4SpringContextTests作为SuperClass,何况在测量检验类加多:

@ContextConfiguration(locations = { "/applicationContext-test.xml"})
@RunWith(SpringJUnit4ClassRunner.class)

?

纵然Activiti也提供了测量试验的有个别超类,但是以为不佳用,所以本身包裹了有的主意。

代码请转移:

对此三个看似涉及到审查批准以及试行实际工作的系统, 基于轻巧的情况调节的安插,
可能电动开辟类专业流引擎轮子的做法都是不合适.
所以八个开源何况被广大应用的做事流引擎是二个不利并且必得的选用. Activiti
工作流引擎由于其轻量级, 易用性等优点目前在产业界被大面积使用.
其职业流的状态机和表面系统的连年只须要经过贰个ID举办关联就能够,
即activiti的business key. (如下图)

5.各类场馆包车型客车天职查询以及和事务对象关系

大家近期分成4中状态:未签收、办理中、运营中、已做到。

查询到任务依然流程实例后要显得在页面,这年供给增加业务数据,最终结果即是职业和流程的并集,请参照他事他说加以考察6.2

◆✦下边为八个非凡的业务流程✦◆

3.配置

Property表里是否供给必要用不相同的字段(LONG_VALUE,
TEXT_VALUE, DOUBLE_VALUE等)存差别类其他值;照旧一贯都存成字符串,
在代码中再根据须求转成Long, Double等?当然二种完结都以平价的,
而且各有优瑕玷,
并且个人以为存在差异的字段上亮点更加大片段(主要浮今后查询效能),
不过怎么进一步的让和煦信服?
在看activiti的文书档案时发掘外界的作业数据以Map的方法存在activiti的数据库中,
那么activiti的设计者同样会境遇同样的难题.
通过查看源代码以及其数据库设计, 开掘其将数据存入分化的字段.
可是在本人的宏图中, 作者并从未完全照搬Activiti的管理方式, 比如:
作者尚未为布尔类型加单独的字段,
而是以0大概1的措施存入LONG_VALUE里。

8.结束

事先就想写那篇作品,未来到底不辱义务了,开支了几个小时,希望能节省你几天的光阴。

请读者留神翻阅Activiti的客户手册和Javadoc。

来自:

网编:

5.2 办理中(Task)

该类职责数据类源有二种:

  • 签收后的,5.第11中学签收后就应有为办理中状态

  • 节点钦赐的是实际到一位,并非角色

对应的API查询:

/**
 * 获取正在处理的任务查询对象
 * @param userId    用户ID
 */
@Transactional(readOnly = true)
publicTaskQuery createTodoTaskQuery(String userId) {
    TaskQuery taskAssigneeQuery = taskService.createTaskQuery().processDefinitionKey(getProcessDefKey()).taskAssignee(userId);
    returntaskAssigneeQuery;
}

?

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注