您的位置:首页 > 其它

24、规则流中的事件说明

2016-08-18 14:32 113 查看
开始事件



进程的开始。一个过程应该有一个起始节点,没有传入的连接只有传出的连接

每当一个进程启动后,将开始执行此节点,并自动继续与这个启动事件的第一个节点,并依此类推。它包含以下属性:
Id: 节点的ID(这是一个节点容器内唯一)
Name: 节点的显示名称

结束事件



所有流程的结束,应该只有传入的连接没有传出的连接。它包含以下属性:
Id: 节点的ID(这是一个节点容器内唯一)
Name: 节点的显示名称

Terminate: 结束事件可以在整个过程中或终止路径(默认是true)。当一个流程实例被终止,这意味着它的状态设置为完成和所有其他节点可能仍然活跃在这个过程实例(并行路径)被取消。非终止结束事件只是这个路径(执行这个分支将在这里结束)结束,但仍然可以继续其他平行的路径。如果有流程实例内,没有更积极的的路径(例如,如果一个流程实例到达结束节点,但非终止流程实例内有没有更活跃的分支,将完成的过程实例,一个流程实例将自动完成反正)。终止结束事件的可视化的事件节点内使用一个完整的圆,非终止事件节点是空的。请注意,如果您使用一个子进程内的终止事件节点,你是终止流程实例的顶层,不只是子进程。

出错事件



错误处理事件,只能有传入事件没有传出事件,错误事件包含以下属性:
Id: 节点的ID(这是一个节点容器内唯一)
Name: 节点的显示名称
FaultName: 故障名称,使用些名称来处理故障
FaultVariable: 名称的变量,它包含与此故障相关的数据。这个数据也是通过异常处理程序(如果找到)。

定时器事件
     





表示定时器后,可以触发一个特定的时间内一次或多次。计时器事件应该有一个传入的连接和一个外向连接。计时器延迟指定计时器之前应等待多久引发的第一次。当计时器事件的过程中达到的,它会启动相关的定时器。如果定时器节点被取消(例如,通过完成或中止封闭的过程实例),定时器就会被取消。

计时器事件包含以下属性:
Id: 节点的ID(这是一个节点容器内唯一)
Name: 节点的显示名称
Timer delay:延迟,节点之前应等待触发第一次。表达应的形式[#][#H] [#M] [#S] [#[MS]。这意味着,您可以指定天,小时,分钟,秒和multiseconds(这是默认的,如果你不指定任何)的数量。例如,表达“1H”触发定时器将等待一个小时。表达式也可以使用#{expr}的动态推导基于一些过程变量的延迟。 EXPR在这种情况下,可能是一个过程变量,或基于一个过程变量(如myVariable.getValue())的一个更复杂的表达式。
Timer period: 随后的两个触发器之间的期间。如果期间为0时,定时器应只能触发一次。表达应的形式[#][#H] [#M] [#S] [#[MS]。这意味着,您可以指定天,小时,分钟,秒和multiseconds(这是默认的,如果你不指定任何)的数量。例如,表达“1H”再次触发定时器将等待一个小时。也可以使用#{expr}的动态推导基于一些过程变量期间的表达。 EXPR在这种情况下,可能是一个过程变量,或基于一个过程变量(如myVariable.getValue())的一个更复杂的表达式。
用定时器是要注意以下几点      
Delay 延迟必须要是值
使用时,Thread.sleep(2000); 要是程序延迟,时间必须大约Delay的值。
period 可以为空

如果该规则流结束,但未执行延迟后的规则,则延迟没有效果。
通过mian方法测试 

信号事件



可用于信号事件,在执行过程中的内部或外部事件作出回应。信号事件有没有传入的连接和一个外向连接。它指定的事件类型,预计。每当检测到这种类型的事件,此事件节点相连的节点将被触发。它包含以下属性:
Id: 节点的ID(这是一个节点容器内唯一)
Name: 节点的显示名称
EventType:事件的类型
VariableName: variablename的变量将包含与此事件相关的数据(如有),此事件发生时的名称。

一个流程实例可以标志着一个特定的事件发生

ksession.signalEvent(eventType, data, processInstanceId)


这将触发所有在给定的进程实例(活动)信号,等待该事件类型的事件节点。与事件相关的数据可以通过使用数据参数。如果事件节点指定一个变量名,这个数据将被复制到该变量在事件发生时。

您还可以产生一个流程实例内的信号。可以使用一个脚本(脚本任务或进入或退出操作使用)
kcontext.getKnowledgeRuntime().signalEvent(eventType, data, kcontext.getProcessInstance().getId());


活动,脚本



表示,应该在这个过程中执行的脚本。脚本任务应该有一个传入的连接和一个外向连接。指定应执行相关的操作,编码的行动(即Java或MVEL)使用的方言,和实际行动代码。此代码可以访问的任何变量和全局。还有一个预定义的变量kcontext引用ProcessContext对象,例如,它可以被用来访问当前流程实例或NodeInstance,并获得和设置变量,或获得ksession使用kcontext.getKnowledgeRuntime()。当一个脚本任务的过程中达成的,它会执行的动作,然后继续下一个节点。它包含以下属性:
Id: 节点的ID(这是一个节点容器内唯一)
Name: 节点的显示名称
Action: 行动节点与此相关的动作脚本

请注意,您可以编写脚本节点内的任何有效的Java代码。这基本上允许你做这样一个脚本节点内部任何。但是也有一些注意事项:
当试图建立一个更高级别的业务过程中,也应该由企业用户了解,它可能是明智的,里面的过程中避免低层次的实施细节,包括在这些脚本任务。脚本任务仍然可以用于快速操作变量等,但其他概念,如服务任务,可以用来在一个更高层次的方式更复杂的行为模式。
应立即脚本。他们使用的是引擎的线程来执行脚本。也许应该仿照作为异步服务任务,可能需要一些时间来执行的脚本。
您应尽量避免接触外部服务,通过一个脚本节点。这不仅平时违反前两个警告,这也与外部服务交互的发动机,可问题没有的知识,特别是当使用持久性和交易。在一般情况下,它可能是更明智的使用服务的任务与外部服务模式通信。
脚本不应该抛出异常。运行时异常应该被捕获和管理里面的脚本或转换成信号或,然后将其内部的过程中处理错误的例子。

子流程



表示从这个过程中的另一个进程调用。一个子流程节点都应该有一个传入的连接和一个传出连接。当可重复使用的子流程节点的过程中达成的,该发动机将开始与给定ID的过程。它包含以下属性:
Id: 节点的ID(这是一个节点容器内唯一)
Name: 节点的显示名称
ProcessId: 应执行的进程的ID
Wait for completion: 如果此属性为true,这个子进程的节点只会继续下去,如果启动的子进程已终止其执行(完成或中止),否则将继续启动子后,立即(所以它不会等待它的完成)。
Independent: 如果此属性为true,子进程开始作为一个独立的过程,这意味着如果完成这个父进程,子进程将不会被终止(或其他一些原因取消此子流程节点);活跃​​的子进程将被取消(或取消子流程节点)父进程终止。
On entry and on exit actions: 在进入和退出之前分别执行的动作
Parameter in/out mapping: 子流程节点还可以定义和映射变量。启动进程时,在“在”映射的变量将被用作参数(相关参数名称)。所定义的“出”映射的子进程的变量将被复制到这个过程中,变量,当子进程已经完成。请注意,您可以使用“出”映射只有当“等待完成”设置为true。

用户任务



过程也涉及用户需要执行的任务。用户任务代表一个原子由一个人执行的任务。它应该有一个传入的连接和一个外向连接。可用于用户任务与泳道分配多个人工任务相似的用户组合。请参阅有关详细信息,对用户的任务章。用户任务实际上只是一个服务节点的具体类型(类型为“人工任务”)。用户任务包含以下属性:
Id: 节点的ID(这是一个节点容器内唯一)
Name: 节点的显示名称
TaskName: 任务的名称
Priority: 一个整数,指示任务的优先级
Comment:与任务相关的描述
ActorId: 负责执行人工任务的ID。一个演员的ID列表,可以指定使用一个逗号(',')作为分隔。
GroupId: 负责执行人工任务的组ID。作为分隔符使用一个逗号(',')可以指定一组ID的列表。
Skippable: 指定是否可以跳过人工任务,即,这个角色可能会决定不执行任务。
Content: 与此任务相关的数据。
Swimlane:泳道可以分配多个人工任务给相同的角色
On entry and on exit actions: 在进入和退出之前分别执行的动作
Parameter mapping: 允许人工任务的参数复制过程变量的值。创造人工的任务后,该值将被复制。
Result mapping: 允许复制工作项目的结果参数值的过程变量。每种类型的工作可以定义结果,将(可能)已经完成的工作项目后返回的参数。结果映射可用于复制的给定的结果参数值,在这个过程中给定的变量。例如,“FileFinder”工作项目返回结果参数文件内匹配给定的搜索条件的文件清单。这个文件的列表,然后可以绑定以便在使用过程中的一个过程变量。工作项目完成后,该值将被复制。

分离网关可分为三种:

Split  可以分出多条线


和下面是一样的意思,多条件分支功能

并行
   AND  

这种网关是不能设置条件的,所以是全部执行(注:执行结果,是为True的元素)

先后执行true的分支
 or  

这种网关是可以设置条件的
注:执行所以为true的元素。和and有点类似。
执行优先的第一个为true的分支 有且只执行一个     xor   

 
这种网关也是可以设置条件的



Join只能分离出一条线,且表示为连接点,简单意义上来说就是合并网关,



当改type设置为AND时,所以满足条件的都会显示出来,当type设置为XOR时,只会显示其中一条,但这个是随机的

注意: 

1、当分支网关Type是AND时,且Join合并网关也为AND时,则会执行所以的脚本

     当分支网关Type是AND时,且Join合并网关也为XOR时,则会执行汇总前分离时的随机一条的脚本

2、当网关是Type设置为XOR时,Join的type设置为AND时,因为网关中XOR是有且只有执行一个满足条件的元素才会有值,我们会发现,脚本2中定义的结果没有输出,这时可以证明,当Join的Type设置为AND时,执行需要两个或两个以上的元素汇总否则不会执行。

    当网关是Type设置为XOR时,Join的type设置为XOR时会将脚本2中的内容输出,就时可以证明,合并网关Type设置为XOR时,是可以接收一条元素为true元素汇总。

3、前提是当所有条件都成立。当网关的Type设置为 OR时,Join的type设置为XOR时,则执行会汇总前分离时的随机一条的脚本,所以会将脚本2中的内容输出    

    前提是当所有条件都成立。当分离网关的Type设置为OR时,合并Join的type设置为AND时, 因为分离网关中OR,是执行所以满足条件的流程,所以会将脚本2中的内容输出。与分离网关Type设置成AND有点类似;

     注:只要分离网关其中有一个条件为false,则不会执行汇总后的脚本2。

4、当合并网关设置成AND就必须至少两条或两条以上的流向才会执行后面的脚本,当合并网关设置成XOR就必须有最少一条伯流向才会执行后面的脚本,且XOR的状态是只会有一条浦汇总前分离时的一条脚本。

分离网关



允许你创建你的进程中的分支。发散网关应该有一个传入的连接和两个或两个以上的传出连接。目前支持的网关节点有三个类型:
并行的手段,控制流将同时继续在所有传出连接。
异或完全传出连接将选择的唯一手段。这个决定是由评估链接到每个传出连接的约束。选择优先级最低的数量,计算结果为true的约束。约束可以指定使用不同的方言。请注意,您应始终确保至少一个传出连接会在运行时评估为true(在规则流在运行时会抛出一个异常,如果它不能找到至少一个传出连接)。
OR或,选择的条件计算结果为true的所有传出连接的手段。条件相似的独家网关,没有重点考虑的除外。请注意,因为这个过程在运行时会抛出一个异常,如果它不能确定传出连接,你应该确保至少一个传出连接将评估在运行时也是如此。

它包含以下属性:
Id: 节点的ID(这是一个节点容器内唯一)
Name: 节点的显示名称
Type:分割节点,即和,异或OR(见上文)的类型
Constraints: 约束与每个传出连接

合并网关



可以同步多个分支。融合网关应该有两个或两个以上的传入连接和一个外向连接。有两种类型的拆分目前支持:
并行的手段或者说是将等待,直到所有传入分支,然后再继续完成。
异或唯一手段,它继续尽快传入分支之一已经完成。如果它是从多个传入的连接触发时,它会触发这些触发器的下一个节点。

它包含以下属性:
Id: 节点的ID(这是一个节点容器内唯一)
Name: 节点的显示名称
Type:分割节点,即和,异或OR(见上文)的类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  drools