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)