Activiti 工作流引擎 ~ 整合 Activiti Modeler(二)

新建模型

1.新建模型页面和模型保存

官方demo中的新建模型页面如下图所示,需自行实现
这里写图片描述
Activiti Model对应的数据表结构如下
这里写图片描述
由官方demo做的测试数据可知,meta_info_字段保存了模型名称模型版本好模型描述
这里写图片描述

说明:
1.由于仅整合Activiti Modeler,故在新设计的新建模型界面不必提供设计器选择
2.在新设计的新建模型界面新增输入框用于设置key_字段(建议)

官方demo将模型新增的业务逻辑放在了创建按钮的点击事件中
这里写图片描述
在项目中新建名为spring.activiti.modelpackage,并创建名为ModelControllerclass

if (selectEditorComponent.isModelerPreferred()) { //... }

if分支中的代码移到ModelController#createModel()中,调整后的代码如下:

package spring.activiti.Model.web;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Model;
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.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import spring.activiti.Model.pojo.ModelEntity;

import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;

/**
 * Created by liuquan on 2018/4/15.
 */
@Controller
@RequestMapping(value = "/ModelController")
public class ModelController {

    @Autowired
    private RepositoryService repositoryService;

    @Autowired
    private ObjectMapper objectMapper;

    @RequestMapping(value = "/createModel.json", method = {RequestMethod.POST})
    @ResponseBody
    public ObjectNode createModel(ModelEntity modelEntity, HttpServletRequest request) {

        ObjectNode result = objectMapper.createObjectNode();

        try {
            String modelName = modelEntity.getModelName();
            String modelKey = modelEntity.getModelKey();
            String modelDescription = modelEntity.getModelDescription();

            System.out.println(modelName);

            ObjectNode editorNode = objectMapper.createObjectNode();
            editorNode.put("id", "canvas");
            editorNode.put("resourceId", "canvas");
            ObjectNode stencilSetNode = objectMapper.createObjectNode();
            stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");
            editorNode.put("stencilset", stencilSetNode);

            ObjectNode modelObjectNode = objectMapper.createObjectNode();
            modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, modelName);//模型名称
            modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);//模型版本
            modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, modelDescription);

            Model modelData = repositoryService.newModel();
            modelData.setMetaInfo(modelObjectNode.toString());
            modelData.setName(modelName);
            modelData.setKey(modelKey);

            repositoryService.saveModel(modelData);
            repositoryService.addModelEditorSource(modelData.getId(), editorNode.toString().getBytes("utf-8"));

            result.put("modelId", modelData.getId());
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        return result;
    }
}
URL url = new URL(explorerURL.getProtocol(), explorerURL.getHost(), explorerURL.getPort(),
                  explorerURL.getPath().replace("/ui", "") + "modeler.html?modelId=" + modelData.getId());

官方demo中保存完成后直接打开model.html,而我这里是直接返回json对象,此处具体如何操作可根据实际情况进行调整。跳转到modeler.html时需要带上modelId参数

2.单元测试
package spring.activiti.Model.controller;

/**
 * Created by liuquan on 2018/4/19.
 */

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class)
@ContextConfiguration(locations = {"classpath:spring/applicationContext.xml","classpath:activiti-custom-context.xml","classpath:activiti-mvc.xml"})
@WebAppConfiguration
public class TestModelController {
    @Autowired
    private WebApplicationContext webApplicationContext;

    private MockMvc mockMvc;

    @Before
    public void setUp() throws Exception {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }

    @Test
    public void createModel() throws Exception {
        MockHttpServletRequestBuilder mockHttpServletRequestBuilder = MockMvcRequestBuilders.post("/ModelController/createModel.json");
        mockHttpServletRequestBuilder.contentType(MediaType.APPLICATION_FORM_URLENCODED);
        mockHttpServletRequestBuilder.param("modelName", "贷款申请")
                .param("modelKey", "money")
                .param("modelDescription","这是一个关于贷款申请的流程");
        ResultActions resultActions = mockMvc.perform(mockHttpServletRequestBuilder);
        resultActions.andExpect(status().isOk());
//        resultActions.andDo(print());
        String responseStr = resultActions.andReturn().getResponse().getContentAsString();
        System.out.println(responseStr);
    }
}

输出如下:
这里写图片描述
这里写图片描述

新建成功,但出现了中文乱码问题


关于此处出现乱码的原因说明

<!-- 声明数据源 -->
<bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
      p:driverClassName="com.mysql.jdbc.Driver"
      p:url="jdbc:mysql://127.0.0.1/part01?useUnicode=true&amp;characterEncoding=utf-8"
      p:username="root"
      p:password="123456"/>

applicationContext.xml文件中通过如上方式配置数据源,保存数据不会出现中文乱码情况。
但将数据库配置信息迁移到db.properties文件中后,保存数据出现中文乱码,文件内容如下

db=mysql
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1/part01?useUnicode=true&amp;characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

&amp;改回&后,乱码问题解决
这里写图片描述

猜你喜欢

转载自blog.csdn.net/quan20111992/article/details/80011307