`
lynnlysh
  • 浏览: 179292 次
  • 性别: Icon_minigender_2
  • 来自: 天津
社区版块
存档分类
最新评论

camunda对BPMN流程定义解析、执行、展现的JS库

    博客分类:
  • BPMN
阅读更多
1 写在前面
本文介绍了camunda 对BPMN流程定义文件的解析实现。
该类库的JS框架采用的dojo
(了解下dojo与jquery的区别:http://blog.csdn.net/dojotoolkit/article/details/7682978)
这个类库有四个文件
Bpmn.js提供相应功能的接口。
三个组件:Executor.js——轻量级流程引擎
  Renderer.js——通过dojo展现渲染流程图的组件
  Transformer.js——解析流程图的组件
最坑爹的是camunda首页的流程模拟是用jquery框架和Raphael图形处理库,因此确定,除了Renderer组件,其他组件都能复用。
camunda首页还采用了bootstrap框架,并且自己拓展了相关组件,值得借鉴。
2 结构
src
-bpmn
-Bpmn.js
-Executor.js
-Renderer.js
-Transforme.js
test
-bpmn
-engine
-lib
-renderer
-resources
-transformer
-util
-runner.html
3 各类接口
3.1 bpmn.js
renderUrl(url, options)通过url解析流程图
render(bpmnXml, options)通过字符串解析流程图
zoom(factor)放大缩小
annotate(id, innerHTML, classesArray)注释
clear()清除
例子:
new Bpmn().renderUrl("test/resources/task_loop.bpmn", {  
              diagramElement : "diagram",  
              overlayHtml : '<div style="position: relative; top:100%"></div>'  
          }).then(function (bpmn){  
              bpmn.zoom(0.8);  
              bpmn.annotate("reviewInvoice", '<span class="bluebox"  style="position: relative; top:100%">New Text</span>', ["highlight"]);  
              //bpmn.clear();  
          });  

3.2 Executor.js
CAM轻量级流程引擎核心
在这里定义了监听事件和公共方法,并注册了各种类型元素的执行行为。

接口
  • ActivityExecution活动执行类
  • ActivityExecution(activityDef,parentExecution) 构造函数
  • activityDef:流程定义
    parentExecution:父执行
  • bindVariableScope(scope) 绑定变量
  • scope:绑定变量到父执行
  • executeActivities(activities) 执行多活动
  • activities:活动的数组
  • executeActivity(activity, sequenceFlow) 执行活动
  • activity:当前活动
    sequenceFlow:活动相关的顺序流
  • invokeListeners (type, sequenceFlow) 调用监听
  • type:监听类型
    sequenceFlow :监听类型绑定到顺序流
  • getActivityInstance() 获得流程实例

以下是控制流程执行
  • start 开始流程活动
  • 记录开始时间,注册开始监听
  • continue 执行活动
  • end 结束流程活动
  • 记录结束时间,注册结束监听
  • takeAll 执行所有sequenceFlows连接的活动
  • take 执行sequenceFlow连接的活动
  • 注册TAKE监听
  • signal 标记活动
  • 如果活动定义了标记方法就执行,否则结束活动

  • ActivityInstance活动实例类(是私有类,有以下属性)
  • activityId 活动id
  • isEnded 是否结束
  • startDate 开始时间
  • endDate 结束时间
  • activities 未结束的活动们

异步调用
异步活动通过调用signal来控制执行
BPMN2.0中规定的活动元素应有的执行,通过注册活动类型来实现



抛出异常



3.3 Renderer.js
渲染器中内置了各个BPMN元素的render方法集放在Map中,并根据元素类型调用它们各自的render方法,用dojo的dom-construct生成dom节点。
3.4 Transformer.js
解析流程图的xml文件,返回含有元素集合的数组。
例子:
var processDefinition = new Transformer().transform(bpmn.bpmnXml)[0];
下面是processDefinition对象的样子:


其中的一个baseElement

4 实例
4.1 流程执行
var docXml = '<?xml version……'</definitions>';   
    var processDefinition = new Transformer().transform(docXml)[0];  
    var execution = new CAM.ActivityExecution(processDefinition);      
    execution.variables.input = 10;  
    execution.start();   
    //活动没结束  
    expect(execution.isEnded).toBe(false);  
  
    var processInstance = execution.getActivityInstance();   
    //expect(XXX).toBe(XXX2);是判断XXX是否等于XXX2的意思  
    //以下说明执行完的活动数量  
    expect(processInstance.activities.length).toBe(2);  
    expect(processInstance.activities[0].activityId).toBe("theStart");  
    expect(processInstance.activities[1].activityId).toBe("userTask");      
    // 为userTask发送一个信号  
    execution.activityExecutions[1].signal();    
    execution.activityExecutions[2].signal();    
    // 现在流程结束了  
    expect(execution.isEnded).toBe(true);  
     //以下说明流程实例的执行情况
    processInstance = execution.getActivityInstance();   
    expect(processInstance.activities.length).toBe(4);  
    expect(processInstance.activities[0].activityId).toBe("theStart");  
    expect(processInstance.activities[1].activityId).toBe("userTask");      
    expect(processInstance.activities[3].activityId).toBe("theEnd");
 
解释:
execution定义了一个流程的执行。即为引擎中的ActivityExecution类。
execution.getActivityInstance()获取到了该执行的一个流程实例类activityInstance。
用户任务通过execution.activityExecutions[1].signal();方法来完成
该引擎支持多执行,多实例。
4.2 任务传参
当流程执行到某步时,我们想传递参数,可以通过对执行实例加监听来实现
 
var processDefinition = new Transformer().transform(docXml)[0];  
 //为流程定义增加监听  
   for (var i = 0; i < processDefinition.baseElements.length; i++) {  
      var activity = processDefinition.baseElements[i];  
      var listeners = activity.listeners;  
      if(!!activity.listeners) {  
        listeners.push({  
          "start" : function(activityExecution) {  
            var actId = activityExecution.activityDefinition.id;  
            console.log("start "+actId);  
            if(activityExecution.activityDefinition.type=="userTask"){  
                var lala = prompt("input lala","");  
                activityExecution.variables.lala = lala;  
                activityExecution.signal();    
            }  
          },  
          "end" : function(activityExecution){  
            var actId = activityExecution.activityDefinition.id;  
          	console.log("end "+actId)  
          },  
          "signal" :  function(activityExecution){  
            var actId = activityExecution.activityDefinition.id;  
          console.log("signal "+actId)  
          }  
        });  
       }  
   }   

4.3 延迟加载

5 启发
5.1 可用性
流程定义对象的解析(Transformer)
流程预演功能(Executor)
1
0
分享到:
评论

相关推荐

    camunda-bpmn-js:基于bpmn-js的可嵌入Camunda建模分布

    Camunda BPMN JS库是一个专门针对业务流程建模的JavaScript实现,它基于BPMN 2.0标准,为开发者提供了一种在Web应用中嵌入流程建模的能力。本文将深入探讨camunda-bpmn-js的核心功能、用法以及在实际项目中的应用。 ...

    camunda-bpmn:Camunda API的BPMN应用实例

    Camunda BPMN 是一个开源的业务流程管理(BPM)平台,它基于业务流程建模与notation(BPMN)标准,为企业提供了一种可视化的方式来设计、执行和监控业务流程。这个项目的核心是 Camunda Engine,它是一个轻量级的、...

    camunda-bpmn-moddle:BPMN 2.0的Camunda模块扩展

    该项目将BPMN 2.0的名称空间扩展定义为描述符。 用法 将其与一起使用以验证Camunda BPMN 2.0扩展。 var BpmnModdle = require ( 'bpmn-moddle' ) ; var camundaModdle = require ( 'camunda-bpmn-moddle/resources...

    python-bpmn-engine:在Python流程中解析和执行Camunda BPMN模型

    一个用于在单个流程中解析和执行BPMN模型的python模块到目前为止支持的元素: 开始/结束事件任务(手动,用户,服务)-暂时执行虚拟网关(专有,并行) 有条件的顺序流BPMN模型示例: 用法示例: import asynciofrom...

    VUE + bpmn 流程设计器 demo

    在“VUE + bpmn 流程设计器 demo”项目中,我们看到的是一个基于 Vue.js 的实现,利用 BPMN 2.0 规范的库来创建流程设计器的示例。这个demo的目的是为了简化开发过程,帮助开发者快速理解和实现BPMN流程设计功能。 ...

    bpmn+vue-bpmn+vue

    3. **图形渲染**:借助SVG或者canvas库,如D3.js,可以在Vue组件中绘制BPMN图形,确保流程图的精确展示。 4. **数据绑定与动态更新**:Vue的数据绑定机制使得流程图中的元素可以实时响应数据变化,例如,当用户更改...

    camunda-jar.zip

    camunda-bpmn-model-7.10.0.jar,camunda-bpm-spring-boot-starter-3.2.0.jar,camunda-bpm-spring-boot-starter-rest-3.2.0.jar,camunda-bpm-spring-boot-starter-test-3.2.0.jar,camunda-bpm-spring-boot-starter-...

    基于bpmn.js的流程图

    BPMN.js是JavaScript实现的一个开源库,它提供了在Web应用中绘制、解析和交互操作BPMN流程图的能力。这个库为开发人员提供了一种强大的工具,使得非技术人员也能理解复杂的业务流程模型。 **一、BPMN.js基础知识** ...

    camunda-bpmn

    1. **camunda-engine**:核心执行引擎,负责解析BPMN流程图,执行流程实例,并管理任务和变量。 2. **camunda-modeler**:用于创建和编辑BPMN流程图的桌面应用。 3. **camunda-tasklist**:任务管理界面,用户可以...

    社区扩展助手库,用于可视化流程测试涵盖了BPMN流程的哪些部分。_camunda-process-test-covera.zip

    《社区扩展助手库:Camunda Process Test Coverage 深度解析》 在现代企业级应用开发中,BPMN(Business Process Model and Notation)流程建模语言扮演着至关重要的角色,它允许开发者以图形化的方式描述业务流程...

    camunda工作流平台官方汉化方法7.14

    此外,理解Camunda的工作流程概念,如BPMN模型、事件、任务和变量,对于正确操作和定制汉化版Camunda也非常重要。 总之,汉化Camunda 7.14涉及查找和应用社区提供的汉化资源,配置服务器,以及验证结果。这一过程...

    camunda-modeler:基于bpmn.io的BPMN和DMN集成建模解决方案

    Camunda Modeler 基于BPMN与DMN集成建模解决方案。资源(另请参阅)构建应用程序在Posix环境中构建应用程序。 在Windows上是Git Bash或WSL。 # checkout a taggit checkout v1.1.0# install dependenciesnpm install...

    基于camunda源代码编译运行流程引擎

    Camunda是一个强大的业务流程管理(Business Process Management, BPM)平台,它支持业务流程模型与标注(Business Process Model and Notation, BPMN)规范。Camunda的开源版本提供了丰富的功能集,可以满足大多数...

    camunda7.17视频课程源码分享

    “camunda-engine”是Camunda引擎的核心部分,包含了执行流程实例、管理任务、监听事件等核心功能的Java库。通过对这部分源码的学习,开发者可以深入了解Camunda的工作原理。 “external-task-java”是另一个Java...

    Flowable-BPMN操作流程部署启动源码

    这个过程会将流程定义解析并存储在数据库中,以便后续的流程实例可以通过引擎启动和执行。Flowable提供了一个API接口以及命令行工具来进行流程部署。 在"Flowable-BPMN操作流程部署启动源码"中,我们可以了解到如何...

    中国式传统流程引擎开源标杆

    钉钉Activiti是基于BPMN 2.0标准的轻量级流程引擎,以其简单易用和高效执行闻名;Flowable则是在Activiti基础上发展起来,增强了对社交协作和事件驱动的支持;Camunda则是高度模块化、企业级的流程引擎,具有出色的...

    camunda流程设计器V5.14.0版本

    《camunda流程设计器V5.14.0版本:深入解析与应用》 camunda流程设计器,作为一款专业的企业级工作流和业务流程管理(BPM)工具,一直以来都深受IT行业的青睐。其最新发布的V5.14.0版本,不仅在功能上有所增强,...

    bpmnjsdemo.zip

    【标题】"bpmnjsdemo.zip"是一个包含BPMN2.0流程定义工具的Web...通过解析和运行其中的示例,用户可以掌握BPMNJS的用法,了解如何将BPMN2.0流程图集成到Web应用中,同时对Camunda和Activiti的工作流程有更深入的理解。

Global site tag (gtag.js) - Google Analytics