zoukankan      html  css  js  c++  java
  • 浅谈Activiti Modeler 的扩展

    • 为什么要扩展
            最近项目打算用activiti工作流中activiti modeler来做模块的可视化订阅,但是原生的activiti任务节点,有一些不符合业务需要,比如
      • 配置项多,属性暴露。比如service task,配置时就要暴露其Java Degelete方法类,这样以后实施人员去配置的时候,第一他每次去配个service task都要去配置,第二他不会知道这个任务要配什么委托类,所以这对职责单一的一个service task来说,比如就需要一个解析xml的任务,那么我除了id ,name,其他都是不需要的,内部封装属性,不暴露出去。
      • 图标单一,一眼看不出任务职责。
      • 子流程内容跟父流程内容在一个面板,流程定制面视觉效果不好,而且固定子流程不能得到复用。
                对以上一些不足,其实对activiti来说,他要考虑的当然是多开放配置,更容易兼容场景,或许有些人会认为这都不是事,做这种扩展没有必要,大题小作。仁者见仁智者见智吧,我认为这种扩展,
                对使用会更便捷,用户友好性也更好,具有一定的业务特色,也不改变原生activiti任务的职能,何乐不为。
     
    • 如何扩展
             首先考虑一下可行性,这种扩展以什么为切入点。扩展任务节点,那就得发现service task这个任务的特性,它不想user task,script task的只能那么单一,它可以指定委托处理类,来达到执行目的。
              因此,在任务定制这方面,完全可以由service task进行属性扩展和封闭。具体扩展细节,如下考虑   
     
      • UI上扩展属性
        • 扩展stencilset.json文件。propertyPackages对象中增加自定义的package(基本类型直接使用,复杂类型需要扩展),另外stenclis对象的节点中增加package引用
        • 针对复杂类型自定义package的扩展。properties.js中增加复杂类型配置(复杂类型的展现及赋值采用angularjs1.2实现)
      •  bpmn中扩展属性
        • 自定义XSD
        • 在extensionElements元素中实现扩展
        • 通过repositoryService获取bpmnModel,进而获取指定元素的扩展
      • 解析UI上的扩展到bpmn 
        • UI的图形及属性信息会解析成JSON,包含自定义扩展
        • 从JSON中提取扩展转换成bpmn中的元素。通过BpmnJsonConverter把Json数据转换为BpmnModel,把Json中的扩展转换成BpmnModel对应元素的extensionElements属性,通过BpmnXmlConverter把BpmnModel转换为bpmn文件 
               那么还有一个难题,就是子流程的独立展示改造,在这方面的可行性分析和设计,是这么思考的。 
          
      • 子流程怎么存储?
        • 把子流程作为独立的模型进行编辑和保存,这样可以使用现有的建模工具及持久化方式
      • 部署时怎么组装子流程?
        • 由于定制化的模型数据不符合标准,需要在部署前转换为标准的bpmn
        • 将子流程的标识用真正的子流程定义替换掉
        • 子流程的标识通过子流程模型ID进行关联
        • 从流程定义查看流程图时,坐标会有问题,子流程替换后,坐标需要调整(难点)
      • 展现设计
        • 在建模的页面中添加子流程的下拉框(所有后代子流程,流程树)
        • 扩展一个子流程标识节点,该节点可以设置关联的子流程
        • 双击子流程标识节点可以进入以该子流程为根的建模页面
      • 后端设计
        • 根据父流程查询所有后代子流程
        • 部署时数据的转换,子流程数据的替换(重点) 
    •  编后语
           在子流程这方面需要考虑的还很多,比如后续的流程跟踪该如何处理,以及上述部署组装bpmn文件的坐标问题等。这要继续看下activiti源码(ps:activiti 源码写的很漂亮,very  good,建议去看,
            然后一起探讨),后续会更新一些现有的实现。
     
  • 相关阅读:
    Begin Example with Override Encoded SOAP XML Serialization
    State Machine Terminology
    How to: Specify an Alternate Element Name for an XML Stream
    How to: Publish Metadata for a WCF Service.(What is the Metadata Exchange Endpoint purpose.)
    Beginning Guide With Controlling XML Serialization Using Attributes(XmlSerializaiton of Array)
    Workflow 4.0 Hosting Extensions
    What can we do in the CacheMetaData Method of Activity
    How and Why to use the System.servicemodel.MessageParameterAttribute in WCF
    How to: Begin Sample with Serialization and Deserialization an Object
    A Test WCF Service without anything of config.
  • 原文地址:https://www.cnblogs.com/fightingcoding/p/6419349.html
Copyright © 2011-2022 走看看