精华内容
下载资源
问答
  • 2018-02-24 15:24:10

    Java开源工作流对比

    工作流(Workflow)

    1、业务过程的部分或整体在计算机应用环境下的自动化;

    2、是对工作流程及其各步骤之间业务规则的抽象、概括描述;

    3、工作流主要解决的问题是:为了实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务;

    4、工作流的概念起源于生产组织和办公自动化领域,是针对日常工作中具有固定程序活动而提出的一个概念;目的是通过将工作分解成定义良好的任务或角色,按照一定规则和过程来执行这些任务并对其进行监控;达到提高工作效率、更好的控制过程、增强对客户的服务、有效管理业务流程等目的;

    5、Georgakopoulos给出的工作流定义是:工作流是将一组任务组织起来一完成某个经营过程:定义了任务的出发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与系统软件协作完成;

    6、工作流的特点:(1)极大地提高了工作效率;(2)本身只是业务逻辑决定的一个事务流程;(3)一旦启动,自动流转;(4)具有事务的特征;(5)流程节点灵活可配;(6)符合面向对象的思想

    7、工作流的分类:(1)顺序工作流;(2)流程图工作流;(3)状态机工作流

    8、工作流就是:在一个工作群组中,为了达成某一个共同目的而需要多人协力以循序或平行工作的形式来共同完成的任务

    关于工作流的几个名词解释:

    任务

    泛指各种事务上所必需执行的流程性工作

    循序或平行工作

    工作的流动性是一个人接着一个人执行,或同时由多个人分开执行,或是上述两类工作合并之后的混合型工作

    多人

    若是单人就可以完成的工作,则不能归类为流程工作;凡是一件工作必须由两个人或更多人来协力完成的工作才能称之为流程工作;

    共同目的

    多人参与的流程性工作,必须是以完成共同目的为前提;如果一群人是分别针对不同的专案来执行个别的工作,并不算构成一个工作流程;

     

    9、 链接:   从程序员的角度来看为什么我们需要工作流

    10、 链接:   工作流简介及其6种常用的工作流引擎

     

    J2EE常用工作流比较

    引用链接

    Shark(EnhydraShark)

    Osworkflow opensymphony

    JBPM(JBoss JBPM)

    Java Business Process Management

    工作流描述语言

    XPDL:WFMC制定的描述业务流程控制流的XML格式规范,格式复杂,与具体语言无关,不灵活

    1、XML:流程定义格式简单,使用灵活

    2、基于有限状态机模型

    1、JPdl:JBoss jBPM Processdefinition language,一个商务流程被看作是一个UML状态图。

    2、基于UML的状态图和活动图来定义流程,已加入JBOSS大家庭,市场前景看好。

    是否开源,开源协议

    一个可扩展的工作流引擎框架。现在不再开源,用于商业用途

    开源的嵌入式工作流引擎 ,它的使用遵循 Apache License

    一种基于J2EE的轻量级工作流管理系统,它的使用遵循 Apache License

    相关开源项目

    Jawe

    Osworkflow for .net

     

    支持是否全面

    流程定制工具JAWE

    1带有一个简陋的流程定制工具,但十分简陋且常有错误 

    2、需要专业技术用户使用

    1、Jbpm3的图形化流程定义嵌入到jbosseclipse IDE

    2、流程定制方式更接近用户的理解

    拓展性

    体系和功能最为复杂,秉承“模块化”的思想,比较容易扩展

    有良好的扩展性,绝对的灵活(同时也增加了开发者的工作量,需要自己写一些必要的函数)

    最适宜扩展(Jbpm的过程模式支持是比较固定的,但是其对任务的中action扩展是很的灵活)最适宜被商业化应用

    持久化

    Shark的持久层采用DODS来实现

    1、它提供的持久化API:EJB,Hibernate,JDBC等 

    2、Osworkflow 可以与Spring集成。

    利用hibernate持久化

    小结

          Shark是体系和功能最为复杂的代表。它是一款遵循WfMC的XPDL标准开源工作流引擎,并且同时遵循OMG组织的WorkflowManagement Facility规范。XPDL的两个最重要的概念是Process和Activity。XPDL中的Activity是基于UML1.x中的活动图的概念。活动图天生的适于工作流程建模,它相对于状态图的一个最大的优点是容易做并发线程的分叉控制,这些并发线程可以同时执行也可以顺序执行;它还有一个优点是有泳道的概念,可以控制工作流引擎中的任务的产生。

        在所有开源工作流引擎中,Shark的体系最为完备和复杂。其一直秉承着“模块化”的思想,所以比较容易扩展。但是自从被Together公司收购后,Shark的商业化色彩已经越来越浓,改称为Together Workflow Server,并仅以Community Edition的形式提供了部分开源代码供参考。

         OSWorkflow是最轻量型的代表,也是一款非常灵活和低级别定位的工作流引擎的实现框架。低级别定位的意思是说,它不是定位在解决流程模型对象和运转场景,而是提供一套可维护调度的机制,供开发人员自主扩展。这个维护流程调度机制OSWorkflow选择的是基于行为(Action)的FSM理论,所以OSWorkflow更像是一个复杂而灵活的有限状态调度机。

        Osworkflow有个重要概念是State,State是由step和status联合表达的,一个State就是一个step中的某个status;而state的转换由action来驱动,类似状态图中的event,因为一个event对应一个action

        OSWorkflow在国内项目应用得较多,很多国内的简易审批流程项目都是基于其引擎二次开发而来。这主要是由于OSWorkflow是基于Action驱动的,而国内的客户也很容易接受这样的操作习惯。但OSWorkflow所依赖的FSM模型对于分支、聚合、子流程的支持度很低,这一点在实施过程中需要注意。

         Jbpm结合应用了状态图+活动图+PetriNet的知识,而且这里的活动图还是UML2.0版的。UML2.0的活动图中,节点不叫活动(Activity)而叫动作(action),活动成了一个高层次的概念,它包含一个动作序列。一个活动图展现一系列的动作,这些动作组成了活动。Jbpm把action也改名了,称为state。Jbpm使用的状态图的概念有transition/event等。Jbpm来内部实现中还采用了PetriNet的概念,如token,signal等,jBpm对Token的应用很有特色,巧妙地利用Parent-Child Token的机制处理分支、父子流程等复杂应用场景。

        jBpm是最适合扩展的代表,是在所有开源引擎中最适宜被商业化应用的一款。首先其流程建模模型是基于Activity Diagram(活动图)的,并在引擎构建上融入了FSM和PetriNet思想,所以其内核和根基比较牢固扎实。其次,自从被JBoss收购后,其3.x系列的结构更加趋于微内核,Plug-in思想也更加深入。其同时还提供了对BPEL扩展,存储支持JBossHibernate实现,集成了JBoss seam,规则引擎准备采用JBossrules,并准备集成JBoss Messaging。这样,不论从内核和外围应用,jBpm都具有了强劲的动力。

     

    OSWorkFlowJBPM开发工作流异同

    引用链接

    JPBM

    OSWorkFlow

    编写流程描述文件方式

          BPM是通过图形化的编辑工具(JBPM自带的Eclipse插件)来编写业务流程如开始状态,结束状态,以及状态之间的转换,之后会自动生成XML文件,但具体每一步相关的细节操作还是要手工配置(如该节点是属于什么类型节点,相关的函数,要不要较验)。

          OSWorkFlow则要通过手工写XML文件来定义流程文件,而且它涉及的标签元素比较多,其用户手册上也建议实施人员不要去修改流程,否则流程很容易破坏。

    工作流信息保存方式

          JBPM是将流程信息直接保存到数据库,可以用任何方式对数据库的操作,这样就要引入保存工作流信息的相关表。

          OSWorkFlow是既可以保存在XML文件里,也可以保存在数据库中,保存在数据库中时需要配置propertySet.xml文件,比较复杂,而且它不是完全支持hibernate(如引入osuser来作权限分析时),此时要自定义操作数据库的方式。

    与系统集成

          JBPM集成比较容易,加入Spring支持包spring-modules-jbpm31.jar,该包加入了Spring对JBPM的包装,所有的集成都是在此包基础之上。之后还要配置sessionFactoryForJbpm ,jbpmConfiguration,jbpmTemplate, jbpmDao。

          OSWorkFlow跟Spring集成须要如下所需组件:

        1)SpringHibernateWorkflowStore,让工作流程实例(如果需要的话)分享当前事务。      2) SpringTypeResolver,允许 OSWorkflow 从 Spring ApplicationContext中获得业务逻辑组件(conditions, functions等等)。      3)SpringConfiguration, 这是一个 Workflow Configuration 接口的实现类, 它包含指向 store和 factory的引用,这样可以在 spring 中注射或者连接。      4) SpringWorkflowFactory,这是一个 XMLWorkflowFactory 封装包,它可以允许从容器中注入 configuration,从而不再从其它的 XML 配置文件中读取它们。

        如果OSWorkFlow引入osuser.xml来设置权限,则不支持Hibernate3,因为osuser是比较独立的模块,目前还没有支持hibernate3,所以跟Spring集成时要修改配置文件applicationContext-hibernate3.xml

    重点难点

          JPDL语言的学习,主要是用来编写流程文件;理解3个接口:动作处理接口(提供影响流程执行的方法,在event和action元素中被回调),判定处理接口(用在decision判定节点中,提供方法来判定节点的转向),委派处理接口(用在task的委派子元素assignment中,用来指定将任务分配给指定的人员或角色)。

          工作流文件定义的元素,主要用来编写工作流;OSWorkFlow.xml及propertySet.xml文件的配置;InputMap接口、Workflow 接口及WorkflowDescriptor接口。

     

    开发步骤

          通过图形编辑工具编写业务流程――>生成xml流程文件――>修改流程文件(判断节点是任务节点、普通节点还是判定节点,之后作相应修改)――>导入保存流程信息的数据库表――>部署流程定义文件(将流程文件中的内容放到数据库中)――>创建流程实例――>调用JBPM提供的signal方法执行流程流转

          手工编写工作流文件——>配置OSWorkflow.xml――>配置WorkStore——>配置propertySet.xml,osUser.xml文件(如果需要用户权限)――>调用AbatractWorkflow类加载OSWorkflow.xml(它会自动加载工作流文件及数据库配置文件)――>调用WorkFlow接口方法(initial()方法,transitionWorkflow()方法,doAction()方法)

    流转方法

          先确定节点是什么节点,如果是普通的Node节点,则是流程执行到此节点不会中断,继续执行;如果是state节点,则流程执行到此节点会中断,直到系统外的参与者发会命令才能继续执行,即调用signal()或end()方法;如果节点是Task-node,则会根据task任务列表的任务有没全部执行完来决定流转。

          一个工作流包含多个步骤。每一个步骤都有一个当前状态(例如, Queued, Underway, or Finished)。每一个步骤中都有一个或者多个动作可以被执行。每一个动作都可以设置执行条件(condition),也可以设置执行函数(pre-function or post-function)。动作产生结果(result),导致工作流的状态和当前步骤发生改变

    流程定义文件主要元素

          一个JBPM的流程定义XML文件中包含一个< process-definition>元素,而一个< process-definition>元素又包含零个或一个< description>元素,零个或多个的< swimlane>元素,一个< start-state>元素,零个或多个的< state>元素或< decision>元素或< fork>元素或< join>元素,以及零个或多个的< action>元素,零个或多个<task-node>和<node>元素,一个< end-state>元素等等。此外,< process definition>元素有一个标示符,以“name”属性来表示,这个属性必须存在,用来表示该流程的名称。

    步骤(step)、条件(conditions)、循环(loops)、分支(spilts)、合并(joins)、角色(roles)、函数(function)

     

    其他

          JBPM的Scheduler可以实现在JBPM流程中定时触发某一动作。在流程中JPBM提供了timer节点供我们使用,通过这个节点我们可以实现节点动作的定时触发。

     

     

     

    深入了解jBPM5Activiti之间的差异对比

    引用链接

    Activiti

    JBPM5

    相似之处

    1、都是BPMN2过程建模和执行环境。

    2、都是BPM系统(符合BPM规范)。

    3、都是开源项目-遵循ASL协议( Apache的 软件许可)。

    4、都源自JBoss(Activiti5是jBPM4的衍生,jBPM5则基于Drools Flow)。 

    5、都很成熟,从无到有,双方开始约始于2年半前。 都有对人工任务的生命周期管理。 

    6、Activiti5和jBPM5唯一的区别是jBPM5基于WebService - HumanTask标准来描述人工任务和管理生命周期。 如有兴趣了解这方面的标准及其优点,可参阅WS - HT规范介绍 。

    7、 都使用了不同风格的 Oryx 流程编辑器对BPMN2建模。 jBPM5采用的是 Intalio 维护的开源项目分支。 Activiti5则使用了Signavio维护的分支。

    数据库持久层ORM

    MyBatis3

    Hibernate3

    持久化标准

    JPA规范

    事务管理

    MyBatis机制/Spring事务控制

    Bitronix,基于JTA事务管理

    数据库连接方式

    Jdbc/DataSource

    Jdbc/DataSource

    支持数据库

    Oracle、SQL Server、MySQL等多数数据库

    Oracle、SQL Server、MySQL等多数数据库

    设计模式

    Command模式、观察者模式等

     

    内部服务通讯

    Service间通过API调用

    基于Apache Mina异步通讯

    集成接口

    SOAP、Mule、RESTful

    消息通讯

    支持的流程格式

    BPMN2、xPDL、jPDL等

    目前仅只支持BPMN2 xml

    引擎核心

    PVM(流程虚拟机)

    Drools

    技术前身

    jBPM3、jBPM4

    Drools Flow

    所属公司

    Alfresco

    jBoss.org

    集成

          Activiti5使用Spring进行引擎配置以及各个Bean的管理,综合使用IoC和AOP技术,使用CXF作为Web Services实现的基础,使用MyBatis进行底层数据库ORM的管理,预先提供Bundle化包能较容易的与OSGi进行集成,通过与Mule ESB的集成和对外部服务(Web Service、RESTful等)的接口可以构建全面的SOA应用;

          jBPM5使用jBoss.org社区的大多数组件,以Drools Flow为核心组件作为流程引擎的核心构成,以Hibernate作为数据持久化ORM实现,采用基于JPA/JTA的可插拔的持久化和事务控制规范,使用Guvnor作为流程管理仓库,能够与Seam、Spring、OSGi等集成。

     

    优劣对比

          从技术组成来看,Activiti最大的优势是采用了PVM(流程虚拟机),支持除了BPMN2.0规范之外的流程格式,与外部服务有良好的集成能力,延续了jBPM3、jBPM4良好的社区支持,服务接口清晰,链式API更为优雅;Activiti上手比较快,界面也比较简洁、直观

          劣势是持久化层没有遵循JPA规范。

          jBPM最大的优势是采用了Apache Mina异步通信技术,采用JPA/JTA持久化方面的标准,以功能齐全的Guvnor作为流程仓库,有RedHat(jBoss.org被红帽收购)的专业化支持;

          但其劣势也很明显,对自身技术依赖过紧且目前仅支持BPMN2。

     

     

     

     

    更多相关内容
  • flow, 在 go ( golang ) 中,一个小型的开源工作流引擎 状态flow 正逐步向发布,但还无法使用 ! flowflow 是一个小型开源的( Apache 2 -licensed ) 工作流引擎,它在。什么是 flow作为工作流引擎,flow 打算帮助...
  • 超级有用。
  • Snaker开源工作流研究001——简介-附件资源
  • Java开源工作流引擎snaker1.01,非maven版本
  • 什么是工作流工作流,是指“业务​过程的部分或整体在​计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。 在计算机中,工作流属于计算机支持的协同工作(CSCW)的一部分...

    什么是工作流?

    工作流,是指“业务​过程的部分或整体在​计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。

    在计算机中,工作流属于计算机支持的协同工作(CSCW)的一部分。

    工作流是复杂版本的状态机

    就好比一般的请假流程,小明会先提出请假申请,然后由Leader审批或者Manager进行审批,直至审批通过或者拒接。

    如果让我们实现请假单状态的切换,那么用一个字段来标识就可以了。

    然而对于复杂的状态或者状态维度增加且状态流转的条件极为复杂,可能单纯用字段记录状态的实现方式就会不那么理想。

    工作流解决的痛点在于,解除业务宏观流程和微观逻辑的耦合,让熟悉宏观业务流程的人去制定整套流转逻辑,而让专业的人只需要关心他们应当关心的流程节点,就好比大家要一起修建一座超级体育场,路人甲只需要关心他身边的这一堆砖是怎么堆砌而非整座建筑。

    Java工作流开源框架

    目前主流的开源框架就是Activiti/Camunda/Flowable,它们都源自于jbpm。

    先是有了jbpm4,随后出来了一个Activiti5,Activiti5经过一段时间的发展,核心人员出现分歧,又分出来了一个Camunda。

    activiti5发展了4年左右,紧接着就出现了Flowable。

    下面我们就来分别简单认识下这三兄弟

    一、简介

    Activiti

    Activiti 是一个针对业务人员、开发人员和系统管理员的轻量级工作流和业务流程管理 (BPM) 平台。 它的核心是一个用于 Java 的超快速和坚如磐石的 BPMN 2 流程引擎。 它是开源的,并在 Apache 许可下分发。 Activiti 可以在任何 Java 应用程序、服务器、集群或云中运行。 它与 Spring 完美集成,非常轻量级,基于简单的概念。

    Activiti Cloud 现在是新一代的业务自动化平台,提供一组旨在在分布式基础架构上运行的云原生构建块。

    github地址:https://github.com/Activiti/Activiti

    主要服务类:

    调用方式:

    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    RuntimeService runtimeService = processEngine.getRuntimeService(); 
    RepositoryService repositoryService = processEngine.getRepositoryService(); 
    TaskService taskService = processEngine.getTaskService(); 
    ManagementService managementService = processEngine.getManagementService(); 
    IdentityService identityService = processEngine.getIdentityService(); 
    HistoryService historyService = processEngine.getHistoryService(); 
    FormService formService = processEngine.getFormService(); 
    DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService();

    设计器

    activiti6 官方提供有Web设计器(Modeler设计器)。部署运行activiti-modeler模块即可使用.

    activiti7 推荐使用bpmn.io提供的bpmn-js设计器,在线使用地址:https://demo.bpmn.io/new

    Flowable

    Flowable是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义的流程实例,进行查询,访问运行中或历史的流程实例与相关数据

    github地址:https://github.com/flowable/flowable-engine

    主要服务类:flowable服务类和activiti类似,没有太大的变化

    设计器:eclipse插件,支持5.x版本,不支持6.x版本中新增加的节点和属性,online web设计器基于AngularJs1.x版本开发, 如下:

    兼容性:

    • Alfresco Activiti5
    • Flowable5

    Camunda

    Camunda 是一个基于 Java 的框架,支持用于工作流和流程自动化的 BPMN、用于案例管理的 CMMN 和用于业务决策管理的 DMN。

    github地址:https://github.com/camunda/camunda-bpm-platform

    工作原理:

    设计器

    兼容性:

    • Active BPEL
    • Alfresco Activiti
    • Appian BPM
    • Bonitasoft
    • JBoss jBPM
    • IBM WPS / IBM BPM / IBM MQ Workflow / IBM Lotus Notes
    • Oracle BPM
    • Software AG Webmethods
    • Pega BPM

    二、支持DB对比

    三、功能对比

    • Flowable VS Activiti

    小结:

    Flowable的核心思想更像是在做一个多彩的工具,它在工作流的基础功能上,提供了很多其他的扩展,使用者可以随心所欲地把Flowable打造成自己想要的样子

    Activiti7着重于处理bpmn,它的方向在于云,他的设计会尽量像例如Spring Cloud、Docker、K8S靠拢。

    Flowable在功能上比Activiti更加完善,基础轮子也更加全面。所以在开发契合国内特色的工作流系统中,Flowable是更佳的选择。

    目前两者陆续都开始了商业化,同时也都支持了分布式和云端部署。

    • Flowable VS Camunda

    小结:

    Flowable从6.4.1版本开始大力发展其商业版产品,开源版本也不在及时维护。部分功能已经不再开源版发布,比如表单生成器(表单引擎)、历史数据同步至其他数据源、es等等。

    dmn目前是个半成品,没有Camunda稳定和好用,对于dmn规范支持薄弱。部分商业版的组件被商业化,因此开源版不再维护。Mongdb目前也放到商业产品中了,开源版的几乎不能用。

    在高并发场景下,Camunda性能比Flowable要好些,报错的几率也低很多。

    四、社区活跃度对比

    Flowable

    Activiti

    Camunda

    小结:从github活跃度来看, activiti和flowable比较相似,camunda最不活跃(可能是过去国人关注的少,中文文档也欠缺)。

    总结:

    在微服务、云计算、服务编排、LCDP等大环境下,camunda的前景优势会慢慢体现出来,作为下一代的工作流引擎,也会逐渐引起更多人的关注。

    Activiti和Flowable作为传统的工作流引擎,其设计思想和理念还是很值得CRUD boy们去学习研究下的。

    参考链接:

    Camunda Platform documentation | docs.camunda.org

    https://github.com/camunda/camunda-bpm-platform

    Activiti User Guide

    Introduction - Activiti & Activiti Cloud Developers Guide

    https://github.com/Activiti/Activiti

    Camunda/Flowable/Activiti技术发展史/盘古BPM框架对比最新版_分享牛-CSDN博客_camunda flowable 对比

    Flowable Enterprise Documentation

    https://github.com/flowable/flowable-engine

    展开全文
  • 开源工作流系统 JWFD

    2022-05-14 12:04:40
    开源工作流系统 JWFD
  • 计算机-后端-开源工作流引擎Shark的架构分析及改进.pdf
  • 我搜索了开源 javascript 工作流引擎,其中大多数就像玩具一样。 我希望这可以是严谨的。 否则我更喜欢直接评估一些代码。 我写这个 jsWorkFlow 支持客户端和节点。 我希望 jsWorkFlow 可以成为 javascript MDD 的...
  • 开源工作流引擎(含流程设计器)

    千次阅读 2021-04-09 16:11:39
    该流程引擎完全开源免费,致力于打造与平台组织架构无关、高扩展的工作流引擎。 通过自定义用户选择器和条件处理器实现既有业务的组织架构关联和审批过程处理。 使用介绍 直接从git下载源码编译。 建议以分布式子...

    工作流引擎

    源码

    该流程引擎完全开源免费,致力于打造与平台组织架构无关、高扩展的工作流引擎。
    通过自定义用户选择器和条件处理器实现既有业务的组织架构关联和审批过程处理。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    使用介绍

    直接从git下载源码编译。
    建议以分布式子系统或者微服务形式部署。
    项目自带流程编辑器,以及 简单的流程模拟功能.

    后台结构介绍

    在这里插入图片描述

    WorkFlowCore

    是整个引擎的核心,核心通过抽象,允许 部分功能通过外部扩展

    WorkFlowCore.Framework

    是抽象的其中一个扩展,默认实现了以json文件为持久化的仓储 Repository和两个事件处理demo

    WorkFlowCore.Host

    是web服务的启动项目,在这里写接口代码

    WorkFlowCore.Selector

    是抽象的其中一个扩展,默认实现两个 用户选择器和条件处理器,

    WorkFlowCore.Test

    单元测试

    需要自己实现的内容:

    Repository

    框架默认实现的只是一个以json文件为持久化的仓储,实际使用应该实现自己的持久化程序,实现 IBasicRepository 接口,将程序注册到容器服务中。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    实现自己的用户选择器

    不同项目的组织架构不同,这也是为什么要写这个框架,就是要把用户的选择从框架中抽取出来。
    实现自定义用户选择器需要实现 IUserSelector 接口:
    GetSelections 方法返回用户的选项类型,可以返回一些类型(比如角色,职位等组织架构信息)也可以直接返回用户列表

    GetUsers 方法是在流程审批过程中,结合流程的各项参数去解析获取实际的用户数据,这里返回的是根据条件匹配到的用户列表。

    在这里插入图片描述

    自己实现的选择器需要注册到容器服务中
    在这里插入图片描述

    实现自己的条件处理器

    一般的条件处理使用默认的条件处理可以完成,但是需要复杂的条件处理就需要自定义实现。比如需要根据表单中某个值去获取其它信息进行判断,就需要自己解析。
    具体解析要看表单数据格式,具体问题具体分析。

    要自定义 条件处理器 需要实现 ICondition 接口,该接口只有一个方法 CanAccept,结合流程数据判断某个路径是否能走。

    在这里插入图片描述

    注册选择器到容器服务中
    在这里插入图片描述

    事件扩展

    目前系统提供 流程推送事件和流程结束事件,需要实现更多扩展功能比如通知处理流程,流程结束后推送消息之类的需求,需要自己实现
    ISendTaskEventHandler 和 ITaskFinishedEventHandler

    实现的事件扩展需要注册到服务中

    在这里插入图片描述

    展开全文
  • 开源工作流,BPM,JFlow安装配置教程

    热门讨论 2015-07-11 10:28:07
    开源工作流、BPM软件,JFlow的安装配置教程,为您学习jflow中,提供一些配置说明,方便您的安装与学习
  • NULL 博文链接:https://comsci.iteye.com/blog/2145362
  • Java开源工作流引擎.pdf
  • imixs-workflow, 面向业务应用的开源工作流技术 imixs工作流imixs工作流是一种基于Java企业架构( JEE )的开源工作流引擎。 在imixs工作流项目中,为构建以灵活和健壮的框架为中心的工作流应用。 业务逻辑可以使用...
  • .NET 5 开源工作流框架elsa技术研究

    千次阅读 2021-01-02 10:01:50
    编者注:工作流框架 elsa 是.NET基金会下面的开源项目,2.0版本即将在3月份发布,目前正在紧锣密鼓的开发之中,2020年2月份我也介绍过推荐一个很棒的开源工作流elsa-cor...

    编者注: 工作流框架 elsa 是.NET基金会下面的开源项目,2.0版本即将在3月份发布,目前正在紧锣密鼓的开发之中,2020年2月份我也介绍过推荐一个很棒的开源工作流elsa-core ,今天给大家推荐MVP 周国庆写的这篇详细文章。

    今天假期第一天,研究了.NET 5开源工作流框架elsa,现在分享给大家。

    一、框架简介

    elsa是一个开源的.NET Standard 工作流框架,官方网站:https://elsa-workflows.github.io/elsa-core/

    以下列出了Elsa的一些关键功能:

    • 小巧,简单,快速。该库非常精简易用,同时快速执行并且易于通过自定义活动进行扩展。

    • 调用任意工作流程,就好像它们是我应用程序的功能一样。

    • 触发事件,使相应的工作流程基于该事件自动启动/恢复。

    • 支持长期运行的工作流程。当工作流程执行并遇到需要进行例如用户输入后,工作流将停止,保留并耗尽内存,直到可以恢复为止。这可能是几秒钟后,几分钟,几小时,几天甚至几年的时间。

    • 将工作流与特定于应用程序的数据相关联。这是长时间运行的工作流程的关键要求。

    • 以基于文件的格式存储工作流,因此我可以使其成为源代码管理的一部分。

    • 当我不想让工作流成为源代码管理的一部分时,可以将其存储在数据库中。

    • 基于Web版本的流程设计器。无论是将工作流存储在文件系统还是数据库中,还是将设计器在线托管还是仅在本地计算机上托管,都需要能够在线编辑工作流。

    • 使用表达式配置工作流程活动。通常,工作流处理的信息本质上是动态的,活动需要一种与该信息进行交互的方式。工作流表达式支持这类场景。

    • 可通过特定于应用程序的活动,支持自定义存储和脚本引擎进行扩展。

    • 调用其他工作流程。这允许从各种工作流程中调用可重用的应用程序逻辑。就像从C#调用通用功能一样。

    • 查看和分析执行的工作流程实例。查看工作流采用的路径,运行时状态,发生故障的位置并补偿发生故障的工作流。

    • 支持Web的工作流设计器嵌入我自己的仪表板应用程序中。可以选择创建一个运行所有应用程序逻辑的工作流主机,还可以选择在单个微服务中托管工作流运行时(允许进行编排和编排)。

    • 关注点分离:工作流核心库,运行时和设计器设计上完全分离。即当工作流宿主不应该依赖于基于Web的设计器时。例如,这允许您实施基于桌面的设计器,或者根本不使用设计器,而仅使用YAML文件。最后,主机只需要工作流程定义和对持久性存储的访问。

    • 支持本地或云端管理,因为Elsa只是您从应用程序引用的一组NuGet软件包。

    二、产品主要功能

       1. 可视化的工作流编辑器

        Elsa带有一个独立的,可重复使用的HTML5工作流设计器Web组件,您可以将其嵌入自己的HTML网页中。设计器完全在客户端运行,并具有丰富的JavaScript API,该API可让您定义自定义插件以扩展其功能。

        

       2. Dashboard 看板

       Elsa看板使您能够定义工作流程定义并检查执行的工作流程。要设计工作流程,只需右键单击画布,从活动选择器中选择一个活动,对其进行配置,然后拖动多个活动之间的连接以创建从简单的短期运行的工作流程到高级的长期运行的工作流程的流程。

      3. 支持长期和短期的工作流模式

       Elsa提供了短期和长期工作流程。可以理解为简单的和复杂的流程设计

       例如,当您需要实现业务规则引擎时,短时运行的工作流程非常有用,在该流程中,如果工作流程是一个接收输入并返回结果的函数,则可以从应用程序中调用它。

       长时间运行的工作流能够轻松地实现涉及人和机器的复杂过程。长期运行过程的典型示例是文档批准工作流,其中某些文档的审阅过程涉及多方。这样的工作流程可能涉及计时器,电子邮件,提醒,HTTP请求,用户操作等。

     4. 丰富的工作流活动

         基本元语:是低级的技术活动。

    • SetVariable

          控制流:控制流活动提供对过程的控制。例如,Fork活动会将工作流程分为两个或多个执行分支。

    • ForEach

    • Fork

    • IfElse

    • Join

    • Switch

    • While

         工作流活动:活动代表工作流程中的单个步骤。开箱即用的Elsa NuGet套件套件为您提供了一系列不错的活动,主要包含以下工作流活动

         工作流程:工作流类别中的活动与工作流级别的功能相关,例如相关性和信令。

    • Correlate

    • Finish

    • Signaled

    • Start

    • TriggerSignal

    • TriggerWorkflow

          控制台活动:在实施带有工作流的基于控制台的应用程序时,控制台活动非常有用。

    • ReadLine

    • WriteLine

          DropBox活动:Dropbox活动可帮助实现与Dropbox API集成。

    • SaveToDropbox

          电子邮件活动:电子邮件活动允许您使用SMTP发送电子邮件。

    • SendEmail

           HTTP活动:能够实现发送传出HTTP请求并响应传入HTTP请求的工作流,非常适合与基于外部Web的API集成。

    • ReceiveHttpRequest

    • SendHttpRequest

    • WriteHttpResponse

          定时器活动:定时器活动可以基于某些基于时间的事件(例如CRON表达式,常规计时器)或在将来的特定时间触发工作流。

    • CronEvent

    • InstantEvent

    • TimerEvent

           User Task:用户任务事件是用户自定义配置的活动,用户可以执行一系列可能的操作。每个动作对应于活动的结果。用户执行任何这些操作后,工作流将沿适当的路径恢复。这里的想法是您的应用程序将使用选定的操作触发工作流。

              例如,这可以表示为一组简单的按钮。由您的应用程序决定如何呈现这些操作。

        5. 版本控制

          每个工作流程定义都是版本化的。发布工作流程的新版本时,其版本号会增加。现有工作流程实例仍将使用工作流程定义的先前版本,但新工作流程将使用最新版本。   

        6. 持久化支持

    • CosmosDB (DocumentDB)

    • Entity Framework Core:各类关系型数据库,支持SQLServer

    • Memory:Non-persistent, use only for tests and/or short-lived workflows.

    • MongoDB

    • YesSQL

        7. 表达式

                 工作流活动可以使用表达式,这些表达式可以炸运行时执行,使用表达式可以引用其他活动产生的值。Elsa支持以下三种类似的表达式:

                 文字表达式:

                 文字表达式不是一个真正的解释,当你需要设置,无需运行时计算活动属性的值才会被使用。

                 JavaScript表达式:

                 当你需要计算一些数值或读取工作流程中的过程值时通常使用JavaScript表达式。

                 液体表达式(这个名字很奇怪,目前还在研究中)

                 当你需要创建一个HTTP请求,HTTP响应的计算通常使用流式表达式,或例如其中主体被标记使用液体发送电子邮件时。

        三、产品扩展能力

    Elsa的最重要和最强大的功能之一就是其可扩展性。

    1. 工作流活动
    许多过程是特定业务领域的,并且能够使用代表业务领域的特定语言的一组活动来创建工作流是一项强大的功能。

    用特定领域的活动扩展Elsa非常简单。只需实现一个继承自C#的C#类,Activity并在服务容器中注册它,就可以使用了。活动将在工作流设计器中自动变为可用,并且默认情况下其所有公共属性都是可编辑的。

    2. 持久化扩展
    Elsa附带了许多持久性提供程序,例如内存,EF Core,MongoDB,YesSQL和CosmosDB。尽管这些提供程序应满足最常见的需求,但当然不限于这些。实现IWorkflowDefinitionStore为工作流定义提供定制存储,并实现IWorkflowInstanceStore为工作流实例提供定制存储。请注意,用户可以混合和匹配,这意味着您可以例如将EntityFrameworkCoreWorkflowDefinitionStorefor用于工作流定义``。

    3. JavaScript函数
    JavaScript表达式附带了一些您可能经常使用的有用的JavaScript函数。例如,它允许您从工作流程中读取变量并引用活动输出值。但是,如果您发现自己需要其他功能,则可以很容易地从您自己的应用程序中扩展功能集。

    4. 液体表达式
    Liquid表达式还附带了一些可能经常使用的有用过滤器。例如,它允许您从工作流程中读取变量并引用活动输出值。但是,如果您发现自己需要其他功能,可以很容易地从您自己的应用程序中扩展过滤器集。

    5. 表达式解析执行
    也许JavaScript和Liquid还不够好,可以使用用C#,VBScript或Python编写表达式。只需实现您自己的版本IExpressionEvaluator,即可在服务容器中注册它,即可在任何活动中使用自定义评估程序语法。

      四、与Windows Workflow Foundation对比
        目前,微软已经停止更新发展 Windows Workflow Foundation,同时技术社区也在努力做WF to .NET Standard, 但是elsa有以下2点优势:

    • Elsa intrinsically supports triggering events that starts new workflows and resumes halted workflow instances in an easy to use manner. E.g. workflowHost.TriggerWorkflowAsync("HttpRequestTrigger");"will start and resume all workflows that either start with or are halted on the HttpRequestTrigger.Elsa has a web-based workflow designer. I once worked on a project for a customer that was building a huge SaaS platform.

    • One of the requirements was to provide a workflow engine and a web-based editor.Although there are commercial workflow libraries and editors out there, the business model required open-source software. We used WF and the re-hosted Workflow Designer. It worked, but it wasn't great.

      五、源代码编译构建

            项目源代码地址:https://github.com/elsa-workflows/elsa-core

            通过VS2019,使用克隆的方式,将代码克隆到本地编译构建。

            

           

       项目使用了Angular,在调试运行前,本地需要完成NPM包安装和JS 编译,所以本地需要先安装NodeJS

       切换到XX\src\dashboard\Elsa.Dashboard\Theme\argon-dashboard, 执行NPM Install       

       安装过程中,涉及到Python相关的组件和环境变量配置,所以可能会安装失败,出现异常:

             checking for Python executable "python2" in the PATH Can't find Python executable "python2.7", you can set the PYTHON env variable.

             此时,先删除delete node_modules文件夹, 然后执行: npm install --global windows-build-tools

             python组件安装完成后,执行以下命令:


    npm config set python C:\Users\zhougq\.windows-build-tools\python27\python.exe
      
    npm install

      

         NPM Install成功后,在目录src\dashboard\Elsa.Dashboard\Theme\argon-dashboard下执行以下指令:gulp build

         

           此时elsa Dashboard前端项目全部编译通过。

    接下来可以通过:

    VS:Elsa.Dashboard.Web 项目工程调式

    也可以在Elsa.Dashboard.Web文件件下运行dotnet run

    浏览器中直接访问:http://localhost:port/elsa/home,就可以使用了elsa了。

    展开全文
  • 几种开源工作流引擎的简单比较 目前开源工作流引擎用的最多的是jbpm , 各种特性都不错, 文档也比较多, 下面只简单列举一下 其他几种工作流引擎的特性 Apache ODE Enhydra Shark ...
  • java开源项目-使用Java开源工作流jBPM开发一个简单的
  • compileflow Process 引擎是淘宝工作流 TBBPM 引擎之一,是专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成 java 代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。 ...
  • 国内最有名的开源工作流完整版 ccflow5 SVN上挡下来的 在CSDN网上找了好久没找到
  • Wexflow:C#中的开源工作流引擎

    千次阅读 2019-01-24 21:09:03
    提供了一个跨平台的工作流服务器和一个跨平台的后端,可以轻松灵活地管理、设计和跟踪工作流。 Wexflow 服务器及其后端程序运行在 Windows , Linux 和 macOS 上。 Wexflow 还利用了大规模企业系统中使用的   ...
  • NULL 博文链接:https://comsci.iteye.com/blog/2428048
  • 俯瞰开源工作流引擎Activiti

    万次阅读 多人点赞 2018-08-27 19:22:55
    Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM...
  • java源码:开源工作流系统 JWFD.rar
  • compileflow Process 引擎是淘宝工作流 TBBPM 引擎之一,是专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成 java 代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。 ...
  • VS2012 + Framework4.5 + Silverlight5 写的全开源工作流设计器,里面是个完整的开源项目。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 285,049
精华内容 114,019
关键字:

开源工作流