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

2019-10-22 06:45栏目:管家婆互联网
TAG:

原标题:基于职业流的阳台处理体系规划

Activiti专门的学问流引擎使用

图片 1

1.轻便介工作流引擎与Activiti

对于专门的职业流引擎的解说请参谋百度健全:办事流引擎

对于网络经济平台来讲,首要的作业愈发是关乎资金业务相关操作时都有供给有连带的审查批准流程.同有时间在工艺流程的四海为家进度中必要和顺序业务系统进行相互,落成真正的事体管理, 并记录这些历程中全部人的操作以致每一步操作时所涉及数量快速照相,以便于内外界审计和主题素材的追溯.

1.1 笔者与办事流引擎

在率先家商厦办事的时候根本职分正是开辟OA系统,当然基本都以有职业流的支撑,可是当下利用的劳作流引擎是公司部分牛人开垦的(听别人讲是用三个开源的引擎修改的),名为CoreFlow;成效相对Activiti来讲相比弱,可是能满足平时的接收,当然也可以有无数的问题因而后来大家不得不修改引擎的代码打补丁。

昨天是作者专门的学问的第二家合营社,因为要开垦ERP、OA等种类须求接收专门的学问流,在项目应用商量阶段本身先物色资料选拔使用哪个开源工作流引擎,最后分明了Activiti5并依靠厂商的架构做了有的DEMO。

◆✦上面为三个出色的业务流程✦◆

1.2 Activiti与JBPM5?

对此Activiti、jBPM4、jBPM5我们相应什么挑选,在InfoQ上有黄金时代篇小说写的很好,从大的范畴比较各类引擎之间的异样,请参见小说:纵观jBPM:从jBPM3到jBPM5以及Activiti5

(注: 为了注解方便, 已经简化和修改相关手续, 和点融实操区别等)

1.3 Activiti资料

  • 官网:

  • 下载:

  • 本子:Activiti的本子是从5开始的,因为Activiti是使用jBPM4的源码;本子公布:3个月揭橥一遍。

  • Eclipse Plugin: 

  • Activit中文群:5435716

图片 2

2.首先使用境遇标题采摘

因为Activiti刚刚退出不久所以资料比较空缺,普通话资料越来越少的可怜,所以初步的时候没头没脑(固然事先用过职业流,不过认为距离比非常多),何况官方的手册还不是很圆满;所以小编把小编在求学生运动用的长河境遇的片段疑难都位列出来分享给我们;以下几点是自己遭受和想到的,借让你还大概有哪些疑点能够在斟酌竹秋自个儿交流再补偿。

生气勃勃. 借款人银行卡新闻修改

2.1 安插流程图后中文乱码

乱码是平素缠绕着国人的标题,在此之前各类手艺、工具出现乱码的难题写过不菲文章,这里也不例外……,Activiti的乱码难题在流程图中。

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

图片 3

消除办法有三种:

该流程发起原因根本是出于借款人银行卡转移原因必要修改. 流程关键步骤为:

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

❶ 顾客联系顾客服务人口,提交报名, 包含借款消息, 手持身份ID照片, 银行卡音信等

2.1.2 使用压缩包形式计划

Activiti补助布署*.bpmn20.xml、bar、zip格式的流程定义。

行使Activit Deisigner工具设计流程图的时候会有五个品种的文本:

  • .activiti设计工具使用的文书

  • .bpmn20.xml统一筹算工具自动根据.activiti文件生成的xml文件

  • .png流程图图片

化解办法正是把xml文件和图片文件同期配备,因为在独立安插xml文件的时候Activiti会自动生成一张流程图的图纸文件,但是那样在运用的时候坐标和图片对应不起来……

之所以把xml和图表同期安顿的时候Activiti自动关联xml和图片,当要求取得图片的时候一贯回到安排时压缩包里面包车型大巴图纸文件,并非Activiti自动生成的图形文件

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

2.1.2.1 使用工具打包Bar文件

右键项目名称然后点击“Create deployment artifacts”,会在src目录中创制deployment文本夹,里面含有*.bar文件.

❸ 运行机构开展改变操

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文件。

二. 提前还款流程

2.2 使用引擎提供的Form照旧自定义业务Form

发起流程的要紧原因是客商期待依照公约举行提前还款. 流程关键步骤为:

2.2.1 引擎提供的Form

概念表单的法子在每一个Task标签中定义extensionElementsactiviti:formProperty就可以,达到那几个节点的时候能够经过API读取表单元素。

Activiti官方的事例使用的正是在流程定义中装置每七个节点突显怎么的表单哪些字段要求展示、哪些字段只读、哪些字段必填。

然则这种措施独有适用于比较简单的流程,对于有些复杂只怕页面必要职业逻辑的论断的状态就不适用了。

对于数据的保存都以在斯特林发动机的表中,不低价和任何表的关联、对总体系统的宏图也是有损!

❶ 借款人联系客服人员, 提交报名

2.2.2 自定义业务Form

这种形式应该是豪门用的最多的了,因为相似的作业系统工作逻辑都会比较复杂,而且数据库中众多表都会有依据关系,表单中有数不清情状推断。

例如大家的系统适用jQuery UI作为UI,有大多javascript代码,页面的广大操作须求特别管理(举个例子:三个接纳的排外、每种节点依据项目和操作人突显区别的开关);基本每一种集团都有大器晚成套本人的UI风格,要维持八个系列的操作习于旧贯豆蔻年华致只好选取自定义表单工夫满意。

❷ 运维生成提前还款说明书, 其满含详细金额多少

2.3 业务和流程的关系格局

其如日中天标题在群里面很四个人都问过,这也是本身刚刚初步迷惑的地方;

后来看了以下API发现RuntimeService有四个点子:

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

2.3.1 startProcessInstanceByKey

javadoc对其验明正身:

startProcessInstanceByKey(String processDefinitionKey, Map variabes) 
          Starts a new process instance in the latest version of the process definition with the given key

 

其中businessKey便是专业ID,比如要提请请假,那么先填写登记音信,然后(保存+运营流程),因为请假是单独设计的数据表,所以保存后获得实体ID就能够把它传给processInstanceBusinessKey措施运维流程。当须求依据businessKey查询流程的时候就足以由此API查询:

runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(processInstanceBusinessKey, processDefinitionKey);

 

议数据库冗余设计:在业务表设计的时候增加一列:PROCESS_INSTANCE_ID varchar2(64),在流水生产线运转今后把流程ID更新到业务表中,那样不管从专门的学业恐怕流程都足以查询到对方!

专程表达: 此方法运行时自动选取新型版本的流水生产线定义。

❹ 运维代扣还款金额, 结清借款

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;每一趟安排三次流程定义就能增加一条数据,同名的本子号增加。

极其表明: 此能够钦定不相同版本的流水线定义,让客商多后生可畏层选取。

❺ 生成还款结清注解

2.3.3 怎么样采纳

提出接收startProcessInstanceByKey,特殊景况须求采纳过去的本子选用使用startProcessInstanceById

在凉台的莫过于运行中, 有有滋有味的政工须求管理, 包罗借款人, 出借人, 资金等等, 同期还关系到各类分歧的业务部门, 何况流程的流转操作职员和机关也搭飞机公司职业的进步而各异的调解. 设计八个基础的流程框架和得以完结基础代码, 产生简单的支付方式是该体系的第风流浪漫. 由此整个系统的布署涉及到以下注重多少个地点:

2.4 同步客户数据

这一个标题也是非常多的人精通过,Activiti帮衬对任务分配到:钦点人、内定组、两个结合,而那些人和组的音信都保存在ACT_ID..表中,有投机的客户和组(剧中人物)管理让无数人仓皇了;原因是因为每种系统都会存在二个权力处理模块(维护:顾客、部门、角色、授权),不亮堂该怎么和Activiti同步。

☞ 选取适当的做事流引擎

2.4.1 提议管理情势

Activiti有一个IdentityService接口,通过那一个接口能够操控Activiti的ACT_ID_*表的数额,经常的做法是用工作系统的权限管理模块维护顾客数据,当实行CRUD操作的时候在原来专门的学业逻辑后边增添同步到Activiti的代码;例如增多三个顾客时同步Activiti User的代码片段:

/**
 * 保存用户信息 并且同步用户信息到activiti的identity.User,同时设置角色
 * @param user
 * @param roleIds
 */
public void saveUser(User user, List<Long> roleIds, boolean synToActiviti) {
    accountManager.saveEntity(user);
    String userId = user.getId().toString();

    if (synToActiviti) {
        List<org.activiti.engine.identity.User> activitiUsers = identityService.createUserQuery().userId(userId).list();
        if (activitiUsers.size() == 1) {
            //更新信息
            org.activiti.engine.identity.User activitiUser = activitiUsers.get(0);
            activitiUser.setFirstName(user.getName());
            activitiUser.setLastName("");
            activitiUser.setPassword(user.getPassword());
            activitiUser.setEmail(user.getEmail());
            identityService.saveUser(activitiUser);

            // 删除用户的membership
            List<Group> activitiGroups = identityService.createGroupQuery().groupMember(userId).list();
            for (Group group : activitiGroups) {
                identityService.deleteMembership(userId, group.getId());
            }

            // 添加membership
            for (Long roleId : roleIds) {
                Role role = roleManager.getEntity(roleId);
                identityService.createMembership(userId, role.getEnName());
            }

        } else {
            org.activiti.engine.identity.User newUser = identityService.newUser(userId);
            newUser.setFirstName(user.getName());
            newUser.setLastName("");
            newUser.setPassword(user.getPassword());
            newUser.setEmail(user.getEmail());
            identityService.saveUser(newUser);

            // 添加membership
            for (Long roleId : roleIds) {
                Role role = roleManager.getEntity(roleId);
                identityService.createMembership(userId, role.getEnName());
            }
        }
    }

}

 

去除操作也和那一个看似!

不管从事情种类保障客商依然从Activiti维护,确定要规定如火如荼方,然后CRUD的时候共同到对方,要是急需一齐多少个子系统那么能够再调用WebService完结。

对于贰个好像涉及到审查批准以致推行实际事务的系统, 基于轻松的景色调整的布署性, 或许机关开辟类专门的职业流引擎轮子的做法都以不合适. 所以贰个开源何况被大面积采用的干活流引擎是三个不错并且必需的选拔. Activiti 专门的职业流引擎由于其轻量级, 易用性等优点近年来在业界被广大使用. 其专门的工作流的状态机和外界系统的接连几日只需求通过一个ID举办关联就可以, 即activiti的business key. (如下图)

2.5 流程图设计工具用哪些

Activiti提供了多个流程设计工具,可是面向对象分化。

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

  • Eclipse Designer,面向开采职员,Eclipse的插件,能够让开采人士定制每种节点的属性(ID、Name、Listener、Attr等)

图片 4

2.5.1 大家的不二等秘书籍

唯恐您会好奇,因为大家从未动用Activiti Modeler,我们以为用Viso已经能发挥流程图的意思了,并且项目老总也是手艺出身,和开垦人士也易于调换。

此时此刻那些类型是率先个应用Activiti的,先河大家在须要调研阶段选择Viso设计流程图,利用泳道流程图统一筹算和客商关系,分明后由担负流程的开拓职员用Eclipse Designer设计赢得bpmn20.xml,最终布署。

☞设计通用的平底数据来支撑分歧的事体

2.6 Eclipse Designer存在的难点

那些插件有三个很讨厌的Bug平昔未修复,安装了插件后Eclipse的复制和粘帖快捷键会被撤换为(Ctrl+Insert、Shift+Insert);Bug描述请见:

  • Activit Forums中告知的Bug

  • Jira的登记

就此最后大家不得不单独开五个设置了Eclipse Designer的Eclipse特地用来统一准备流程图,那样就不影响不奇怪使用Eclipse JAVAEE了。

由于那样一个运行管理体系关系到种种不一样的职业数据. 如借款人音讯相关关系借款ID, 银行卡消息等; 如出借人音讯则涉及顾客ID, 电话号码等; 而对此基金有关如提前还款则关乎到提前还款日期, 还款金额等. 所以龙精虎猛套支撑分裂实际专门的学业的流程数据表结构也是丰裕首要.

3.配置

☞ 基础框架代码的规划

3.1 集成Spring

对于和Spring的集成Activiti做的没有错,轻便安插部分Bean代理就能够兑现,不过有四个和事情相关的地点要唤醒:

  • 配置processEngineConfiguration的时候属性transactionManager要运用和事情职能的同四个事务处理Bean,不然事务不相同步。

  • 对此落到实处了org.activiti.engine.delegate包中的接口的类须求被专门的学问调节的落到实处类需求被Spring代理,何况增进事务的Annotation或许在xml中陈设,比如:

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

?

一个好的统一计划不是一步到位的统一准备, 而是二个渐进的经过以致不断重构的进程. 但是那一个关键的有些就是在活龙活现开端能够依据近年来的须要甚至所能预言的供给开展统筹, 而且在此个基础框架代码上付出要进一步方便人民群众和简洁.

4.用到单元测量试验

单元测量试验均采纳Spring的AbstractTransactionalJUnit4SpringContextTests作为SuperClass,何况在测量检验类增添:

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

?

固然如此Activiti也提供了测量试验的局地超类,不过感到不佳用,所以本人包裹了有个别办法。

代码请转移:

◆✦以下对第二、三点进展拓宽✦◆

4.1 验证流程图设计是或不是准确

代码请转移:

图片 5

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

代码请转移:

数据库设计

5.各个气象的职责查询以至和事情对象关联

大家当前分为4中状态:未签收、办理中、运营中、已产生。

查询到职分仍然流程实例后要体今后页面,那一年必要丰富业务数据,最后结果正是业务和流程的并集,请参照他事他说加以考察6.2

如上所说, 这样的一个数码铺排必得能够满足:

5.1 未签收(Task)

该类职务针对于把Task分配给三个角色时,比如部门理事,因为部门长官角色能够内定几个人所以必要先签收再办理,术语:抢占式

对应的API查询:

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

?

  1. 能够满意差异的业务域的需要, 如出借, 借款, 资金相关的切切实实业务数据

  2. 可以知道记录每一步的操作审查批准或业务奉行结果, 同有时候记录相关的数据快速照相

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

?

为此, 基于现实的事体实行数据表的安排性是不适于的, 且无法扩大. 常见的计划为依据Key-Value的安顿, 而key则是逐条不一样专门的职业连串关系到的metadata. 如USE汉兰达_ID(用户ID), LOAN_ID(借款ID)等等. 设计概述如下:

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

?

图片 6

5.4 已完成(HistoricProcessInstance)

早已收尾的流水生产线实例。

从表ACT_HI_PROCINST中查询数据。

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

 

?

四个Request代表某一人发起的乞请, Snapshot代表那几个流程的每一步操作. Property则分级为Request的Snapshot的切切实实的多寡, 当其REQUEST_ID非空SNAPSHOT_ID为空时表示其为REQUEST的天性(SNAPSHOT同理), 即客商发起倡议所辅导的数据. 如: 客商音信修改: PROPERTY则满含NAME(KEY)为USEPAJERO_ID(客户唯意气风发ID), ATTACHMENT(客商手持身份ID照片), EMAIL(修改项)等八方呼应的值. 而对此SNAPSHOT, 则记录对应审查甚至操作的音信, 其相应的PROPERTY则保留了对有些数据修改前后的值.

5.5 查询时和业务涉嫌

提示:早先在作业对象加多了PROCESS_INSTANCE_ID字段

思路:现在得以应用那一个字段查询了,不管是Task还是ProcessInstance都得以得到流程实例ID,能够依靠流程实例ID查询实体然后把流程对象设置到实体的一个性子中由Action或许Controller输出到前台。

代码请参见:

基础框架代码设计

6.UI及截图

结合实际业务描述二个事务从起初到告竣的进程,对于吸引的同窗看完振聋发聩了;这里运用请假作为例子。

千帆竞发的光景和要求富含:

6.1 单唯七个列表肩负申请

这么的裨益是报名和流程办理分离开管理,列表显示未运维流程的请假记录(数据库PROCESS_INSTANCE_ID为空)。

提请分界面包车型客车截图:

图片 7

  1. 局地通用的activiti流程, 如一步操作即创办后只需求一步成功操作, 两步流程 – 成立后一步检查核对一步操作等, 不一样的政工会利用一样的流程.

  2. 在activiti流程同样的情事下, 不一样的事情的步子其管理人/组则不一致

  3. 昔不近些日子业务流程的实际代码开垦相应简洁, 和工作流引擎解耦, 即实际的开 发职员在不打听专门的学问流引擎具体做事原理的气象下得以开展急速的支付, 并 只要求关切具体 的事体供给

6.2 流程状态

图片 8

为了减轻#1的难点, 则供给定义出流程--步骤—业务(要求类型)—管理人/组 的配备 关系, 并在流程流转时自动安装, 实际不是在工艺流程描述文件 (bpmn)里 钦点

6.3 流程跟踪

图表情势显示当前节点:

图片 9

列表方式展示流程流转进度:

图片 10

为了消除 #2 的标题, 则必要用劳动拓宽包装, 抽象出部分接口以至基类的实 现, 并 应用有的相近的设计格局(工厂形式)和java的表征(反射).

6.3.1 当前节点定位JS

Java代码请移步:

Javascript思路:先通过Ajax获取当前节点的坐标,在钦定地方增添玉石白边框,然后加载图片。

代码移步:

下图为骨干的架构划虚构计

7.开启Logger

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

图片 11

8.结束

事先就想写那篇著作,今后总算不负职责了,费用了多少个小时,希望能节省你几天的时间。

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

来自:

据悉那样的框架变成基础代码后, 最终对于贰个达成具体育赛事务的开垦人士来讲, 其实现三个业务流程代码重要不外乎:

  1. 兑现二个创办Request的页面, 用于录入工作数据

  2. 达成一个Request详细页面, 用于体现详情, 富含操作历史, 和业务操作按键

3. 兑现该业务关联的具体步骤的操作processor类(如审查批准或和另外系统对接, 达成实际的事情),

  1. 将流程涉及的processor和相应的作业种类, 流程名, 流程步骤进行挂号绑定

变异历程

正如上边曾谈起, 对于贰个系统规划, 不容许一步到位, 在最先时要引发最要求缓慢解决的标题, 举例在此个系统开头阶段, 最基本的设计包蕴:

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

➤ Workflow瑟维斯对职业流引擎的卷入

➤可配置化的基于业务系列(Request Type) 和安排(process_cfg)在运作时动态设置流程相应的管理人/组

接踵而来的重构包蕴:

➤将各个管理类(业务管理类, 流程管理人/组分配处理类, 文告管理类) 通过RegisterService的统后生可畏登记管理, 并且扶助使用对于特定的流水线达成特定的拍卖类来替代私下认可的管理类

➤RequestQuery帮助统黄金时代的查询入口对业务流程数据开展询问

➤ 依据业务须求提供ASync的processor管理基类, 因为其实使用中发觉, 一些作业的管理(如批量)供给后生可畏段时间的实践才具造成, 而异步处理基类则产生基础达成, 并由相应子类去达成虚函数就可以.

公共化专门的工作流模块:

➤ 如今, 别的叁个类型其接受到的光景和这一个系统有类似之处, 其独自于该业务管理平台. 在此种场所下, 将该职业流相关的模块实行公共化, 以JAWrangler包的方式提供, 使得别的一个类别的开拓可以短时间内完毕一样的功能

借鉴Activiti的源代码

在规划和落实该种类时会有

那般或许那样的吸引可能视若无睹争,

哪意气风发种完结越来越好?

他人的系统是何许实现的?

此地举多少个例子

Property表里是否要求必要用不一致的字段(LONG_VALUE, TEXT_VALUE, DOUBLE_VALUE等)存差别类其他值;还是直接都存成字符串, 在代码中再借助须求转成Long, Double等?当然三种完成都是卓有成效的, 而且各有利弊, 並且个人感到存在差别的字段上亮点越来越大风姿浪漫部分(首要反映在询问成效), 可是什么进一步的让投机信服? 在看activiti的文书档案时开掘外界的专业数据以Map的章程存在activiti的数据库中, 那么activiti的设计者同样会遇上一样的主题材料. 通过查看源代码以至其数据库设计, 发掘其将数据存入分化的字段. 不过在笔者的设计中, 作者并未完全照搬Activiti的管理格局, 举个例子: 小编从没为布尔类型加单独的字段, 而是以0恐怕1的办法存入LONG_VALUE里。

Activiti中提供便利的查询类, 如: ProcessInstanceQuery, TaskQuery. 其同一时间支持依据Process和Task相应的属性数据实行查询, 和Request/Snapshot以致property有异常的大的相似之处, 借鉴并依赖实际情形兑现本身的RequestQuery类, 援救各个复杂查询, 如: 依据钦命的property的name和value查询, 援救or的查询等。

Activiti的数据库版本的自行晋级. 当大家晋级activiti的本龙时, 其实大家只必要更新JAKuga的版本号, 而不用关爱起底层数据库是不是须求提高, activiti在其表中会记录数据库scheme的版本号, 运转时会自动判定并依照须求自动更新数据库. 那也是十一分值得借鉴的地点, 极其是当以此模块被多个系列所使用时。

图片 12回到微博,查看更加的多

网编:

版权声明:本文由管家婆开奖结果发布于管家婆互联网,转载请注明出处:基于工作流的平台管理系统设计,Activiti工作流引