整合好的代码在这里javascript
https://gitee.com/glorylion/JFinalOAhtml
Modeler是在线流程编辑器java
Diagram Viewer是流程跟踪的插件node
最近学习使用Activiti.git
网上的还有咖啡兔子的基本都是基于Spring的方法.github
网上搜了不少,找了不少以后最后整合进项目当中,发现并无想象中的复杂.web
咱们使用的项目是整合了Jfinal 的框架,以前介绍过不使用Spring的方法集成Activiti.spring
在此基础上本文介绍,不使用Spring MVC的方法集成Modeler和Diagram Viewerjson
首先明确如下信息一步一步来.api
1.Modeler高度依赖于Spring MVC.
2.Modeler的全部Controler都是使用SpringMVC作的映射关系,只须要将此处,所有改成Jfinal的Controller便可
3.Modeler全部的JS请求路径所有为Spring MVC的方式请求的,须要所有改成Jfinal的方式
4.Modeler使用了不少Jar包,须要一点点排错.
下图所示为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须要修改.
本身项目中随意创建一个目录,将这三个文件考到项目中.
相似这样
准备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的类
其中
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); }
主要修改的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; } };
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