Activiti工作流引擎使用

原标题:基于工作流的阳台管理类别规划

Activiti工作流引擎使用

图片 1

一.简单介职业流引擎与Activiti

对于职业流引擎的演讲请参考百度健全:办事流引擎

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

对于工作流引擎的分解请参考百度完善:干活流引擎

对此互连网金融平台来讲,首要的工作特别是涉嫌资本业务有关操作时都有不能缺少有连锁的审查批准流程.同时在流水生产线的流浪进程中须要和一一业务种类开始展览互动,达成真正的事情处理,
并记录这一个进度中全部人的操作以及每一步操作时所涉及数额快速照相,以便于内外部审计和难点的追溯.

一.一 作者与做事流引擎

在首先家商厦职业的时候根本职务就是开辟OA系统,当然基本都是有工作流的支撑,可是当下选拔的职业流引擎是集团部分牛人开辟的(据他们说是用2个开源的引擎修改的),名为CoreFlow;功效相对Activiti来讲相比弱,可是能满意常常的运用,当然也有无数的标题由此后来大家不得不修改引擎的代码打补丁。

现行反革命是本人职业的第3家商厦,因为要开垦ERP、OA等系统须求使用工作流,在品种应用商量阶段自个儿先找找资料选用采用哪个开源工作流引擎,最后显著了Activiti5并基于厂家的架构做了有的DEMO。

壹.一 笔者与办事流引擎

在率先家商厦做事的时候根本职责就是开辟OA系统,当然基本都是有职业流的支撑,可是当下应用的劳作流引擎是集团部分牛人开荒的(据悉是用多个开源的引擎修改的),名称为CoreFlow;功用相对Activiti来讲相比弱,可是能满意平日的应用,当然也有那1个的问题因而后来大家只可以修改引擎的代码打补丁。

今昔是本人工作的第三家商厦,因为要开荒ERP、OA等系统要求动用职业流,在品种调查商量阶段本人先找找资料采用选择哪个开源干活流引擎,最后明确了Activiti5并依照厂家的架构做了部分DEMO。

◆✦下边为三个出色的业务流程✦◆

1.2 Activiti与JBPM5?

对此Activiti、jBPM4、jBPM五大家理应怎么着采用,在InfoQ上有1篇小说写的很好,从大的范围相比各样引擎之间的反差,请参见文章:纵观jBPM:从jBPM3到jBPM5以及Activiti5

1.2 Activiti与JBPM5?

对此Activiti、jBPM四、jBPM五我们应当怎么挑选,在InfoQ上有壹篇小说写的很好,从大的范畴相比各类引擎之间的出入,请参考小说:纵观jBPM:从jBPM3到jBPM5以及Activiti5

(注: 为了证实方便, 已经简化和修改有关手续, 和点融实操不1致)

1.3 Activiti资料

  • 官网:

  • 下载:

  • 本子:Activiti的本子是从5开始的,因为Activiti是使用jBPM4的源码;本子公布:四个月公布二次。

  • Eclipse Plugin: 

  • Activit中文群:5435716

1.3 Activiti资料

  • 官网:

  • 下载:

  • 本子:Activiti的版本是从5开始的,因为Activiti是使用jBPM4的源码;本子发布:五个月发表叁遍。

  • Eclipse Plugin: 

  • Activit中文群:236540304

图片 2

2.第1使用遭受标题收罗

因为Activiti刚刚退出不久所以资料相比空缺,汉语资料越来越少的可怜,所以伊始的时候三只雾水(就算从前用过职业流,可是以为距离许多),而且官方的手册还不是很完善;所以作者把自家在攻读应用的进程遇到的有的疑团都位列出来分享给我们;以下几点是自身遇上和想到的,假诺您还有怎么样疑难能够在评价5月本身沟通再补充。

二.起头使用境遇难题采访

因为Activiti刚刚退出不久所以资料比较空缺,汉语资料更少的可怜,所以早先的时候一只雾水(固然事先用过职业流,不过以为距离大多),而且官方的手册还不是很周密;所以本人把自个儿在学习运用的历程境遇的某个问号都位列出来分享给大家;以下几点是自己遭逢和想到的,若是您还有啥样疑点能够在评论花月自笔者沟通再补充。

壹. 借款人银行卡消息修改

2.一 计划流程图后中文乱码

乱码是直接缠绕着国人的问题,在此以前各样手艺、工具出现乱码的主题材料写过不少小说,那里也不例外……,Activiti的乱码难点在流程图中。

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

图片 3

消除办法有三种:

二.壹 安插流程图后中文乱码

乱码是直接缠绕着国人的主题材料,此前种种技艺、工具出现乱码的标题写过众多篇章,这里也不例外……,Activiti的乱码难题在流程图中。

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

图片 4

化解办法有二种:

该流程发起原因主要是由于借款人银行卡转移原因需求修改. 流程关键步骤为:

二.一.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);

二.壹.一 修改源代码格局

修改源码

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

在构造方法

public ProcessDiagramCanvas(int width, int height)

中有一行代码是安装字体的,默许是用Arial字体,那正是乱码产生的来由,把字改为地点的中文字体就能够,例如:

?

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

本来如若你有配备文件读取工具那么能够设置在*.properties文件中,笔者正是如此做的:

?

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

5.12本子开头援救设置字体名称,在斯特林发动机中增加如下设置,在生成图片时就可以使用微软雅黑安装图片中的文字。

?

1
<property
name
="activityFontName"
value
="微软雅黑"></property>

❶ 用户联系客户服务人士,提交报名, 包涵借款新闻, 手持身份证照片,
银行卡音讯等

二.1.二 使用压缩包方式配置

Activiti协助安顿*.bpmn20.xml、bar、zip格式的流程定义。

使用Activit Deisigner工具设计流程图的时候会有三个门类的文件:

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

  • .bpmn20.xml规划工具自动依据.activiti文件生成的xml文件

  • .png流程图图片

解决办法正是把xml文件和图纸文件同时配备,因为在单身陈设xml文件的时候Activiti会自动生成一张流程图的图样文件,然则那样在利用的时候坐标和图纸对应不起来……

就此把xml和图片同时配备的时候Activiti自动关联xml和图纸,当须要得到图片的时候一向重返计划时压缩包里面包车型大巴图样文件,而不是Activiti自动生成的图片文件

二.1.二 使用压缩包格局陈设

Activiti接济计划*.bpmn20.xml、bar、zip格式的流程定义。

利用Activit Deisigner工具设计流程图的时候会有七个类型的公文:

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

  • .bpmn20.xml设计工具自动依照.activiti文件生成的xml文件

  • .png流程图图片

消除办法正是把xml文件和图表文件同时安顿,因为在单独安插xml文件的时候Activiti会自动生成一张流程图的图形文件,不过这么在运用的时候坐标和图表对应不起来……

据此把xml和图表同时布置的时候Activiti自动关联xml和图表,当需求获得图片的时候一直重临计划时压缩包里面包车型客车图样文件,而不是Activiti自动生成的图片文件

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

二.一.二.1 使用工具打包Bar文件

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

二.1.贰.一 使用工具打包Bar文件

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

❸ 运转单位开始展览改变操

贰.一.二.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文件。

二.一.贰.二 使用Ant脚本打包Zip文件

这也是大家利用的主意,你能够手动选项xml和png打包成zip格式的文件,也得以像大家一致采纳ant
target的措施打包那多个文件。

123456789101112
<?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>

view
rawbuild.xml hosted
with ❤ by GitHub

如此那般当修改流程定义文件后一旦运转ant命令就足以打包了:

ant workflow.package.oa.leave

未来安插bar或然zip文件查看流程图图片就不是乱码了,而是你的压缩包里面包车型大巴png文件。

二. 提前还款流程

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

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

发起流程的要害原因是用户愿意遵照合同进行提前还款. 流程关键步骤为:

二.贰.1 引擎提供的Form

概念表单的点子在每一个Task标签中定义extensionElementsactiviti:formProperty就能够,到达这几个节点的时候可以由此API读取表单成分。

Activiti官方的事例使用的正是在流水生产线定义中装置每二个节点突显怎么的表单哪些字段供给体现、哪些字段只读、哪些字段必填。

而是那种措施唯有适用于比较轻易的流程,对于某些复杂也许页面需求职业逻辑的论断的场馆就不适用了。

对此数据的保留都是在斯特林发动机的表中,不便宜和任何表的关联、对整个系统的布置性也不利于!

二.二.1 引擎提供的Form

概念表单的格局在各种Task标签中定义extensionElementsactiviti:formProperty就能够,达到这些节点的时候能够由此API读取表单成分。

Activiti官方的例子使用的正是在工艺流程定义中设置每一个节点显示怎么的表单哪些字段必要出示、哪些字段只读、哪些字段必填。

不过那种办法唯有适用于比较简单的流水线,对于有个别复杂可能页面需求工作逻辑的推断的场合就不适用了。

对此数据的保存都以在汽油发动机的表中,不便宜和任何表的关联、对一切系统的统筹也不利!

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

二.二.贰 自定义业务Form

那种方法应该是大家用的最多的了,因为一般的事体系统工作逻辑都会比较复杂,而且数据库中大多表都会有依靠关系,表单中有众多情况剖断。

比如说大家的系列适用jQuery
UI作为UI,有成都百货上千javascript代码,页面包车型客车过多操作供给特殊处理(例如:多少个选用的排外、每一种节点依据项目和操作人显示不一样的开关);基本每一个厂家都有壹套本人的UI风格,要保持八个系统的操作习惯1致只可以使用自定义表单技艺满足。

二.2.贰 自定义业务Form

那种艺术应该是大家用的最多的了,因为1般的事体体系业务逻辑都会相比复杂,而且数据库中过多表都会有依靠关系,表单中有这一个意况推断。

比如大家的种类适用jQuery
UI作为UI,有为数不少javascript代码,页面的广大操作需求异常处理(例如:四个选取的排斥、各个节点依据项目和操作人展现区别的按键);基本各样公司都有1套自个儿的UI风格,要保持八个类别的操作习惯壹致只可以选择自定义表单技术满足。

❷ 运营生成提前还款表达书, 其包涵详细金额多少

二.3 业务和流程的关系情势

这么些题材在群里面很三人都问过,那也是自家刚刚早先吸引的地点;

新兴看了以下API发现RuntimeService有五个法子:

二.三 业务和流程的涉嫌方式

其1主题素材在群里面很三人都问过,那也是本身刚刚发轫吸引的地点;

新生看了以下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.1 startProcessInstanceByKey

javadoc对其验明正身:

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

其中businessKey就是事情ID,例如要提请请假,那么先填写登记音讯,然后(保存+运维流程),因为请假是单独设计的数据表,所以保存后拿走实体ID就可以把它传给processInstanceBusinessKey措施运维流程。当必要依据businessKey查询流程的时候就足以由此API查询:

?

1
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遍流程定义就会增加一条数据,同名的本子号加上。

专程表达: 此能够钦点差别版本的流程定义,让用户多壹层选用。

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.叁.三 怎么着选用

提出选用startProcessInstanceByKey,特殊情状供给接纳过去的本子采取使用startProcessInstanceById

二.叁.三 如何抉择

建议利用startProcessInstanceByKey,特殊境况要求选择过去的本子选取使用startProcessInstanceById

在阳台的实在运行中, 有各样种种的事体需求处理, 包涵借款人, 出借人,
资金等等, 同时还论及到各种分歧的业务部门,
而且流程的萍踪浪迹操作人士和部门也随着集团工作的进步而区别的调节.
设计一个基础的流程框架和达成基础代码, 产生轻易的付出情势是该种类的严重性.
由此全体系列的计划性涉及到以下重点多少个地点:

二.肆 同步用户数据

这几个题目也是比较多的人驾驭过,Activiti帮忙对职务分配到:钦赐人、钦命组、两者结合,而这几个人和组的音信都保存在ACT_ID..表中,有友好的用户和组(脚色)管理让无数人心慌了;原因是因为各个系统都会存在三个权力管理模块(维护:用户、部门、角色、授权),不精通该怎么和Activiti同步。

二.四 同步用户数量

本条标题也是相比多的人询问过,Activiti帮衬对职责分配到:钦命人、钦赐组、两者结合,而那么些人和组的音信都保存在ACT_ID..表中,有协调的用户和组(角色)管理让广大人心慌了;原因是因为每个系统都会存在1个权力管理模块(维护:用户、部门、剧中人物、授权),不明了该怎么和Activiti同步。

☞ 选拔稳当的工作流引擎

二.四.一 提议处理方式

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完成。

二.4.1 提议处理格局

Activiti有一个IdentityService接口,通过那个接口能够操控Activiti的ACT_ID_*表的数据,一般的做法是用工作种类的权限管理模块维护用户数量,当举办CRUD操作的时候在原本业务逻辑前面增多同步到Activiti的代码;例如增多三个用户时同步Activiti
User的代码片段:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
/** * 保存用户信息 并且同步用户信息到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());           }        }    } }

view
rawAccountServiceImpl.java hosted
with ❤ by GitHub

除去操作也和那么些就像是!

甭管从作业系列保证用户依然从Activiti维护,肯定要规定1方,然后CRUD的时候一齐到对方,如果供给共同七个子系统那么能够再调用WebService达成。

对此二个接近涉及到审查批准以及执行实际工作的系统, 基于轻便的气象调节的设计,
可能电动开荒类工作流引擎轮子的做法都是不合适.
所以两个开源并且被广大应用的行事流引擎是贰个正确而且必须的接纳. Activiti
职业流引擎由于其轻量级, 易用性等优点如今在业界被大规模使用.
其工作流的状态机和表面系统的连天只须要经过1个ID进行关联就能够,
即activiti的business key. (如下图)

二.五 流程图设计工具用什么样

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

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

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

贰.伍 流程图设计工具用什么样

Activiti提供了五个流程设计工具,但是面向对象差异。

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

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

图片 5

二.伍.一 大家的法子

想必你会离奇,因为我们未有运用Activiti
Modeler,大家感觉用Viso已经能表明流程图的意味了,而且项目主任也是本事出身,和开拓职员也便于调换。

现阶段那一个连串是首先个使用Activiti的,初阶大家在须要科学商量阶段选拔Viso设计流程图,利用泳道流程图统一筹划和客户交流,分明后由负责流程的开拓职员用Eclipse
Designer设计赢得bpmn20.xml,最终铺排。

二.5.一 大家的办法

莫不你会好奇,因为我们从未选取Activiti
Modeler,我们感到用Viso已经能表达流程图的意趣了,而且项目COO也是本事出身,和开采人士也轻易沟通。

现阶段以此项目是首先个使用Activiti的,发轫咱们在需要应用研商阶段选用Viso设计流程图,利用泳道流程图统一筹划和客户联系,鲜明后由负责流程的开荒人士用Eclipse
Designer设计赢得bpmn20.xml,最终安顿。

☞设计通用的平底数据来援救区别的作业

二.陆 Eclipse Designer存在的难题

其一插件有3个很讨厌的Bug平素未修复,安装了插件后Eclipse的复制和粘帖连忙键会被转移为(Ctrl+Insert、Shift+Insert);Bug描述请见:

  • Activit
    Forums中报告的Bug

  • Jira的登记

因而最终大家不得不单独开2个安装了Eclipse
Designer的Eclipse专门用来设计流程图,那样就不影响平常使用Eclipse
JAVAEE了。

二.陆 Eclipse Designer存在的难题

本条插件有二个很看不惯的Bug一向未修复,安装了插件后Eclipse的复制和粘帖飞速键会被转变为(Ctrl+Insert、Shift+Insert);Bug描述请见:

  • Activit
    Forums中告知的Bug

  • Jira的登记

为此最后大家只好单独开四个设置了Eclipse
Designer的Eclipse专门用来铺排流程图,那样就不影响健康使用Eclipse
JAVAEE了。

相关文章