整合好的代碼在這裏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