2019独角兽企业重金招聘Python工程师标准>>>
整合好的代码在这里
https://gitee.com/glorylion/JFinalOA
Modeler是在线流程编辑器
Diagram Viewer是流程跟踪的插件
最近学习使用Activiti.
网上的还有咖啡兔子的基本都是基于Spring的方法.
网上搜了很多,找了很多之后最后整合进项目当中,发现并没有想象中的复杂.
我们使用的项目是整合了Jfinal 的框架,之前介绍过不使用Spring的方法集成Activiti.
在此基础上本文介绍,不使用Spring MVC的方法集成Modeler和Diagram Viewer
首先明确以下信息一步一步来.
1.Modeler高度依赖于Spring MVC.
2.Modeler的所有Controler都是使用SpringMVC做的映射关系,只需要将此处,全部改为Jfinal的Controller即可
3.Modeler所有的JS请求路径全部为Spring MVC的方式请求的,需要全部改为Jfinal的方式
4.Modeler使用了很多Jar包,需要一点点排错.
1.拷贝前台代码
下图所示为Activiti官网下载的activiti-5.19 里面为activiti需要的jar包explorer的war包
war下有activiti-explorer.war可以放到tomcat中运行.
下图为Activiti-master.可以在github中下载
Activiti-master为源码.
jar包里的所有源码都可以在这里看到.
有疑问的可以将source添加路径指向master这里,按住ctrl+左键点代码进来看源码.
Modeler在explorer2下,所需要拷贝的是这三个.
部分js需要修改.
自己项目中随意建立一个目录,将这三个文件考到项目中.
类似这样
2.拷贝后台需要的类
准备Activiti5.19 ,源码
activiti-diagram-rest-5.19.0.2.jar
和
activiti-modeler-5.19.0.2.jar
解释下
1.rest中主要是这几个类,必须修改的类是ProcessDefinitionDiagramLayoutResource.这个方法传入流程定义ID返回DiagramNode的Json数据
需要重写这些个类的SpringMVC地址
2.Modeler包中的主要是这个类,编辑器保存的时候,会调用这个类的方法,其中SpringMVC的地址需要修改,返回参数的方法需要修改
介绍完这两个JAR包,开始干活,这两个包没用,我们直接要他的源码
将rest和model包的源码全拷贝到项目中
rest包的源码在这个路径下
modeler中的源码在这个路径下
到项目中之后,可以如下,从上到下分别为modeler和rest的类
3.修改后台Controller地址
其中
ModelEditorJsonRestResource.java和ModelSaveRestResource.java
是modeler用的控制器
ProcessInstanceHighlightsResource.java,ProcessInstanceDiagramLayoutResource.java,ProcessDefinitionDiagramLayoutResource.java
是diagram viewer流程跟踪器用的控制器
diagram viewer (流程跟踪)返回的数据必须是jsonp的方式获取的,需要添加callback返回callback方法(此项目使用的是jfinal没有用spring只能手动返回,如果使用spring可以直接在web.xml中配置)
改的比较多,就不一一介绍了,以一个为例
这个改为
package com.****.jbsf.workflow.rest;
import com.fasterxml.jackson.databind.node.ObjectNode;
public class ProcessDefinitionDiagramLayoutResource extends BaseProcessDefinitionDiagramLayoutResource {
public void getDiagram() {
String processDefinitionId = getPara("processDefinitionId");
String callback = getPara("callback").toString();
ObjectNode node = getDiagramNode(null, processDefinitionId);
renderJson(callback+"("+node.toString()+")");
}
}
注意返回的Json格式必须是外面套用callback的方法,JsonP的使用方法请参考
http://my.oschina.net/glorylion/blog/478010
集成的父类BaseProcessDefinitionDiagramLayoutResource需要
public class BaseProcessDefinitionDiagramLayoutResource extends Controller{
其他所有的Controller全部去掉SpringMVC的地址
在Jfinal中注册,代码如下
@Override
public void configRoute(Routes me) {
***************省略其他路由**************
me.add("/jf/process-instance/highlights",ProcessInstanceHighlightsResource.class);//modeler
me.add("/jf/process-instance/diagram-layout",ProcessInstanceDiagramLayoutResource.class);//modeler
me.add("/jf/process-definition/diagram-layout",ProcessDefinitionDiagramLayoutResource.class);//modeler
me.add("/jf/model/save",ModelSaveRestResource.class);
me.add("/jf/editor/stencilset",StencilsetRestResource.class);
me.add("/jf/model/json",ModelEditorJsonRestResource.class);
}
4.前台JS修改请求地址
主要修改的js是app-cfg.js,index.html和url-config.js,
app-cfg.js配置基本的地址
ACTIVITI.CONFIG = {
'contextRoot' : '/项目名/jf',
};
其中index.html中代码,由于jfinal的的路由后面直接是方法名,直接加到最后面就可以
ActivitiRest.options = {
processInstanceHighLightsUrl: baseUrl + "/jf/process-instance/highlights/getHighlighted?processDefinitionId="+processDefinitionId+"&processInstanceId="+processInstanceId,
processDefinitionUrl: baseUrl + "/jf/process-definition/diagram-layout/getDiagram?processDefinitionId="+processDefinitionId+"&processInstanceId="+processInstanceId,
processDefinitionByKeyUrl: baseUrl + "/jf/process-definition/diagram-layout/getDiagram?processDefinitionId="+processDefinitionId+"&processInstanceId="+processInstanceId
};
url-config.js
KISBPM.URL = {
getModel: function(modelId) {
return ACTIVITI.CONFIG.contextRoot + '/model/json/getEditorJson?modelId=' + modelId ;
},
getStencilSet: function() {
return ACTIVITI.CONFIG.contextRoot + '/editor/stencilset/getStencilset?version=' + Date.now();
},
putModel: function(modelId) {
return ACTIVITI.CONFIG.contextRoot + '/model/save/saveModel?modelId='+ modelId;
}
};
5.一些注意的地方和错误,需要的jar包
1.common-lang必须3.3以上,有isempty方法.
2.batik的jar包都需要,我全整进去了
还有很多包,需要一点点整,所有jar包5.19里都有
3.其中保存的时候用到xml-apis-ext-1.3.04.jar,否则会报
Caused by: java.lang.ClassNotFoundException: org.w3c.dom.svg.SVGDocument
这个错误
4.Caused by: java.lang.ClassNotFoundException: math.geom2d.curve.AbstractContinuousCurve2D
少 javaGeom-0.11.1.jar
5.保存到时候,需要传递json-xml参数,不过那个方法是用的put方法请求的,jfinal的话,直接getpara("json-xml")取不到值
我直接把请求改成了post,就可以了.
6.有一个类会取stencilset.json,这个是汉化文件,从源码里考到项目里加载进去就可以了
eg:
http://www.xxxxx.com/processEditor/modeler.html?modelId=1
http://www.xxxxx.com/processEditor/diagram-viewer/index.html?processDefinitionId=1&processInstanceId=2