jeecg 3.4.3 + activiti 5.18.0activiti 流程設(shè)計(jì)器 示例 源碼 https://download.csdn.net/download/anysun7/10354206 項(xiàng)目pom文件添加activiti依賴:<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-engine</artifactId> <version>${activiti.version}</version> </dependency>
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring</artifactId> <version>${activiti.version}</version> <exclusions> <exclusion> <artifactId>commons-dbcp</artifactId> <groupId>commons-dbcp</groupId> </exclusion> </exclusions> </dependency>
<dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency>
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.5</version> </dependency>
<!--<dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1</version> </dependency>-->
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-bpmn-model</artifactId> <version>${activiti.version}</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-bpmn-converter</artifactId> <version>${activiti.version}</version> </dependency>
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-bpmn-layout</artifactId> <version>${activiti.version}</version> </dependency>
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-common-rest</artifactId> <version>${activiti.version}</version> </dependency>
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-crystalball</artifactId> <version>${activiti.version}</version> </dependency>
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-diagram-rest</artifactId> <version>${activiti.version}</version> </dependency>
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-explorer</artifactId> <version>${activiti.version}</version> </dependency>
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-image-generator</artifactId> <version>${activiti.version}</version> </dependency>
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-json-converter</artifactId> <version>${activiti.version}</version> </dependency>
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-modeler</artifactId> <version>${activiti.version}</version> </dependency>
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-simple-workflow</artifactId> <version>${activiti.version}</version> </dependency>
<dependency> <groupId>org.vaadin.addons</groupId> <artifactId>dcharts-widget</artifactId> <version>0.10.0</version> </dependency>
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-process-validation</artifactId> <version>${activiti.version}</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>xmlgraphics-commons</artifactId> <version>1.2</version> </dependency>
<dependency> <groupId>com.vaadin</groupId> <artifactId>vaadin</artifactId> <version>6.8.8</version> </dependency>
<dependency> <groupId>org.imgscalr</groupId> <artifactId>imgscalr-lib</artifactId> <version>4.2</version> </dependency>
<dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-servlet_3.0_spec</artifactId> <version>1.0</version> <scope>provided</scope> </dependency>
<!--<dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency>-->
<dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.1</version> </dependency>
<!--Batik的包主要是用來解析html中的svg的內(nèi)容--> <dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-transcoder</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-dom</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-bridge</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-css</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-anim</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-codec</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-ext</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-gvt</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-script</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-js</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-parser</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-svg-dom</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-svggen</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-util</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-xml</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-js</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>xml-apis</groupId> <artifactId>xml-apis-ext</artifactId> <version>1.3.04</version> </dependency>
<dependency> <groupId>xml-apis</groupId> <artifactId>xml-apis</artifactId> <version>1.3.04</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>xmlgraphics-commons</artifactId> <version>1.2</version> </dependency>
<dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-awt-util</artifactId> <version>1.7</version> </dependency>
配置spring-activiti.xml文件src/main/resources目錄下新建spring-activiti.xml文件,向其中加入以下內(nèi)容 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www./schema/beans" xmlns:xsi="http://www./2001/XMLSchema-instance" xsi:schemaLocation="http://www./schema/beans http://www./schema/beans/spring-beans.xsd"> <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <property name="dataSource" ref="dataSource" /> <property name="transactionManager" ref="transactionManager" /> <property name="databaseSchemaUpdate" value="true" /> <property name="jobExecutorActivate" value="false" /> </bean> <bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"/> <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"> <property name="processEngineConfiguration" ref="processEngineConfiguration" /> </bean> <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" /> <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" /> <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" /> <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" /> <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" /> <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" /> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> </beans>
在web.xml文件,修改context-param,添加了classpath:spring-activiti.xml
復(fù)制設(shè)計(jì)器文件下載activiti-webapp-explorer2的源代碼, 1. 將activiti-explorer工程中的diagram-viewer,editor-app和modeler.html復(fù)制到工程的src/main/webapp目錄下 2. 將activiti-explorer工程中WEB-INF/classes文件夾下的stencilset.json,ui.properties,ui.properties.alfresco復(fù)制到工程的src/main/resources目錄下 3.modules/目錄中找到org\activiti\rest\diagram和org\activiti\rest\editor這兩個(gè)包,將他們整個(gè)復(fù)制到工程的src/main/java目錄下 4.修改spring-mvc.xml文件,在其中加入以下內(nèi)容,使spring在掃描controller類的時(shí)候,也掃描這些包里面的類 5.向工程的web.xml文件中添加以下內(nèi)容,讓spring也管理起來帶/service/的鏈接 <!-- activiti --> <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>/service/*</url-pattern> </servlet-mapping>
6.打開editor-app/app-cfg.js, 將其中的“activiti-explorer”修改為“jeecg”。當(dāng)然,具體項(xiàng)目中這里可能會(huì)經(jīng)常變化,我們可以寫一個(gè)js函數(shù)來自動(dòng)獲取工程的名字,這樣以后將設(shè)計(jì)器集成到其他工程的時(shí)候,就不需要修改這里的內(nèi)容了
7.工程的src\main\java\org\activiti\rest\editor目錄下新建一個(gè)java文件,命名為ModuleController package org.activiti.rest.editor;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import org.activiti.editor.constants.ModelDataJsonConstants; import org.activiti.engine.RepositoryService; import org.activiti.engine.repository.Model; import org.apache.commons.lang3.StringUtils; import org.jeecgframework.core.common.controller.BaseController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode;
@Controller @RequestMapping("/model") public class ModuleController extends BaseController{ private Logger logger = LoggerFactory.getLogger(ModuleController.class); @Autowired private RepositoryService repositoryService; @RequestMapping(params = "create") public void create(HttpServletRequest request, HttpServletResponse response) { try { String name = "test"; String key = "test"; String description = "testModel";
ObjectMapper objectMapper = new ObjectMapper(); ObjectNode editorNode = objectMapper.createObjectNode(); editorNode.put("id", "canvas"); editorNode.put("resourceId", "canvas"); ObjectNode stencilSetNode = objectMapper.createObjectNode(); stencilSetNode.put("namespace", "http:///stencilset/bpmn2.0#"); editorNode.put("stencilset", stencilSetNode); Model modelData = repositoryService.newModel();
ObjectNode modelObjectNode = objectMapper.createObjectNode(); modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, name); modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1); description = StringUtils.defaultString(description); modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description); modelData.setMetaInfo(modelObjectNode.toString()); modelData.setName(name); modelData.setKey(StringUtils.defaultString(key));
repositoryService.saveModel(modelData); repositoryService.addModelEditorSource(modelData.getId(), editorNode.toString().getBytes("utf-8"));
response.sendRedirect(request.getContextPath() + "/modeler.html?modelId=" + modelData.getId()); } catch (Exception e) { logger.error("創(chuàng)建模型失敗:", e); } } }
8. 訪問:http://localhost:8080/jeecg/model.do?create
注:新版(3.7.2)jeecg中response的處理,添加了org.jeecgframework.core.aop.Wrapper,導(dǎo)致json數(shù)據(jù)返回解析出錯(cuò)。整合時(shí),需處理。 Jeecg修改pom內(nèi)容 Maven版本改為 5.18.0 添加: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.2.3</version> </dependency> Springmvc添加 (rest請(qǐng)求數(shù)據(jù) /jeecg/service/model/5001/json) <mvc:annotation-driven /> 中途bug:TypeError: Cannot read property 'split' of undefined at Object.ORYX.Core.StencilSet.stencilSet (oryx.debug.js:8647)at oryx.debug.js:8625 at prototype-1.5.1.js:446 at Array._each (prototype-1.5.1.js:672) at Array.each (prototype-1.5.1.js:445) at Object.ORYX.Core.StencilSet.stencilSets (oryx.debug.js:8624) at classDef.getStencilSets (oryx.debug.js:11715) at classDef._createCanvas (oryx.debug.js:11201) at classDef.construct (oryx.debug.js:10930) at new classDef (oryx.debug.js:1747) 解決思路:遇到該錯(cuò)誤,主要原因是后臺(tái)返回json數(shù)據(jù)時(shí),格式存在問題,請(qǐng)查看response中最終返回到頁面之前的數(shù)據(jù)。查看是否是框架對(duì)數(shù)據(jù)做了處理,尋找相應(yīng)解決方法。 另轉(zhuǎn):activiti-modeler 工作流設(shè)計(jì)器代碼分析 |
|
|