Activiti集成Modeler(使用Jfinal)(不用SpringMvc,不用Spring)

整合好的代碼在這裏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包,須要一點點排錯.

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.javaModelSaveRestResource.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

相關文章
相關標籤/搜索