Activiti理论学习-1--启动与结束事件、任务

1.启动事件

启动事件是很重要的一部分,负责流程的开始

1.1空启动事件

空启动事件就是一个圆圈,在工作流里面使用的非常多。但是空启动事件必须要人工去启动一个流程,空启动事件是建立在部署完成的流程上面的。每启动一次,就会产生一个新的流程实例。

以下XML表示一个空启动事件,由于startEvent标签内没有任何元素定义,因此表示一个空启动事件

<startEvent id="startevent" name="开始"></startEvent>
属性名称属性说明
avtiviti:formKeyctiviti扩展的formKey属性,可以用来指定启动事件关联的表单文件
activiti:initiatoractiviti扩展的initiator事件,可以用来记录启动流程人的ID,启动流程之后此属性指定的变量就会自动设置当前人的名称

1.2定时启动事件

定时启动事件是一个时钟图标,注意的是,这个时钟图标是比较少圆圈的,要跟定时边界事件区分清楚。

定时器启动事件用于在给定的时间点创建流程实例,它可以用在只启动一次的流程中,也可以用在特定时间间隔下启动。如果是有重复执行的流程,流程在周期内都有效,可以重复利用。

注意:
子流程中不能使用定时器启动事件。 定时器是从流程部署开始计时,不需要去启动流程。
定时启动事件可以用于一次性定时启动,也可以用于特定时间定时启动

以下Xml就表示一个空定时启动事件

<startEvent id="timerstartevent1" name="Timer start">
<timerEventDefinition></timerEventDefinition>
</startEvent>
属性名称属性说明
timeDate一次性定时启动,具体到一个日期
timeDuration设置多长时间之后启动流程
timeCycle周期性启动任务,用来设定循环的时间间隔,表示多长时间执行一次循环

1.3 异常启动事件

异常启动事件可以出发一个异常子流程,但不能通过API方式启动,总是在另外一个子流程抛出异常结束事件的时候被触发。
异常启动事件"捕获型",而异常结束事件是抛出型的。

BPMN2.0规定了错误开始事件只能使用在事件子流程(Event Sub-Process)中,该该事件不能使用在其他流程中,包括最高级流程(Top-Level Process)、嵌套子流程(Sub-Process)和调用子流程(Call Activity)。BPMN错误与Java异常不是一回事。事实上,这两者毫无共同点。BPMN错误事件是建模业务异常(business exceptions)的方式。

以下一个xml表示一个异常启动事件

<endEvent id="errorendevent1" name="ErrorEnd">
<errorEventDefinition></errorEventDefinition>
</endEvent>

1.4 消息启动事件

消息启动事件可以通过一个消息名称触发,从而启动一个流程实例,还可以结合消息抛出事件一起使用。

2.结束事件

结束事件是很重要的一部分,负责流程的结束

2.1 空结束事件

空结束事件是抛出型的。空结束事件不处理抛出结果,空结束事件一般用于正常结束流程。

2.2 异常结束事件

异常结束事件时有抛出结果的,它定义了需要抛出的错误代码,如果找到了异常开始事件定义的异常代码,则会触发异常开始事件,否则按照空结束事件处理。

2.3 终止结束事件

他可以终止一个流程实例的执行

2.4 取消结束事件

取消结束事件可以取消一个事务子流程的执行,同时也能在子流程中使用,
当子流程在执行过程中出现异常时,可以设置一个取消结束事件。

3.任务

任务主要有:用户任务,脚本任务,java服务任务,webservice任务,业务规则任务,邮件任务,mule任务,camel任务,手动任务,Java 接收任 务,shell任务。

3.1 用户任务

用户任务用来设置必须由人员完成的工作,也就是必须是人来触发。 当流程执行到用户任务,会创建一个新任务, 并把这个新任务加入到分配人或群组的任务列表中。
加粗样式
对应的xml

<userTask  id="_2" name="UserTask">
            <humanPerformer>
                <resourceAssignmentExpression>
                    <expression>xiaoyuxixi</expression>
                </resourceAssignmentExpression>
            </humanPerformer>
 </userTask>

用户任务除了可以分配到某一个具体的人,还可以分配给组或者两者混合

<userTask  id="_2" name="UserTask">
            <potentialOwner>
                <resourceAssignmentExpression>
                    <expression>xiaoyuxixi,group(leader)</expression>
                </resourceAssignmentExpression>
            </potentialOwner>
</userTask>
属性名称属性说明
activiti:assignee用来指定任务的处理人
activiti:cadidateUsers用来指定用户任务的候选人,多个用逗号隔开
activiti:cadidateGroups用来指定多个候选组,多个用逗号隔开
activiti:dueDate设置任务的到期日,通常用变量代替而不是设定一个具体的日期
activiti:priority设定任务的优先级,取值区间[0,100]

3.2 脚本任务

脚本任务可以运行引擎依赖的语言之外的脚本语言
脚本任务是一个自动节点。当流程到达脚本任务, 会执行对应的脚本。 脚本任务的流程可以访问的所有流程变量,都可以在脚本中使用。 也可以在脚本中设置流程变量,直接调用 execution.setVariable(“variableName”, variableValue)。

<script>
     def scriptVar = "test123"
     execution.setVariable("myVar", scriptVar)
</script>

在这里插入图片描述

属性名称属性说明
scriptFormat用来指定符合规范的脚本类型
activiti:resultvariable把脚本处理的结果保存到一个变量中
activiti:priority设定任务的优先级,取值区间[0,100]

3.3 Java服务任务

用来调用外部java类,avaService 任务允许指定一个实现了指定接口的java类,或者执行一个表达式,可以把一个结果保存到一个变量中
java服务任务

属性名称属性说明
activiti:class实现了接口JavaDelegate的Java类
activit:expression一个表达式
activiti:delegateExpression实现了指定接口的表达式
activiti:resultvariable把脚本处理的结果保存到一个变量中

3.4 WebServices任务

通过WebServices任务可以调用外部的WebServices资源,完成调用只需要一些必须的配置就行。
Webservices是描述一些操作(利用标准化的 XML 消息传递机制可以通过网络访问这些操作)的接口。
Webservices是用标准的、规范的 XML 概念描述的,称为 Webservices的服务描述。
这一描述囊括了与服务交互需要的全部细节,包括消息格式(详细描述操作)、传输协议和位置。该接口隐藏了实现服务的细节,允许独立于实现服务基于的硬件或软件平台和编写服务所用的编程语言使用服务。这允许并支持基于 Webservices的应用程序成为松散耦合、面向组件和跨技术实现。
Webservices履行一项特定的任务或一组任务。
Webservices可以单独或同其它 Webservices一起用于实现复杂的聚集或商业交易,以及企业集成(EAI)。

3.5 业务规则任务

业务规则任务可以根据流程变量的值预设的业务规则,就是把业务数据交由规则引擎处理,规则引擎根据不同的业务规则得到最终的结果在返回给调用者
业务规则任务

属性名称属性说明
activiti:relues定义规则的名称,多个用逗号隔开
activit:ruleVariablesInput业务规则需要的 数据源使用${fooVar方式定义,多个用逗号隔开}
activit:ruleVariablesName规则执行结果变量,变量的值为ruleVariablesInput定义的变量集合
activiti:execlude用来设置是否排除某些规则

3.6 邮件任务

邮件任务可以通过Activiti发送邮件,其中邮件的信息通过变量的方式传递。
邮件任务

属性名称是否必须描述
mailServerHost邮件任务的主机名,默认为host
mailServerPost是,如果不是默认的端口默认为25,如果是使用SSL则为465
mailServerDefaultFrom发件人email,如果不设置默认为:activiti@activiti.org
mailServerUsername否,是否需要认证设置邮件服务认证账号
mailServerPassword否,是否需要认证设置邮件服务认证密码
属性名称属性说明
to必填,收件人,多个收件人用逗号隔开
from邮件发送人地址,如果不设置则使用mailServerDefaultFrom属性指定的发件人
subject发件人email如果不设置,默认为activiti@activiti.org
cc抄送人列表
bcc密送人列表
charset邮件内容字符集,建议使用UTF-8
text纯文本内容的邮件内容
htmlhtml格式的邮件内容

3.7 mule任务

mule 是一个以Java为核心的轻量级的消息框架和整合平台,Mule不是用来创建多个系统、服务、APIs或者设备之间的点对点集成,而是用来智能管理节点之间的消息路由、数据映射、编排以及使消息可靠地、安全地传递。其他系统和应用接入Mule,让Mule处理所有系统之间的通信,并且可以跟踪和监控发生的一切。

它使得开发人员可以快速,简单的连接多个应用。
目前许多公司都使用了Mule,比如Walmart,HP,Sony,Deutsche Bank 以及 CitiBank等公司。
Mule基于Enterprise Service
Bus(ESB)架构思想。ESB的主要特性是通过扮演一个中转系统的角色,允许不同的应用系统交互,中转系统在内网或Internet上的应用系统间搬运数据。
目前市场上有一些商业的ESB实现。尽管如此,大部分提供有限的功能,或在已存应用服务器/消息服务器之上构建,将你锁定在特定的供应商(将你固定的ESB厂商)。Mule是供应商中立的,因此不同厂商的实现可以插入进来。当你使用Mule时,永远不会锁定的特定的供应商。
Mule有两个版本,社区版和企业版。
社区版是免费,企业版是收费的,企业版相比于社区版功能丰富许多,它们的比较如下:
社区版和企业版对比

3.8 Camel任务

Camel任务可以从Camel发送和介绍消息,由此强化了activiti的集成功能。 注意camel任务不是BPMN 2.0规范定义的官方任务。 (它也没有对应的图标)。 在activiti中,camel任务是由专用的服务任务实现的。
注意: camel任务不是BPMN 2.0标准,它只是Activiti的一个扩展。

Camel能够在大量的领域语言中让你定义路由以及中间规则,包括基于Java的Fluent API,Spring或者Blueprint XML配置文件,甚至是Scala(是一种基于JVM,集合了面向对象编程和函数式编程优点的高级程序设计语言)DSL。 您能够通过你的IDE或者Java、Scala或者XML编辑器里获得智能化路由规则补全功能。

camel首先是一个规则引擎,其次才是一个开源项目。

Apache Camel是Apache基金会下的一个开源项目,它是一个基于规则路由和中介引擎,提供企业集成模式的Java对象的实现,通过应用程序接口(或称为陈述式的Java领域特定语言(DSL))来配置路由和中介的规则。领域特定语言意味着Apache Camel支持你在的集成开发工具中使用平常的,类型安全的,可自动补全的Java代码来编写路由规则,而不需要大量的XML配置文件。同时,也支持在Spring中使用XML配置定义路由和中介规则。

3.9 手动任务

手动任务就是一个自动执行的过程。手动任务几乎不在程序中做什么事情,只是在流程的历史中留下一点痕迹,表明流程是走过某些节点的。而且这个任务是无法用taskservice查询到的。

Activiti官方说明:

手动任务定义了 BPM引擎之外的任务。用来对那些需要人来完成的工作进行建模,引擎不需要知道他是系统还是 UI接口。
对引擎而言,手动任务是作为直接通过的活动处理的,流程执行到此会自动继续流程的执行。所以这个流程其实没有什么好说的。就是一个直接通过的任务。可以使用它来自动执行一些可以直接通过的任务。

3.10 Java接收任务

接收任务是一个简单任务,它会等待对应消息的到达。
当流程执行到达接收任务时,流程状态将提交给持久性存储。这意味着该过程将一直处于等待状态,直到引擎接收到特定的消息为止,该消息触发该过程的继续,直到接收任务为止。接收任务比较简单。

3.11 Shell 任务

shell任务可以执行shell脚本和命令

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值