整合activiti-modeler流程编辑器时遇到的问题

Source

1、根据网上流程,复制model下的文件到项目中时注入ObjectMapper报红

在这里插入图片描述
解决方法:
在spring-activiti.xml配置文件中注入objectMapper的bean

    <!-- objectMapper注册为bean 供activiti使用 -->
    <bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"/>

2、如何跳转到编辑页面

1)首先在spring-mvc.xml中配置activiti-editor的资源文件

<mvc:resources location="/activiti-editor/" mapping="/activiti-editor/**" />

2)直接访问资源文件activiti-editor/modeler.html?model=xxx
xxx为model的id(如果想要正常访问流程编辑页面,需要先创建一个model)
下面贴一段创建model的代码,创建成功后会在act_re_model表中创建一条记录

    @RequestMapping("/createModel")
    @ResponseBody
    public String createModel() throws UnsupportedEncodingException {
        ObjectMapper objectMapper = new ObjectMapper();
        ObjectNode editorNode = objectMapper.createObjectNode();
        editorNode.put("id", "canvs");
        editorNode.put("resourceId", "canvs");
        ObjectNode stencilSetNode = objectMapper.createObjectNode();
        stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");		//命名空间(禁止修改)
        stencilSetNode.put("author", "");											//流程节点作者
        editorNode.set("stencilset", stencilSetNode);
        ObjectNode propertiesNode = objectMapper.createObjectNode();
        propertiesNode.put("process_id",1);		 						//流程唯一标识
        propertiesNode.put("process_author",2);						//流程作者
        propertiesNode.put("name",3);	 			 							//流程名称
        editorNode.set("properties", propertiesNode);
        ObjectNode modelObjectNode = objectMapper.createObjectNode();
        modelObjectNode.put("name", 4);					//模型名称
        modelObjectNode.put("revision", 1);						//模型版本
        modelObjectNode.put("description", 5);		//模型描述
        org.activiti.engine.repository.Model modelData = repositoryService.newModel();
        modelData.setCategory("setCategory");						//模型分类
        modelData.setDeploymentId(null);
        modelData.setKey(null);
        modelData.setMetaInfo(modelObjectNode.toString());
        modelData.setName("setName");							//模型名称
        modelData.setTenantId("setTenantId");
        modelData.setVersion(1);
        repositoryService.saveModel(modelData);					//保存模型,存储数据到表:act_re_model 流程设计模型部署表
        repositoryService.addModelEditorSource(modelData.getId(), editorNode.toString().getBytes("utf-8"));//保存资源,存储数据到表:act_ge_bytearray 二进制数据表
        return modelData.getId();
    }

3、访问activitieditor中的controller报404、406

404:没有访问到controller
1)检查路径
2)路径如果没错的话,可能是配置了访问前缀、后缀的关系
解决方法:
1、在activiti-editor文件夹中打开app-cfg.js

ACTIVITI.CONFIG = {
	'contextRoot' : '/web/act',//前缀 (默认是没有的,需要自己适配路径)
	"suffix":".action"//加入这条后缀
};

2、打开url-config.js 在每一条路径后面加上ACTIVITI.CONFIG.suffix后缀

KISBPM.URL = {
    getModel: function(modelId) {
        return ACTIVITI.CONFIG.contextRoot + '/model/' + modelId + '/json' + ACTIVITI.CONFIG.suffix;
    },
    getStencilSet: function() {
        return ACTIVITI.CONFIG.contextRoot + '/editor/stencilset' + ACTIVITI.CONFIG.suffix + '?version=' + Date.now();
    },
    putModel: function(modelId) {
        return ACTIVITI.CONFIG.contextRoot + '/model/' + modelId + '/save' +ACTIVITI.CONFIG.suffix;
    }
};

406:说明已经访问到了controller,但是无法正确接收返回值
如果配置了访问后缀为*.html可能会出现这个问题

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

解决方法:
1)更改后缀为*.action、*.do或者直接取消后缀
2)再配置一个<url-pattern>/act/*</url-pattern> 去匹配访问路径(这个我还没试成功过,不确定是哪里的问题)
2)再配置一个<url-pattern>/</url-pattern> 不过这个配置会覆盖访问后缀

4、其他访问正常,但是访问stencilset路径出现404

在这里插入图片描述
一般这个问题都是配置了访问后缀的时候出现的,可以看到这条url里面没有访问后缀。但是之前我们配置过了。
解决方法:
打开oryx.debug.js 8190行

new Ajax.Request(ACTIVITI.CONFIG.contextRoot + '/editor/stencilset?version=' + Date.now(), {
	            asynchronous: false,
	            method: 'get',
	            onSuccess: this._init.bind(this),
	            onFailure: this._cancelInit.bind(this)
	        });

可以看到这里的代码自己又拼接了一条url(这应该是个小bug)
把这里的ACTIVITI.CONFIG.contextRoot + '/editor/stencilset?version=' + Date.now()替换成KISBPM.URL.getStencilSet()即可(也就是我们刚刚配置好后缀的url)

发布了7 篇原创文章 · 获赞 2 · 访问量 189