Activiti工作流引擎使用

原标题:基于职业流的阳台管理连串规划

Activiti职业流引擎使用

图片 1

1.轻便介职业流引擎与Activiti

对此职业流引擎的分解请参见百度完善:干活流引擎

1.简单介工作流引擎与Activiti

对于职业流引擎的表达请参见百度百科:职业流引擎

对此互连网经济平台来讲,首要的事情越发是事关资金业务有关操作时都有供给有相关的审查批准流程.同不常间在流水生产线的漂泊进度中须要和一一业务系统举行互动,完毕真正的作业处理,
并记录那些进度中全数人的操作以及每一步操作时所波及数额快速照相,以便于内外界审计和难题的追溯.

1.1 作者与工作流引擎

在首先家商铺专门的学业的时候根本职分就是开采OA系统,当然基本都是有专门的学问流的支撑,不过当下使用的干活流引擎是信用合作社部分牛人开垦的(据说是用叁个开源的引擎修改的),名为CoreFlow;功用相对Activiti来讲相比较弱,可是能知足普通的运用,当然也会有比较多的主题材料由此后来大家只可以修改引擎的代码打补丁。

近来是本身工作的第二家商铺,因为要开荒ERP、OA等体系供给采用职业流,在品种应用研商阶段本人先物色资料选用选择哪个开源行事流引擎,最后明显了Activiti5并基于厂商的架构做了一些DEMO。

1.1 笔者与办事流引擎

在率先家商城办事的时候根本任务正是开采OA系统,当然基本都以有职业流的支撑,不过当下选择的劳作流引擎是信用合作社部分牛人开拓的(据悉是用一个开源的引擎修改的),名称为CoreFlow;作用相对Activiti来说比较弱,不过能满意平日的应用,当然也会有不菲的难题因而后来我们只能修改引擎的代码打补丁。

当今是自身专业的第二家集团,因为要开采ERP、OA等种类须要运用专业流,在品种科学研商阶段本身先物色资料选取接纳哪个开源工作流引擎,最终鲜明了Activiti5并基于厂商的架构做了有个别DEMO。

◆✦上面为三个独立的业务流程✦◆

1.2 Activiti与JBPM5?

对此Activiti、jBPM4、jBPM5我们理应什么选取,在InfoQ上有一篇作品写的很好,从大的层面前遭遇比种种引擎之间的差距,请参见作品:纵观jBPM:从jBPM3到jBPM5以及Activiti5

1.2 Activiti与JBPM5?

对于Activiti、jBPM4、jBPM5咱们应该怎么着抉择,在InfoQ上有一篇文章写的很好,从大的范围比较各样引擎之间的距离,请参谋小说:纵观jBPM:从jBPM3到jBPM5以及Activiti5

(注: 为了注明方便, 已经简化和修改相关手续, 和点融实际操作不相同等)

1.3 Activiti资料

  • 官网:

  • 下载:

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

  • Eclipse Plugin: 

  • Activit中文群:5435716

1.3 Activiti资料

  • 官网:

  • 下载:

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

  • Eclipse Plugin: 

  • Activit中文群:236540304

图片 2

2.第一使用碰着标题搜聚

因为Activiti刚刚退出不久所以资料相比较空缺,中文资料越来越少的可怜,所以开首的时候二头雾水(就算事先用过职业流,不过以为距离相当多),何况官方的手册还不是很完美;所以自身把本人在学习运用的进程境遇的有些问号都位列出来分享给大家;以下几点是自身遇上和想到的,就算您还会有何样疑点能够在谈空说有仲春自己交换再补充。

2.首先使用碰到难题访谈

因为Activiti刚刚退出不久所以资料比较空缺,普通话资料更少的可怜,所以开端的时候贰头雾水(即使事先用过专门的学问流,然则感到距离相当多),並且官方的手册还不是很周密;所以自个儿把自个儿在学习运用的历程境遇的一些疑问都位列出来共享给我们;以下几点是自家境遇和想到的,假诺您还大概有啥样疑难能够在七嘴八舌中和笔者沟通再补偿。

一. 借款人银行卡音讯修改

2.1 布署流程图后汉语乱码

乱码是一贯缠绕着国人的标题,此前种种技能、工具出现乱码的主题素材写过无数文章,这里也不例外……,Activiti的乱码难题在流程图中。

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

图片 3

消除办法有二种:

2.1 计划流程图后中文乱码

乱码是一贯缠绕着国人的主题素材,以前各种手艺、工具出现乱码的标题写过不菲篇章,这里也不例外……,Activiti的乱码难点在流程图中。

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

图片 4

消除办法有二种:

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

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

2.1.1 修改源代码格局

修改源码

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>

❶ 客商联系顾客服务职员,提交报名, 包涵借款消息, 手持居民身份牌照片,
信用卡音讯等

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 使用压缩包方式配置

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.1 使用工具打包Bar文件

在“Package Explorer”视图中右键项目名称然后点击“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.1.2.2 使用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

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

倡议流程的第一缘由是客户期望根据公约举办提前还款. 流程关键步骤为:

2.2.1 引擎提供的Form

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

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

可是这种艺术唯有适用于比较轻巧的流水线,对于有个别复杂只怕页面必要工作逻辑的论断的情状就不适用了。

对此数据的保留都以在发动机的表中,不方便人民群众和其余表的涉嫌、对整个类别的设计也可能有损!

2.2.1 引擎提供的Form

概念表单的艺术在种种Task标签中定义extensionElementsactiviti:formProperty就能够,抵达那一个节点的时候能够因此API读取表单成分。

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

可是这种格局唯有适用于相比轻便的流程,对于某些复杂也许页面需求职业逻辑的判断的情事就不适用了。

对于数据的保留都以在斯特林发动机的表中,不便利和另外表的涉及、对全部系统的规划也不利于!

❶ 借款人联系客服职员, 提交申请

2.2.2 自定义业务Form

这种方法应该是大家用的最多的了,因为平常的事体体系业务逻辑都会相比较复杂,并且数据库中过多表都会有依据关系,表单中有众多气象判别。

比方大家的连串适用jQuery
UI作为UI,有成都百货上千javascript代码,页面包车型地铁大队人马操作供给特别管理(比方:几个挑选的排挤、每种节点依照项目和操作人展现不一样的开关);基本每一个集团都有一套本人的UI风格,要保持多少个系统的操作习贯一致只好利用自定义表单本领满足。

2.2.2 自定义业务Form

这种艺术应该是豪门用的最多的了,因为相似的职业系统专门的学业逻辑都会相比较复杂,并且数据库新疆中国广播集团大表都会有依据关系,表单中有多数状态决断。

例如大家的系统适用jQuery
UI作为UI,有多数javascript代码,页面包车型地铁浩大操作供给新鲜管理(举个例子:三个选项的排外、每一个节点遵照项目和操作人显示不相同的按键);基本每一种商家都有一套自个儿的UI风格,要保险多个连串的操作习贯一致只好选用自定义表单技艺满足。

❷ 运维生成提前还款表达书, 其饱含详细金额多少

2.3 业务和流程的涉及方式

以此难点在群里面很几个人都问过,那也是自个儿刚刚伊始吸引的地方;

后来看了以下API开掘RuntimeService有多个点子:

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.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.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.3.3 怎样挑选

提议采纳startProcessInstanceByKey,特殊境况需求利用过去的本子选用采用startProcessInstanceById

在平台的实在运行中, 有五光十色的专门的学问须要处理, 包含借款人, 出借人,
资金等等, 同一时间还关乎到各类不相同的业务部门,
况且流程的萍踪浪迹操作职员和部门也趁机公司工作的上进而分裂的调度.
设计二个基础的流程框架和促成基础代码, 造成轻便的付出格局是该种类的最主要.
因此全数系列的筹算涉及到以下注重多少个方面:

2.4 同步顾客数量

本条难题也是非常多的人询问过,Activiti扶助对职责分配到:钦定人、钦命组、两个结合,而这几个人和组的音讯都保存在ACT_ID..表中,有投机的顾客和组(剧中人物)管理让众几人慌恐慌张了;原因是因为各种系统都会设有贰个权力管理模块(维护:用户、部门、剧中人物、授权),不精晓该怎么和Activiti同步。

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

2.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维护,确定要显明一方,然后CRUD的时候一齐到对方,假使必要共同三个子系统那么能够再调用WebService完成。

对于三个周围涉及到审查批准以及实行实际专门的工作的种类, 基于简单的情事控制的设计,
大概电动开采类职业流引擎轮子的做法都以不合适.
所以四个开源并且被相近运用的劳作流引擎是多个没有错並且必需的选拔. Activiti
职业流引擎由于其轻量级, 易用性等优点近期在产业界被普遍使用.
其专门的学问流的状态机和外界系统的接二连三只需求经过三个ID进行关联就可以,
即activiti的business key. (如下图)

2.5 流程图设计工具用什么

Activiti提供了多个流程设计工具,然而面向对象差别。

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

  • Eclipse
    Designer,面向开采职员,Eclipse的插件,可以让开拓人士定制每一个节点的品质(ID、Name、Listener、Attr等)

2.5 流程图设计工具用如何

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

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

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

图片 5

2.5.1 我们的措施

可能你会欣喜,因为我们未有采纳Activiti
Modeler,大家认为用Viso已经能表明流程图的情致了,而且项目老板也是手艺出身,和开拓职员也轻便沟通。

当前以此项目是第三个利用Activiti的,开端大家在须求科研阶段选用Viso设计流程图,利用泳道流程图设计和客商联系,鲜明后由肩负流程的开辟人士用Eclipse
Designer设计赢得bpmn20.xml,最终安排。

2.5.1 大家的秘籍

只怕您会奇异,因为大家从没采取Activiti
Modeler,大家感觉用Viso已经能发挥流程图的意趣了,并且项目COO也是本领出身,和开垦人员也轻易调换。

当下以此类型是率先个利用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了。

2.6 Eclipse Designer存在的标题

以此插件有二个很反感的Bug一贯未修复,安装了插件后Eclipse的复制和粘帖急速键会被更改为(Ctrl+Insert、Shift+Insert);Bug描述请见:

  • Activit
    Forums中告诉的Bug

  • Jira的登记

因此最终我们只可以单独开三个装置了Eclipse
Designer的Eclipse特地用来设计流程图,那样就不影响符合规律使用Eclipse
JAVAEE了。

发表评论

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