activiti 5.19整合modeler在线编辑器

心得:想要做一件事,首先得清楚这件事的本质。

最开始学习activiti,我与大家都一样,徘徊在如何与业务系统对接,如何整合modeler实现在线编辑。当我花了1周时间高强度学习后,我发现,一开始想得太多了。

最初阶段,我应该先让activiti跑起来,然后与业务系统对接,弄清楚activiti的各种实现原理后,最后来整合modeler才是最好的方式。因为这个时候你已经明白了modeler与工作流引擎之间的关系,你知道应该怎么做,你的方向在哪里。

这可能就是为什么网上的教程,每一个都是直接从测试类开始,只告诉大家如何进行流程流程,而不是一上来就告诉大家怎么整合与使用modeler的因为吧。

下面,就开始整合modeler,如果过程中有不对的或者有疑问的地方,欢迎指导与探讨。

所以,我的教程也是基于你已经有一个能够运行activiti的项目基础上。

1、什么是modeler

modeler是activiti的一个在线编辑流程插件,通俗的说,它就是一个页面,不过这个页面包含了很多的控制以实现我们的目的。

2、在线编辑原理

很多人一开始可能会被“流程在线编辑”这几个字误导,认为modeler编辑的是流程,其实不然,编辑器编辑的只是一个Model。Model部署后才是流程(procdef),已经部署的流程(procdef)也可以转换为Model,Model与流程(procdef)是分别独立的,删掉Model流程还在,删掉流程Model还在。

3、整合modeler需要的资源

a.样式(官方发布的activiti-explorer.war包中获取):diagram-viewer文件夹、editor-app文件夹

b.页面控件(官方发布的activiti-explorer.war包中获取):stencilset.json

c.modeler.html(官方发布的activiti-explorer.war包中获取)

d.流程定义列表(如果先做项目后整合,那么这个列表应该是已经有的)(如果没有,下载咖啡兔的demo,然后拷贝process-list)建议大家参照着自己写一个页面

e.模型列表(下载咖啡兔的demo,拷贝model-list)建议大家参照着自己写一个页面

f.jar包(下载咖啡兔的demo,参照咖啡兔的jar包,不是所有的都用得上,最好的方式就是先导入基础包,然后运行,运行报错差什么包就加什么包)

4、整合步骤

a.将diagram-viewer文件夹与editor-app文件夹拷贝至项目webapp下,保证项目编译后在根目录

b.将stencilset.json文件拷贝至resources目录下,保证项目编译后在根目录

c.将modeler.html文件拷贝至WEB-INF目录下

d.将process-list文件与model-list文件拷贝至WEB-INF目录指定的页面路劲下

e.导入jar包

f.扫描activiti源生controller(只要controller)


g.编写controller(一个用来操控流程,一个用来操控模型)(操控流程的controller用自己写的,操控模型的controller参考咖啡兔的ModelController)

1)流程controller(代码太多,这里就不贴出来了,参考咖啡兔的ActivitiController,我只列出整合modeler需要用到的方法)

a)获取流程定义列表(用于流程定义列表页面展示所有已经部署的流程定义)

b)流程定义转换Model(用于没有模型的流程转换模型)
2)模型controller(参考咖啡兔的ModelController,其实直接全部拷贝就可以了)

h.扫描自身controller(该controller的作用就是将请求重定向到modeller页面,页面的所有控件会由js自行加载)

i.将modeler.html独立出来,因为spring mvc 一般都是直接过滤的所有路径(在静态资源控制的地方添加)不然访问会报错,提示没有这个方法

5、检验

a.项目启动,跳转到流程定义列表,能够看到所有的流程定义表示成功。

b.点击任意流程定义后面的转换Model控件,后台不抱错并且页面到了模型列表页,有一条数据,表示成功。

d.点击编辑按钮(咖啡兔是直接在页面超链接跳转到modeler.html,我是在模型controller写了一个方法来跳转,实现效果一致),成功打开modeler.html表示成功。

c.模型列表的其他功能自己去挨个实验,这里不多做说明。

6、原理:先要获取到所有的流程定义,然后将流程定义转换为Model(模型),将模型ID传给modeler页面并跳转到modeler页面。modeler页面会自动解析之前所列出的样式资源与控件资源,一旦进行逻辑操作就调用第4.f 步骤扫描的controller。

你可能感兴趣的:(activiti)