天天看點

兩篇整合Activiti Modeler到業務系統

1. 無法進入editor. 

那麼,在調用這個之前,如何插入一條記錄到這個表麼? 

待解決........ 

------------- 

看到咖啡兔的例子,是先使用java儲存到資料庫,然後再打開editor, 儲存的代碼: 

javascript: 一邊儲存,一邊打開,同時儲存後的頁面又做reload, 很特别很有趣的做法,值得學習.... 

$(function() {  

        $('#create').button({  

            icons: {  

                primary: 'ui-icon-plus'

            }  

        }).click(function() {  

            $('#createModelTemplate').dialog({  

                modal: true,  

                width: 500,  

                buttons: [{  

                    text: '建立',  

                    click: function() {  

if (!$('#name').val()) {  

                            alert('請填寫名稱!');  

                            $('#name').focus();  

return;  

                        }  

                        setTimeout(function() {  

                            location.reload();  

                        }, 1000);  

                        $('#modelForm').submit();  

                    }  

                }]  

            });  

        });  

    });  

@RequestMapping(value = "create", method = RequestMethod.POST)  

publicvoid create(@RequestParam("name") String name, @RequestParam("key") String key, @RequestParam("description") String description,  

          HttpServletRequest request, HttpServletResponse response) {  

try {  

      ObjectMapper objectMapper = new ObjectMapper();  

      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);  

      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() + "/service/editor?id=" + modelData.getId());  

    } catch (Exception e) {  

      logger.error("建立模型失敗:", e);  

    }  

  }  

2. web editor儲存的bpmn20檔案到哪裡去了? 

     會更新ACT_RE_MODEL和ACT_GE_BYTEARRAY表,ACT_GE_BYTEARRAY表儲存了圖檔和xml檔案資訊( 其實是json格式的字元串),并關聯到ACT_RE_MODEL表。 

     ACT_RE_MODEL 

       說明:流程設計器設計流程後,儲存資料到該表。 

                EDITOR_SOURCE_VALUE_ID(流程檔案放在ACT_GE_BYTEARRAY中的ID); 

                EDITOR_SOURCE_EXTRA_VALUE_ID(流程檔案圖像放在ACT_GE_BYTEARRAY中的ID)。 

3. 如何去部署儲存在資料庫裡面的ACT_RE_MODEL表裡面的工作流? 

    咖啡兔的源碼: 建立,部署,删除,導出,周遊 

package me.kafeitu.demo.activiti.web.workflow;  

import java.io.ByteArrayInputStream;  

import java.util.List;  

import javax.servlet.http.HttpServletRequest;  

import javax.servlet.http.HttpServletResponse;  

import org.activiti.bpmn.converter.BpmnXMLConverter;  

import org.activiti.bpmn.model.BpmnModel;  

import org.activiti.editor.constants.ModelDataJsonConstants;  

import org.activiti.editor.language.json.converter.BpmnJsonConverter;  

import org.activiti.engine.RepositoryService;  

import org.activiti.engine.repository.Deployment;  

import org.activiti.engine.repository.Model;  

import org.apache.commons.io.IOUtils;  

import org.apache.commons.lang3.StringUtils;  

import org.codehaus.jackson.JsonNode;  

import org.codehaus.jackson.map.ObjectMapper;  

import org.codehaus.jackson.node.ObjectNode;  

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.PathVariable;  

import org.springframework.web.bind.annotation.RequestMapping;  

import org.springframework.web.bind.annotation.RequestMethod;  

import org.springframework.web.bind.annotation.RequestParam;  

import org.springframework.web.servlet.ModelAndView;  

import org.springframework.web.servlet.mvc.support.RedirectAttributes;  

/**

 * 流程模型控制器

 * 

 * @author henryyan

 */

@Controller

@RequestMapping(value = "/workflow/model")  

publicclass ModelController {  

protected Logger logger = LoggerFactory.getLogger(getClass());  

@Autowired

  RepositoryService repositoryService;  

   * 模型清單

   */

@RequestMapping(value = "list")  

public ModelAndView modelList() {  

    ModelAndView mav = new ModelAndView("workflow/model-list");  

    List  list = repositoryService.createModelQuery().list();  

    mav.addObject("list", list);  

return mav;  

   * 建立模型

   * 根據Model部署流程

@RequestMapping(value = "deploy/{modelId}")  

public String deploy(@PathVariable("modelId") String modelId, RedirectAttributes redirectAttributes) {  

      Model modelData = repositoryService.getModel(modelId);  

      ObjectNode modelNode = (ObjectNode) new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelData.getId()));  

byte[] bpmnBytes = null;  

      BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);  

      bpmnBytes = new BpmnXMLConverter().convertToXML(model);  

      String processName = modelData.getName() + ".bpmn20.xml";  

      Deployment deployment = repositoryService.createDeployment().name(modelData.getName()).addString(processName, new String(bpmnBytes)).deploy();  

      redirectAttributes.addFlashAttribute("message", "部署成功,部署ID=" + deployment.getId());  

      logger.error("根據模型部署流程失敗:modelId={}", modelId, e);  

return"redirect:/workflow/model/list";  

   * 導出model的xml檔案

@RequestMapping(value = "export/{modelId}")  

publicvoid export(@PathVariable("modelId") String modelId, HttpServletResponse response) {  

      BpmnJsonConverter jsonConverter = new BpmnJsonConverter();  

      JsonNode editorNode = new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelData.getId()));  

      BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editorNode);  

      BpmnXMLConverter xmlConverter = new BpmnXMLConverter();  

byte[] bpmnBytes = xmlConverter.convertToXML(bpmnModel);  

      ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes);  

      IOUtils.copy(in, response.getOutputStream());  

      String filename = bpmnModel.getMainProcess().getId() + ".bpmn20.xml";  

      response.setHeader("Content-Disposition", "attachment; filename=" + filename);  

      response.flushBuffer();  

      logger.error("導出model的xml檔案失敗:modelId={}", modelId, e);  

@RequestMapping(value = "delete/{modelId}")  

public String delete(@PathVariable("modelId") String modelId) {  

     repositoryService.deleteModel(modelId);  

}  

本文轉自二郎三郎部落格園部落格,原文連結:http://www.cnblogs.com/haore147/p/7162003.html,如需轉載請自行聯系原作者