精华内容
下载资源
问答
  • 工作流设计器
    千次阅读
    2021-07-27 23:06:32

    一、activiti介绍

    Activity是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。

    BPMN2.0规范包含很多种模型。目前Activiti可以支持在大多数情况下常用的模型,并且在实现规范的基础上进行了功能和使用性扩展。借助Activiti的扩展功能可以更方便地实现和BPMN2.0规范中相同的功能,并且通过简单配置即可实现邮件任务、Java Service任务等不再BPMN2.0规范之内的功能。

    二、BPMN2.0规范的分类有哪些?

    BPMN2.0规范的分类主要有如下几个部分:

    1、启动和结束事件(Event)

    2、顺序流(Sequence Flow)

    3、任务(Task)

    4、网关(Gateway)

    5、子流程(Subprocess)

    6、边界事件(Boundary Event)

    7、中间事件(Intermediate Event)

    8、监听器(Listener)

    三、流程设计器

    Activiti提供了流程设计器界面,可从官网下载.或者在南瓜树数据平台体验。

     

    更多相关内容
  • Html5+jquery实现的工作流设计器。剥离了原来的各种内部设置,做成了纯粹的设计器,通用性更广。 提供了常用的调用函数,以便大家可以在外部进行设置扩展。需要的朋友赶快下了。都是开源的js文件。 使用和说明,...
  • activiti 6 最新工作流设计器汉化activiti 6 最新工作流设计器汉化activiti 6 最新工作流设计器汉化
  • OA审批工作流设计器实现

    千次阅读 2021-04-16 22:54:14
    类钉钉风格工作流引擎,支持activiti、flowable,workflow 流程设计,开源工作流设计器,自研表单设计器,支持多种组件类型,能够进行复杂流程设计,UI简单友好易用,支持复杂条件,并行分支,延时阻塞,触发器等......

    wflow-web

    由 Vue + ElementUI 驱动,已开源不断更新中 ,主要更新 Gitee

    😋 码云gitee | github地址

    👉 在线体验地址: 戳我打开演示页面 👈

    📃 详细文档请访问 : wflow文档

    喜欢就点个小⭐吧😀

    👀界面一览

    工作区面板

    表单管理

    工作流表单管理,支持分组和单组表单拖拽排序
    在这里插入图片描述


    表单基本设置

    表单设计器

    支持分栏布局、明细表格、以及多种基础组件,支持自定义开发组件

    image-20220724220114724

    image-20220724221040780


    流程设计器

    任意条件层级审批流程设计, 审批节点支持多种业务类型设置,支持流程校验

    image-20220711111351476

    自定义审批条件

    image-20220722182318650


    自定义复杂流转条件

    可视化流程逻辑分支条件

    image-20220722182622661


    支持多种类型业务节点,支持配置校验,灵活配置

    image-20220722182427315

    支持无限层级嵌套

    image-20220711111911427

    条件节点优先级动态拖拽,实时刷新

    展开全文
  • bpmn.js+vue实现工作流设计器(左侧功能+右侧详情)

    千次阅读 多人点赞 2021-09-06 16:03:33
    前言: 整理在vue项目中使用bpmn.js的过程和源码。 实现最终效果: 1、bpmn.js的介绍 2、bpmn.js中实现最简单的效果: 3、bpmn.js引入中文版 4、bpmn.js引入左侧的功能面板 5、bpmn.js引入右侧的详情......

    前言:

           整理在vue项目中使用bpmn.js的过程和源码。

    实现最终效果:

    目录:

    1、bpmn.js的介绍,官网入口

    2、bpmn.js中实现最简单的效果:

    引入插件1:

    开始开发:

    (1)页面上:创建容器

    (2)js文件中:xml可以获取本地,也可以用axios获取在线地址

    (3) css样式

    3、bpmn.js引入中文版

    官方不仅仅提供了,中文版,还有其他版本,想了解的点我

    在第二步的基础上,js中在引入:

    4、bpmn.js引入左侧的功能面板

    (1)当前页面引入,我用的是scss

    (2)main.js中引入:

    5、bpmn.js引入右侧的详情面板

     引入:2个插件,加上上面那个,一共是3个

    代码开发:

    页面上增加元素:

    样式:

    或者在 main.js 中

    js中:先引入配置

    6、完整源码:

    index.vue

    新建一个文件夹:customTranslate

    customTranslate.js

    translations.js

    xml.js

    参考文献:


    1、bpmn.js的介绍,官网入口

           业务流程模型注解(Business Process Modeling Notation - BPMN)是 业务流程模型的一种标准图形注解。这个标准 是由对象管理组(Object Management Group - OMG)维护的。

    2、bpmn.js中实现最简单的效果:

    引入插件1:

    cnpm install bpmn-js --save-dev

    开始开发:

    (1)页面上:创建容器

    <template>
      <div class="containers" ref="containers">
        <div id="js-canvas" class="canvas" ref="canvas"></div>
      </div>
    </template>

    (2)js文件中:xml可以获取本地,也可以用axios获取在线地址

    import xmlStr from './xml' //引入默认显示的xml字符串数据
    import BpmnModeler from 'bpmn-js/lib/Modeler' // 引入 bpmn-js
     export default {
        data () {
          return {
            bpmnModeler: null,
            containers: null
          }
        },
        mounted() {
          this.initDiagram()
        },
        methods:{
          //初始化方法
          initDiagram(){
             this.containers = this.$refs.containers   // 获取到属性ref为“containers”的dom节点
             const canvas = this.$refs.canvas   // 获取到属性ref为“canvas”的dom节点
             this.bpmnModeler = new BpmnModeler({
              container: canvas,
            })
            this.createNewDiagram()
         },
          // 注意:必须先加载一个bpmn文件,新建就是加载一个空的bpmn文件,否则不能拖拽节点
          createNewDiagram(){
            /**
             * 获取后台,获取默认的xml
             * */
            // var diagramUrl = 'https://cdn.staticaly.com/gh/bpmn-io/bpmn-js-examples/dfceecba/starter/diagram.bpmn';
            // this.$axios.get(diagramUrl).then((res)=>{
            //     console.log(res.data)
            //     this.openDiagram(res.data)
            //   }).catch((err)=>{
            //     console.log(err)
            //   })
    
            let mr_xml = xmlStr //默认值-xml
            // let mr_xml = '' //默认值-xml
            this.openDiagram(mr_xml)
    
          },  
          openDiagram(xml){
            /**
             * 导入xml(字符串形式),返回导入结果
             * 后续会取消传入回调函数的方式
             * 推荐使用async/await或者链式调用
             * @param { string } xml 流程图xml字符串
             * @param { Promise } callback 回调函数,出错时返回{ warnings,err }
             */
            this.bpmnModeler.importXML(xml, function(err) {
              if (err) {
                // container
                //     .removeClass('with-diagram')
                //     .addClass('with-error');
                console.error(err);
              } else {
                // container
                //   .removeClass('with-error')
                //   .addClass('with-diagram');
              }
            });
          },
    
        }
    
    
    }

    (3) css样式

    <style lang="scss" scope>
      .containers{
        position: absolute;
        background-color: #ffffff;
        width: 100%;
        height: 100%;
        display: flex;
        .canvas{
          width: 100%;
          height: 100%;
        }
        .bjs-powered-by {
          display: none;
        }
      }
    </style>

    3、bpmn.js引入中文版

    官方不仅仅提供了,中文版,还有其他版本,想了解的点我

    在第二步的基础上,js中在引入:

    import customTranslate from './customTranslate/customTranslate'  //汉化
    export default {
        data () {
          return {
            bpmnModeler: null,
            containers: null,
    
            //加入-------start-----------
            customTranslateModule: {
              translate: [ 'value', customTranslate ]
            }
            //加入-------end-----------
    
          }
        },
    
    }
     methods:{
          //初始化方法
          initDiagram(){
    
            this.containers = this.$refs.containers   // 获取到属性ref为“containers”的dom节点
            const canvas = this.$refs.canvas   // 获取到属性ref为“canvas”的dom节点
            this.bpmnModeler = new BpmnModeler({
              container: canvas,
    
              //加入-------start-----------
              additionalModules: [
                this.customTranslateModule,
              ],
              //加入-------end-----------
    
            })
            this.createNewDiagram()
          },
    
    
    }

    4、bpmn.js引入左侧的功能面板

    (1)当前页面引入,我用的是scss

    加入:

     /*左边工具栏以及编辑节点的样式*/
      @import '~bpmn-js/dist/assets/diagram-js.css';
      @import '~bpmn-js/dist/assets/bpmn-font/css/bpmn.css';
      @import '~bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css';
      @import '~bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css';

    完整:

    <style lang="scss" scope>
      /*左边工具栏以及编辑节点的样式*/
      @import '~bpmn-js/dist/assets/diagram-js.css';
      @import '~bpmn-js/dist/assets/bpmn-font/css/bpmn.css';
      @import '~bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css';
      @import '~bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css';
     
    
      .containers{
        position: absolute;
        background-color: #ffffff;
        width: 100%;
        height: 100%;
        display: flex;
        .canvas{
          width: 100%;
          height: 100%;
        }
        .bjs-powered-by {
          display: none;
        }
      }
    </style>

    (2)main.js中引入:

    // 以下为bpmn工作流绘图工具的样式
    import 'bpmn-js/dist/assets/diagram-js.css' // 左边工具栏以及编辑节点的样式
    import 'bpmn-js/dist/assets/bpmn-font/css/bpmn.css'
    import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css'
    import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css'

    5、bpmn.js引入右侧的详情面板

     引入:2个插件,加上上面那个,一共是3个

    cnpm install --save bpmn-js-properties-panel
    cnpm install --save camunda-bpmn-moddle

    代码开发:

    页面上增加元素:

    <template>
      <div class="containers" ref="containers">
        <div id="js-canvas" class="canvas" ref="canvas"></div>
    
    
        增加
        <div id="js-properties-panel"></div>
    
    
      </div>
    </template>

    样式:

    /*右侧详情*/
      @import '~bpmn-js-properties-panel/dist/assets/bpmn-js-properties-panel.css';
    
    
    
    .containers{        
        display: flex;  //新增,为了让右侧和左侧一起看到   
    }

    或者在 main.js 中

    import 'bpmn-js-properties-panel/dist/assets/bpmn-js-properties-panel.css'

    js中:先引入配置

      //右侧属性栏功能
      import propertiesPanelModule from 'bpmn-js-properties-panel'
      import propertiesProviderModule from 'bpmn-js-properties-panel/lib/provider/camunda'
      import camundaModdleDescriptor from 'camunda-bpmn-moddle/resources/camunda'
    methods:{
          //初始化方法
          initDiagram(){
            this.containers = this.$refs.containers   // 获取到属性ref为“containers”的dom节点
            const canvas = this.$refs.canvas   // 获取到属性ref为“canvas”的dom节点
            this.bpmnModeler = new BpmnModeler({
              container: canvas,
    
              //添加控制板-----------增加1-------------
              propertiesPanel: {
                parent: '#js-properties-panel'
              },
              //-----------增加1-------------
    
    
              //左侧
              additionalModules: [
                this.customTranslateModule,
    
    
                // 右边的属性栏-----------增加2-------------
                propertiesProviderModule,
                propertiesPanelModule
                //-----------增加2-------------
    
              ],
              moddleExtensions: {
                camunda: camundaModdleDescriptor
              }
    
    
    
            })
            this.createNewDiagram()
          },
    
    
    }

    6、完整源码:

    index.vue

    <template>
      <div class="containers" ref="containers">
        <div id="js-canvas" class="canvas" ref="canvas"></div>
        <div id="js-properties-panel"></div>
      </div>
    </template>
    <script>
      import BpmnModeler from 'bpmn-js/lib/Modeler' // 引入 bpmn-js
      import customTranslate from './customTranslate/customTranslate'  //汉化
      import xmlStr from './xml' //引入默认显示的xml字符串数据
    
      //右侧属性栏功能
      import propertiesPanelModule from 'bpmn-js-properties-panel'
      import propertiesProviderModule from 'bpmn-js-properties-panel/lib/provider/camunda'
      import camundaModdleDescriptor from 'camunda-bpmn-moddle/resources/camunda'
    
      export default {
        data () {
          return {
            bpmnModeler: null,
            containers: null,
            canvas: null,
            customTranslateModule: {
              translate: [ 'value', customTranslate ]
            }
          }
        },
        mounted() {
          this.initDiagram()
        },
        methods:{
          //初始化方法
          initDiagram(){
    
            this.containers = this.$refs.containers   // 获取到属性ref为“containers”的dom节点
            const canvas = this.$refs.canvas   // 获取到属性ref为“canvas”的dom节点
            this.bpmnModeler = new BpmnModeler({
              container: canvas,
              //添加控制板
              propertiesPanel: {
                parent: '#js-properties-panel'
              },
              //左侧
              additionalModules: [
                this.customTranslateModule,
                // 右边的属性栏
                propertiesProviderModule,
                propertiesPanelModule
              ],
              moddleExtensions: {
                camunda: camundaModdleDescriptor
              }
    
    
    
            })
            this.createNewDiagram()
          },
          // 注意:必须先加载一个bpmn文件,新建就是加载一个空的bpmn文件,否则不能拖拽节点
          createNewDiagram(){
            /**
             * 获取后台,获取默认的xml
             * */
            // var diagramUrl = 'https://cdn.staticaly.com/gh/bpmn-io/bpmn-js-examples/dfceecba/starter/diagram.bpmn';
            // this.$axios.get(diagramUrl).then((res)=>{
            //     console.log(res.data)
            //     this.openDiagram(res.data)
            //   }).catch((err)=>{
            //     console.log(err)
            //   })
    
            let mr_xml = xmlStr //默认值-xml
            // let mr_xml = '' //默认值-xml
            this.openDiagram(mr_xml)
    
          },
          openDiagram(xml){
            /**
             * 导入xml(字符串形式),返回导入结果
             * 后续会取消传入回调函数的方式
             * 推荐使用async/await或者链式调用
             * @param { string } xml 流程图xml字符串
             * @param { Promise } callback 回调函数,出错时返回{ warnings,err }
             */
            this.bpmnModeler.importXML(xml, function(err) {
              if (err) {
                // container
                //     .removeClass('with-diagram')
                //     .addClass('with-error');
                console.error(err);
              } else {
                // container
                //   .removeClass('with-error')
                //   .addClass('with-diagram');
              }
            });
          },
        },
    
      }
    </script>
    <style lang="scss">
      /*左边工具栏以及编辑节点的样式*/
      @import '~bpmn-js/dist/assets/diagram-js.css';
      @import '~bpmn-js/dist/assets/bpmn-font/css/bpmn.css';
      @import '~bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css';
      @import '~bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css';
      /*右侧详情*/
      @import '~bpmn-js-properties-panel/dist/assets/bpmn-js-properties-panel.css';
    
      .containers{
        position: absolute;
        background-color: #ffffff;
        width: 100%;
        height: 100%;
        display: flex;
        .canvas{
          width: 100%;
          height: 100%;
        }
        .bjs-powered-by {
          display: none;
        }
      }
    </style>
    
    

    新建一个文件夹:customTranslate

    customTranslate.js

    import translations from './translations';
    
    
    export default function customTranslate(template, replacements) {
      replacements = replacements || {};
    
      // Translate
      template = translations[template] || template;
    
      // Replace
      return template.replace(/{([^}]+)}/g, function(_, key) {
        return replacements[key] || '{' + key + '}';
      });
    }

    translations.js

    export default {
      // Labels
      'Activate the global connect tool': '激活全局连接工具',
      'Append {type}': '添加 {type}',
      'Add Lane above': '在上面添加道',
      'Divide into two Lanes': '分割成两个道',
      'Divide into three Lanes': '分割成三个道',
      'Add Lane below': '在下面添加道',
      'Append compensation activity': '追加补偿活动',
      'Change type': '修改类型',
      'Connect using Association': '使用关联连接',
      'Connect using Sequence/MessageFlow or Association': '使用顺序/消息流或者关联连接',
      'Connect using DataInputAssociation': '使用数据输入关联连接',
      Remove: '移除',
      'Activate the hand tool': '激活抓手工具',
      'Activate the lasso tool': '激活套索工具',
      'Activate the create/remove space tool': '激活创建/删除空间工具',
      'Create expanded SubProcess': '创建扩展子过程',
      'Create IntermediateThrowEvent/BoundaryEvent': '创建中间抛出事件/边界事件',
      'Create Pool/Participant': '创建池/参与者',
      'Parallel Multi Instance': '并行多重事件',
      'Sequential Multi Instance': '时序多重事件',
      DataObjectReference: '数据对象参考',
      DataStoreReference: '数据存储参考',
      Loop: '循环',
      'Ad-hoc': '即席',
      'Create {type}': '创建 {type}',
      Task: '任务',
      'Send Task': '发送任务',
      'Receive Task': '接收任务',
      'User Task': '用户任务',
      'Manual Task': '手工任务',
      'Business Rule Task': '业务规则任务',
      'Service Task': '服务任务',
      'Script Task': '脚本任务',
      'Call Activity': '调用活动',
      'Sub Process (collapsed)': '子流程(折叠的)',
      'Sub Process (expanded)': '子流程(展开的)',
      'Start Event': '开始事件',
      StartEvent: '开始事件',
      'Intermediate Throw Event': '中间事件',
      'End Event': '结束事件',
      EndEvent: '结束事件',
      'Create Gateway': '创建网关',
      'Create Intermediate/Boundary Event': '创建中间/边界事件',
      'Message Start Event': '消息开始事件',
      'Timer Start Event': '定时开始事件',
      'Conditional Start Event': '条件开始事件',
      'Signal Start Event': '信号开始事件',
      'Error Start Event': '错误开始事件',
      'Escalation Start Event': '升级开始事件',
      'Compensation Start Event': '补偿开始事件',
      'Message Start Event (non-interrupting)': '消息开始事件(非中断)',
      'Timer Start Event (non-interrupting)': '定时开始事件(非中断)',
      'Conditional Start Event (non-interrupting)': '条件开始事件(非中断)',
      'Signal Start Event (non-interrupting)': '信号开始事件(非中断)',
      'Escalation Start Event (non-interrupting)': '升级开始事件(非中断)',
      'Message Intermediate Catch Event': '消息中间捕获事件',
      'Message Intermediate Throw Event': '消息中间抛出事件',
      'Timer Intermediate Catch Event': '定时中间捕获事件',
      'Escalation Intermediate Throw Event': '升级中间抛出事件',
      'Conditional Intermediate Catch Event': '条件中间捕获事件',
      'Link Intermediate Catch Event': '链接中间捕获事件',
      'Link Intermediate Throw Event': '链接中间抛出事件',
      'Compensation Intermediate Throw Event': '补偿中间抛出事件',
      'Signal Intermediate Catch Event': '信号中间捕获事件',
      'Signal Intermediate Throw Event': '信号中间抛出事件',
      'Message End Event': '消息结束事件',
      'Escalation End Event': '定时结束事件',
      'Error End Event': '错误结束事件',
      'Cancel End Event': '取消结束事件',
      'Compensation End Event': '补偿结束事件',
      'Signal End Event': '信号结束事件',
      'Terminate End Event': '终止结束事件',
      'Message Boundary Event': '消息边界事件',
      'Message Boundary Event (non-interrupting)': '消息边界事件(非中断)',
      'Timer Boundary Event': '定时边界事件',
      'Timer Boundary Event (non-interrupting)': '定时边界事件(非中断)',
      'Escalation Boundary Event': '升级边界事件',
      'Escalation Boundary Event (non-interrupting)': '升级边界事件(非中断)',
      'Conditional Boundary Event': '条件边界事件',
      'Conditional Boundary Event (non-interrupting)': '条件边界事件(非中断)',
      'Error Boundary Event': '错误边界事件',
      'Cancel Boundary Event': '取消边界事件',
      'Signal Boundary Event': '信号边界事件',
      'Signal Boundary Event (non-interrupting)': '信号边界事件(非中断)',
      'Compensation Boundary Event': '补偿边界事件',
      'Exclusive Gateway': '互斥网关',
      'Parallel Gateway': '并行网关',
      'Inclusive Gateway': '相容网关',
      'Complex Gateway': '复杂网关',
      'Event based Gateway': '事件网关',
      Transaction: '转运',
      'Sub Process': '子流程',
      'Event Sub Process': '事件子流程',
      'Collapsed Pool': '折叠池',
      'Expanded Pool': '展开池',
    
      // Errors
      'no parent for {element} in {parent}': '在{parent}里,{element}没有父类',
      'no shape type specified': '没有指定的形状类型',
      'flow elements must be children of pools/participants': '流元素必须是池/参与者的子类',
      'out of bounds release': 'out of bounds release',
      'more than {count} child lanes': '子道大于{count} ',
      'element required': '元素不能为空',
      'diagram not part of bpmn:Definitions': '流程图不符合bpmn规范',
      'no diagram to display': '没有可展示的流程图',
      'no process or collaboration to display': '没有可展示的流程/协作',
      'element {element} referenced by {referenced}#{property} not yet drawn':
        '由{referenced}#{property}引用的{element}元素仍未绘制',
      'already rendered {element}': '{element} 已被渲染',
      'failed to import {element}': '导入{element}失败',
      // 属性面板的参数
      Id: '编号',
      Name: '名称',
      General: '常规',
      Details: '详情',
      'Message Name': '消息名称',
      Message: '消息',
      Initiator: '创建者',
      'Asynchronous Continuations': '持续异步',
      'Asynchronous Before': '异步前',
      'Asynchronous After': '异步后',
      'Job Configuration': '工作配置',
      Exclusive: '排除',
      'Job Priority': '工作优先级',
      'Retry Time Cycle': '重试时间周期',
      Documentation: '文档',
      'Element Documentation': '元素文档',
      'History Configuration': '历史配置',
      'History Time To Live': '历史的生存时间',
      Forms: '表单',
      'Form Key': '表单key',
      'Form Fields': '表单字段',
      'Business Key': '业务key',
      'Form Field': '表单字段',
      ID: '编号',
      Type: '类型',
      Label: '名称',
      'Default Value': '默认值',
      Validation: '校验',
      'Add Constraint': '添加约束',
      Config: '配置',
      Properties: '属性',
      'Add Property': '添加属性',
      Value: '值',
      Listeners: '监听器',
      'Execution Listener': '执行监听',
      'Event Type': '事件类型',
      'Listener Type': '监听器类型',
      'Java Class': 'Java类',
      Expression: '表达式',
      'Must provide a value': '必须提供一个值',
      'Delegate Expression': '代理表达式',
      Script: '脚本',
      'Script Format': '脚本格式',
      'Script Type': '脚本类型',
      'Inline Script': '内联脚本',
      'External Script': '外部脚本',
      Resource: '资源',
      'Field Injection': '字段注入',
      Extensions: '扩展',
      'Input/Output': '输入/输出',
      'Input Parameters': '输入参数',
      'Output Parameters': '输出参数',
      Parameters: '参数',
      'Output Parameter': '输出参数',
      'Timer Definition Type': '定时器定义类型',
      'Timer Definition': '定时器定义',
      Date: '日期',
      Duration: '持续',
      Cycle: '循环',
      Signal: '信号',
      'Signal Name': '信号名称',
      Escalation: '升级',
      Error: '错误',
      'Link Name': '链接名称',
      Condition: '条件名称',
      'Variable Name': '变量名称',
      'Variable Event': '变量事件',
      'Specify more than one variable change event as a comma separated list.':
        '多个变量事件以逗号隔开',
      'Wait for Completion': '等待完成',
      'Activity Ref': '活动参考',
      'Version Tag': '版本标签',
      Executable: '可执行文件',
      'External Task Configuration': '扩展任务配置',
      'Task Priority': '任务优先级',
      External: '外部',
      Connector: '连接器',
      'Must configure Connector': '必须配置连接器',
      'Connector Id': '连接器编号',
      Implementation: '实现方式',
      'Field Injections': '字段注入',
      Fields: '字段',
      'Result Variable': '结果变量',
      Topic: '主题',
      'Configure Connector': '配置连接器',
      'Input Parameter': '输入参数',
      Assignee: '代理人',
      'Candidate Users': '候选用户',
      'Candidate Groups': '候选组',
      'Due Date': '到期时间',
      'Follow Up Date': '跟踪日期',
      'Specify more than one group as a comma separated list.': '多个用户使用逗号隔开',
      Priority: '优先级',
      // eslint-disable-next-line no-template-curly-in-string
      'The follow up date as an EL expression (e.g. ${someDate} or an ISO date (e.g. 2015-06-26T09:54:00)':
        '跟踪日期必须符合EL表达式,如: ${someDate} ,或者一个ISO标准日期,如:2015-06-26T09:54:00',
      // eslint-disable-next-line no-template-curly-in-string
      'The due date as an EL expression (e.g. ${someDate} or an ISO date (e.g. 2015-06-26T09:54:00)':
        '跟踪日期必须符合EL表达式,如: ${someDate} ,或者一个ISO标准日期,如:2015-06-26T09:54:00',
      Variables: '变量',
      'Candidate Starter Users': '选择启动候选人',
      'Candidate Starter Configuration': '候选人启动器配置',
      'Candidate Starter Groups': '候选人启动组',
      'This maps to the process definition key.': '编号将映射到流程主键.',
    
      save: '保存',
      Tools: '工具',
      FlowGateway: '流程网关',
      ProcessControl: '流程节点',
      'Create StartEvent': '开始节点',
      'Create EndEvent': '结束节点',
      'Create ExclusiveGateway': '互斥网关',
      'Create ParallelGateway': '并行网关',
      'Create Task': '任务节点',
      'Create UserTask': '用户任务节点',
      'Condition Type': '条件类型',
    
      // 左侧工具箱补充汉化项 热水2020.1.12
      'Create Group': '创建组',
      'Create DataObjectReference': '创建数据对象引用',
      'Create DataStoreReference': '创建数据存储引用',
    
      // 节点添加Pad 补充汉化 热水2020.1.12
      'Append EndEvent': '追加结束事件节点',
      'Append Gateway': '追加网关节点',
      'Append UserTask': '追加用户任务节点',
      'Append Intermediate/Boundary Event': '追加中间或边界事件',
      'Append TextAnnotation': '追加文本批注' // 此句要有效,必须在CustomContexPadProvide给此节点增加一个translate('Append TextAnnotation')
    }
    

    xml.js

    let xmlStr = `
      <?xml version="1.0" encoding="UTF-8"?>
      <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd">
        <collaboration id="sid-c0e745ff-361e-4afb-8c8d-2a1fc32b1424">
          <participant id="sid-87F4C1D6-25E1-4A45-9DA7-AD945993D06F" name="Customer" processRef="sid-C3803939-0872-457F-8336-EAE484DC4A04" />
        </collaboration>
        <process id="sid-C3803939-0872-457F-8336-EAE484DC4A04" name="Customer" processType="None" isClosed="false" isExecutable="false">
          <extensionElements />
          <laneSet id="sid-b167d0d7-e761-4636-9200-76b7f0e8e83a">
            <lane id="sid-57E4FE0D-18E4-478D-BC5D-B15164E93254">
              <flowNodeRef>sid-52EB1772-F36E-433E-8F5B-D5DFD26E6F26</flowNodeRef>
              <flowNodeRef>sid-E49425CF-8287-4798-B622-D2A7D78EF00B</flowNodeRef>
              <flowNodeRef>sid-D7F237E8-56D0-4283-A3CE-4F0EFE446138</flowNodeRef>
              <flowNodeRef>sid-E433566C-2289-4BEB-A19C-1697048900D2</flowNodeRef>
              <flowNodeRef>sid-5134932A-1863-4FFA-BB3C-A4B4078B11A9</flowNodeRef>
              <flowNodeRef>SCAN_OK</flowNodeRef>
            </lane>
          </laneSet>
          <task id="sid-52EB1772-F36E-433E-8F5B-D5DFD26E6F26" name="Scan QR code">
            <incoming>sid-4DC479E5-5C20-4948-BCFC-9EC5E2F66D8D</incoming>
            <outgoing>sid-EE8A7BA0-5D66-4F8B-80E3-CC2751B3856A</outgoing>
          </task>
          <task id="sid-E49425CF-8287-4798-B622-D2A7D78EF00B" name="Open product information in mobile  app">
            <incoming>sid-8B820AF5-DC5C-4618-B854-E08B71FB55CB</incoming>
            <outgoing>sid-57EB1F24-BD94-479A-BF1F-57F1EAA19C6C</outgoing>
          </task>
          <startEvent id="sid-D7F237E8-56D0-4283-A3CE-4F0EFE446138" name="Notices&#10;QR code">
            <outgoing>sid-7B791A11-2F2E-4D80-AFB3-91A02CF2B4FD</outgoing>
          </startEvent>
          <endEvent id="sid-E433566C-2289-4BEB-A19C-1697048900D2" name="Is informed">
            <incoming>sid-57EB1F24-BD94-479A-BF1F-57F1EAA19C6C</incoming>
          </endEvent>
          <exclusiveGateway id="sid-5134932A-1863-4FFA-BB3C-A4B4078B11A9">
            <incoming>sid-7B791A11-2F2E-4D80-AFB3-91A02CF2B4FD</incoming>
            <incoming>sid-337A23B9-A923-4CCE-B613-3E247B773CCE</incoming>
            <outgoing>sid-4DC479E5-5C20-4948-BCFC-9EC5E2F66D8D</outgoing>
          </exclusiveGateway>
          <exclusiveGateway id="SCAN_OK" name="Scan successful?&#10;">
            <incoming>sid-EE8A7BA0-5D66-4F8B-80E3-CC2751B3856A</incoming>
            <outgoing>sid-8B820AF5-DC5C-4618-B854-E08B71FB55CB</outgoing>
            <outgoing>sid-337A23B9-A923-4CCE-B613-3E247B773CCE</outgoing>
          </exclusiveGateway>
          <sequenceFlow id="sid-337A23B9-A923-4CCE-B613-3E247B773CCE" name="Yes" sourceRef="SCAN_OK" targetRef="sid-5134932A-1863-4FFA-BB3C-A4B4078B11A9" />
          <sequenceFlow id="sid-4DC479E5-5C20-4948-BCFC-9EC5E2F66D8D" sourceRef="sid-5134932A-1863-4FFA-BB3C-A4B4078B11A9" targetRef="sid-52EB1772-F36E-433E-8F5B-D5DFD26E6F26" />
          <sequenceFlow id="sid-8B820AF5-DC5C-4618-B854-E08B71FB55CB" name="No" sourceRef="SCAN_OK" targetRef="sid-E49425CF-8287-4798-B622-D2A7D78EF00B" />
          <sequenceFlow id="sid-57EB1F24-BD94-479A-BF1F-57F1EAA19C6C" sourceRef="sid-E49425CF-8287-4798-B622-D2A7D78EF00B" targetRef="sid-E433566C-2289-4BEB-A19C-1697048900D2" />
          <sequenceFlow id="sid-EE8A7BA0-5D66-4F8B-80E3-CC2751B3856A" sourceRef="sid-52EB1772-F36E-433E-8F5B-D5DFD26E6F26" targetRef="SCAN_OK" />
          <sequenceFlow id="sid-7B791A11-2F2E-4D80-AFB3-91A02CF2B4FD" sourceRef="sid-D7F237E8-56D0-4283-A3CE-4F0EFE446138" targetRef="sid-5134932A-1863-4FFA-BB3C-A4B4078B11A9" />
        </process>
        <bpmndi:BPMNDiagram id="sid-74620812-92c4-44e5-949c-aa47393d3830">
          <bpmndi:BPMNPlane id="sid-cdcae759-2af7-4a6d-bd02-53f3352a731d" bpmnElement="sid-c0e745ff-361e-4afb-8c8d-2a1fc32b1424">
            <bpmndi:BPMNShape id="sid-87F4C1D6-25E1-4A45-9DA7-AD945993D06F_gui" bpmnElement="sid-87F4C1D6-25E1-4A45-9DA7-AD945993D06F" isHorizontal="true">
              <omgdc:Bounds x="83" y="105" width="933" height="250" />
              <bpmndi:BPMNLabel labelStyle="sid-84cb49fd-2f7c-44fb-8950-83c3fa153d3b">
                <omgdc:Bounds x="47.49999999999999" y="170.42857360839844" width="12.000000000000014" height="59.142852783203125" />
              </bpmndi:BPMNLabel>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape id="sid-57E4FE0D-18E4-478D-BC5D-B15164E93254_gui" bpmnElement="sid-57E4FE0D-18E4-478D-BC5D-B15164E93254" isHorizontal="true">
              <omgdc:Bounds x="113" y="105" width="903" height="250" />
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape id="sid-52EB1772-F36E-433E-8F5B-D5DFD26E6F26_gui" bpmnElement="sid-52EB1772-F36E-433E-8F5B-D5DFD26E6F26">
              <omgdc:Bounds x="393" y="170" width="100" height="80" />
              <bpmndi:BPMNLabel labelStyle="sid-84cb49fd-2f7c-44fb-8950-83c3fa153d3b">
                <omgdc:Bounds x="360.5" y="172" width="84" height="12" />
              </bpmndi:BPMNLabel>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape id="sid-E49425CF-8287-4798-B622-D2A7D78EF00B_gui" bpmnElement="sid-E49425CF-8287-4798-B622-D2A7D78EF00B">
              <omgdc:Bounds x="728" y="170" width="100" height="80" />
              <bpmndi:BPMNLabel labelStyle="sid-84cb49fd-2f7c-44fb-8950-83c3fa153d3b">
                <omgdc:Bounds x="695.9285736083984" y="162" width="83.14285278320312" height="36" />
              </bpmndi:BPMNLabel>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNEdge id="sid-EE8A7BA0-5D66-4F8B-80E3-CC2751B3856A_gui" bpmnElement="sid-EE8A7BA0-5D66-4F8B-80E3-CC2751B3856A">
              <omgdi:waypoint x="493" y="210" />
              <omgdi:waypoint x="585" y="210" />
              <bpmndi:BPMNLabel>
                <omgdc:Bounds x="494" y="185" width="90" height="20" />
              </bpmndi:BPMNLabel>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge id="sid-8B820AF5-DC5C-4618-B854-E08B71FB55CB_gui" bpmnElement="sid-8B820AF5-DC5C-4618-B854-E08B71FB55CB">
              <omgdi:waypoint x="635" y="210" />
              <omgdi:waypoint x="728" y="210" />
              <bpmndi:BPMNLabel labelStyle="sid-e0502d32-f8d1-41cf-9c4a-cbb49fecf581">
                <omgdc:Bounds x="642" y="185" width="16" height="12" />
              </bpmndi:BPMNLabel>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge id="sid-7B791A11-2F2E-4D80-AFB3-91A02CF2B4FD_gui" bpmnElement="sid-7B791A11-2F2E-4D80-AFB3-91A02CF2B4FD">
              <omgdi:waypoint x="223" y="210" />
              <omgdi:waypoint x="275" y="210" />
              <bpmndi:BPMNLabel>
                <omgdc:Bounds x="204" y="185" width="90" height="20" />
              </bpmndi:BPMNLabel>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge id="sid-4DC479E5-5C20-4948-BCFC-9EC5E2F66D8D_gui" bpmnElement="sid-4DC479E5-5C20-4948-BCFC-9EC5E2F66D8D">
              <omgdi:waypoint x="325" y="210" />
              <omgdi:waypoint x="393" y="210" />
              <bpmndi:BPMNLabel>
                <omgdc:Bounds x="314" y="185" width="90" height="20" />
              </bpmndi:BPMNLabel>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge id="sid-57EB1F24-BD94-479A-BF1F-57F1EAA19C6C_gui" bpmnElement="sid-57EB1F24-BD94-479A-BF1F-57F1EAA19C6C">
              <omgdi:waypoint x="828" y="210" />
              <omgdi:waypoint x="901" y="210" />
              <bpmndi:BPMNLabel>
                <omgdc:Bounds x="820" y="185" width="90" height="20" />
              </bpmndi:BPMNLabel>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge id="sid-337A23B9-A923-4CCE-B613-3E247B773CCE_gui" bpmnElement="sid-337A23B9-A923-4CCE-B613-3E247B773CCE">
              <omgdi:waypoint x="611" y="234" />
              <omgdi:waypoint x="610.5" y="299" />
              <omgdi:waypoint x="300.5" y="299" />
              <omgdi:waypoint x="301" y="234" />
              <bpmndi:BPMNLabel labelStyle="sid-e0502d32-f8d1-41cf-9c4a-cbb49fecf581">
                <omgdc:Bounds x="585" y="236" width="21" height="12" />
              </bpmndi:BPMNLabel>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNShape id="StartEvent_0l6sgn0_di" bpmnElement="sid-D7F237E8-56D0-4283-A3CE-4F0EFE446138">
              <omgdc:Bounds x="187" y="192" width="36" height="36" />
              <bpmndi:BPMNLabel>
                <omgdc:Bounds x="182" y="229" width="46" height="24" />
              </bpmndi:BPMNLabel>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape id="EndEvent_0xwuvv5_di" bpmnElement="sid-E433566C-2289-4BEB-A19C-1697048900D2">
              <omgdc:Bounds x="901" y="192" width="36" height="36" />
              <bpmndi:BPMNLabel>
                <omgdc:Bounds x="892" y="231" width="56" height="12" />
              </bpmndi:BPMNLabel>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape id="ExclusiveGateway_1g0eih2_di" bpmnElement="sid-5134932A-1863-4FFA-BB3C-A4B4078B11A9" isMarkerVisible="true">
              <omgdc:Bounds x="275" y="185" width="50" height="50" />
              <bpmndi:BPMNLabel>
                <omgdc:Bounds x="210" y="160" width="90" height="12" />
              </bpmndi:BPMNLabel>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape id="ExclusiveGateway_0vci1x5_di" bpmnElement="SCAN_OK" isMarkerVisible="true">
              <omgdc:Bounds x="585" y="185" width="50" height="50" />
              <bpmndi:BPMNLabel>
                <omgdc:Bounds x="568" y="157" width="88" height="24" />
              </bpmndi:BPMNLabel>
            </bpmndi:BPMNShape>
          </bpmndi:BPMNPlane>
          <bpmndi:BPMNLabelStyle id="sid-e0502d32-f8d1-41cf-9c4a-cbb49fecf581">
            <omgdc:Font name="Arial" size="11" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" />
          </bpmndi:BPMNLabelStyle>
          <bpmndi:BPMNLabelStyle id="sid-84cb49fd-2f7c-44fb-8950-83c3fa153d3b">
            <omgdc:Font name="Arial" size="12" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" />
          </bpmndi:BPMNLabelStyle>
        </bpmndi:BPMNDiagram>
      </definitions>
    `
    export default xmlStr
    

    参考文献:

    1、https://chu1204505056.gitee.io/admin-pro/?hmsr=homeAd&hmpl=&hmcu=&hmkw=&hmci=#/other/workflow

    2、https://segmentfault.com/a/1190000039152721

    3、https://github.com/miyuesc/bpmn-process-designer

    4、https://juejin.cn/post/6844904017584193544

    5、https://blog.csdn.net/zhongzk69/article/details/103675421

    6、https://blog.csdn.net/juny0302/article/details/105739542/

    展开全文
  • 工作流通常会使用xml进行管理与配置,之间流转关系使用不同的xml节点进行配置,看着xml文件,很难直接Get到流程之间的流转关系。如果使用可视化的呈现来展现工作流,则很好的解决这个问题。更好的管理与维护。 可视...

    技术岛公众号

    技术岛公众号

    工作流通常会使用xml进行管理与配置,之间流转关系使用不同的xml节点进行配置,看着xml文件,很难直接Get到流程之间的流转关系。如果使用可视化的呈现来展现工作流,则很好的解决这个问题。更好的管理与维护。

    可视化呈现,自然离不开图形的操作。Github上找以2个非常有价值的工程 ,分别是:

    https://github.com/jifuwei/workflow-designer-web

    https://github.com/freegroup/draw2d

    都fork到仓库里了,不用担心找不到主

    https://github.com/Lancker/draw2d

    https://github.com/Lancker/workflow-designer-web

    实现的思路:

    首先,查看workflow-designer-web,这个工具有一个简单的工作流设计器,可以体验,能画节点,并用线条连接上。存在的问题是:节点类型不足以覆盖我所想要达到的效果。如果拿visio来比的话,操作流程度也是一个问题。阅读workflow-designer-web,图形操作相关的组件主要是draw2d。

    storm与财富增值

    storm与财富增值

    紧接着,转战draw2d,这个是开源的,能做什么不能做什么可以通过官网及demo查看,主要是以下2个网址:

    官网 http://www.draw2d.org/

    Demo示例:https://freegroup.github.io/draw2d/index.html

    非常开心的可以看到,draw2d采用MIT协议,官方网站上提到了Draw2D的用途之一就是workflow设计器的开发,有图有真像,来看看官网是怎么说的:

    Draw2D touch is a modern HTML 5 JavaScript library for visualization and interaction with diagrams and graphs. Draw2D touch makes it easy to create visual languages & tools of various kinds.

    在示例代码中可以看到不少workflow的影子,github仓库的介绍里也有一个BrainBox的实际应用,开发者使用Draw2D做的电路可视化工具​箱。

    Draw2D-examples

    有了Draw2D,如何开发一个工作流可视化编辑器​呢?开源大神还是很贴心的给了一个Shape Designer。如果没有这个东东,做可视化设计器会有些让人“恶心”,因为画一个图,可是一堆线条组成的啊~想想都够,还好,有这个Shape Designer!

    shapeDesigner

    Shape Designer能帮我们设计好各种基础的Workflow组件,用来设计不同的任务节点!再回到https://github.com/Lancker/workflow-designer-web,这个是工作流半成品,少了组件,正好使用Shape Designer设计满足自身需求的组件!

    简单小结一下​设计器开发流程:

    1. 使用Shape Designer设计工作流节点
    2. 参考workflow-designer-web,更换节点组件

    ​就这么结束了?​没有没有。流程文件的导出与加载还是空白,给大家留一个悬念​,下次再分解!

    巧妙拆分bolt提升Storm集群吞吐量

    技术岛公众号

    技术岛公众号

    展开全文
  • 群友分享的一个很漂亮的FLEX流程设计器,包含源码,很漂亮的界面,大家可以下载看看,如果感兴趣,可以自行修改,变成自己的工作流设计器。感谢作者的分享
  • JAVA Applet 工作流设计器

    热门讨论 2011-03-11 12:02:26
    采用JAVA Swing制作的工作流设计器,支持生成XML。 面向接口设计。流程完整以及合法性验证,扩展节点类型方便,快捷。 工作流框架中不可缺少的前段设计器
  • 前后端分离、maven多模块开发,方便多人协同开发 ... 代码生成支持连接不同的数据库,生成的模块可以连接指定的数据库,支持自定义模板,可以无限扩展,生成各种复杂的代码 一套代码支持mysql, orac...
  • 微软.net工作流设计器及源代码

    热门讨论 2009-10-29 10:33:54
    提示 在IE6下面运行有问题,不出现设计器的界面 从网上收集的.net编写的工作流设计器和源代码,可以嵌入到IE中使用,比较适合用.net平台开发工作流的朋友使用.........
  • 工作流Web流程设计器及表单设计器Web 流程设计器自定义表单-集成到流程中 Web 流程设计器 Activi6 提供了Web版BPMN 流程设计器。 Camunda和Flowable 都提供了,独立的Web流程设计器。有时项目需要,需要把这些设计器...
  • 开源工作流引擎(含流程设计器

    千次阅读 2021-04-09 16:11:39
    工作流引擎 源码 该流程引擎完全开源免费,致力于打造与平台组织架构无关、高扩展的工作流引擎。 通过自定义用户选择和条件处理器实现既有业务的组织架构关联和审批过程处理。 使用介绍 直接从git下载源码编译...
  • 在网上收集的采用flash-flex开发的两个流程设计器的原型及其源代码,属于半成品,适合FLASH开发者学习使用工作流设计器开发
  • Silverlight全开源工作流设计器

    千次阅读 2013-12-12 20:47:28
    没有遵循各种现有的工作流设计标准(如WFMC或WSFL),也没有与其他工作流通用性的接口规范。这里体现更多的是作者对工作流的使用思想,及工作流在日常办公中的实用性。所以,如果你是个很遵循各种标准和规范的人,...
  • bpmn-js + vue实现工作流设计器

    万次阅读 2020-04-24 21:30:27
    此文只为记录一下自己学习bpmn-js和使用bpmn-js实现工作流设计器的过程。 bpmn-js初体验 安装vue 新版的vue-cli有图形化工具,新版本的Vue CLI 的包名称由 vue-cli 改成了 @vue/cli。如果你已经...
  • 基于java和javascript的工作流设计器xiorkflow(含源代码)
  • 工作流引擎】Flowable流程设计器 基于bpmnjs开发的vue组件设计器介绍集成设计器 设计器介绍 bpmn.js官网 bpmn.js 是一个BPMN2.0渲染工具包和web建模器, 使得画流程图的功能在前端来完成. 集成设计器 本文集成现成...
  • 工作流管理系统中,引擎的所有的活动,驱动,和流转,都是以流程定义为基础而展开的。流程定义文件是流程能运行的先决条件,同时流程定义文件又是工作流引擎的设计基础,引擎必须要能生成,解释
  • 我们先来看看工作流引擎和Activity? 工作流引擎 所谓工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色、分工和条件的不同决定信息传递路由、内容等级等核心解决方案。工作...
  • 工作流引擎的设计与实现

    千次阅读 2018-10-28 19:48:40
    工作流引擎的设计与实现 工作流引擎的作用是解释流程定义,创建、执行和控制流程实例。对于本项目研究来讲,工作流引擎要接受外部请求事件,并按照业务过程的需要执行响应动作。具体来讲,包括接受工作人员启动业务...
  • activiti-modeler 工作流设计器代码分析

    万次阅读 2016-02-15 14:40:21
    用了一段时间的activiti5工作流,今天做个设计器的分析。新版的使用了bootstrap和angularJS做了封装。先从文件的说明开始。 1.文件夹说明: configuration:设计器的属性配置及工具栏和后台交互(重点) css:样式...
  • } } 配置参考 # 工作流 spring: activiti: check-process-definitions: false db-identity-used: true # 自动生成Activiti相关表 第一次生成后建议关闭提高运行速度 database-schema-update: true # 保存历史数据...
  • 表单式工作流功能模块设计方案

    千次阅读 2021-08-26 13:48:41
    最近一个项目中需要独自设计一个表单式工作流功能模块,在此将整个功能模块的设计思路分享出来。
  • 1、项目下载地址:链接: https://pan.baidu.com/s/1Ruf-DvKih1eet-wLJgZLYw 提取码: cvtx 2、项目导入之后的结构 3、... 8、到此为止activiti工作流activiti-explorer在线设计器的整合就介绍完了,希望能帮助到大家!
  • 工作流简介 我们先来描述一个在工作中经常用到的一个流程:请假 员工张三请假一天 主管王五批准 员工李四请假一天 主管王五不批准 员工李四请假三天 主管王五批准经理赵六批准 工作流(Workflow)的概念起源于生产...
  • 这里安装activiti的在线流程设计器的安装。  jbpm4的开发成员tom离开了jboss后,加入afresco公司,并且才有activiti5的项目,这开源项目继承了jbpm4的所有优点,同时将其发扬光大,相对jbpm4,activiti5改进了储...
  • 基于Silverlight4开发的工作流设计器

    千次阅读 2010-07-17 18:59:00
    好久没有更新案例了,下面上传一款基于Silverlight4开发的工作流设计器,这个工作流设计器适用于办公自动化系统和相关MIS系统,本工作流设计器集合了两大系统UI特色,下面请大家看一下界面效果。 Silverlight工作流...
  • 几种开源工作流引擎的简单比较

    万次阅读 2019-06-15 10:45:52
    目前开源工作流引擎用的最多的是jbpm , 各种特性都不错, 文档也比较多, 下面只简单列举一下 其他几种工作流引擎的特性。 Apache ODE Enhydra Shark jflow ...
  • web工作流设计-myflow

    热门讨论 2016-08-16 09:43:20
    web工作流设计-myflow:使用myflow.js进行设计工作流,基于web页面进行操作,里边包含删除按钮功能。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 477,573
精华内容 191,029
关键字:

工作流设计器

友情链接: JointWMF_mex.rar