1. 理解节点
(1)Node节点类型
node节点类型是其他节点类型的基础,元素和属性有:
@name:指定节点的名称,必选;
description:描述节点,用于文档记录,可选;
event:描述在节点执行过程中不同时刻有事件发生被触发时需要执行的动作;
execption-handler:让开发人员定义基于捕捉的错误类型的不同而执行的动作;
timer:给节点指定定时器;
transition:定义执行路径中的目标节点;
action:不选,通过action元素指定的动作处理器负责给出流程前进的信号,并指出转换路径。
代码示例:
<node name="notify-partner">
<action
name="partnerNotification"
class="info.open-soa.actions.NotifyPartnerAction">
</action>
<description>
Notify partner of problem ticket for them resolve.
</description>
<transition to="notify-customer"/>
</node>
(2)Task-node节点类型
task-node节点类型用于指定一个或多个由人来执行的任务,戳i该任务的人将给出接下来的转换路径。
(3)State节点类型
在某种程度上是node节点类型和task-node节点类型的混合体。与task-node相似,都引入了一个和等待完成的任
务相仿的等待状态。不过,state节点类型等待的是另一个系统而不是人。外部系统可以继由事件(如node-enter)
得到通知,然后等待另一个响应信号将新表前移。state节点和node节点位移的区别是state节点不允许直接定义一
个动作处理器。初次之外,node节点类型也没有等待状态,正常情况应当被立即处理。
信标与信号:
信标基仅仅是一个执行路径,它指向流程图谱中流程实例当前可访问的一个节点。而信号(sigal)是给信标的指令,
让他在执行步骤中前移。因此,如果一个信标当前在一个state节点类型上处于等待状态,信号可以指定一个转换将
它前移。
(4)Mail-node节点类型
是用来发送电子邮件的,这个动作在进入节点时被触发。
<mail-node
name="notify-customer"
actors="jdoe"
subject="Urgent customer email received: #{problem_subj}"
text="#{problem_desc}">
<transition to="product-improvement"/>
</mail-node>
mail-node节点类型的元素和属性:
subject:带发送邮件的主题,可选;
@subject:使用subject元素的便捷替代,可选;
text:带发送邮件的文本/正文;
@text:使用text元素的便捷替代,可选;
@async:用于标志是否使用异步延续的方式发送邮件的布尔值,默认false,可选;
@template:让你可以指定使用别的模板,可以对待发送消息的格式和内容进行定制;
@actors:指定一个或对个actor来发送消息。使用对方的actorId来解析邮件地址;
@to:指定邮件发送对象的实际邮件地址,它或@actors属性必选其一。
示例:邮件模板:
<mail-templates>
<variable name="BaseTaskListURL"
value="http://yourhost:8080/jbpm-console/sa/task.jsf?id=" />
<mail-template name='task-assign'>
<actors>
#{taskInstance.actorId}
</actors>
<subject>
Task '#{taskInstance.name}' has been assigned to you!
</subject>
<text><![CDATA[Hello,
Task '#{taskInstance.name}' has been assigned to you by
your friendly Business Process Manager application.
Please visit #{BaseTaskListURL}#{taskInstance.id} to complete
Thanks.]]>
</text>
</mail-template>
</mail-templates>
(5)Decision节点类型
用于指定下一步跟随哪个转换或路径的决策。例如:
<decision name="high-priority?"
expression='#{ ( priority == "HIGH" ? "yes" : "no") }'>
<transition to="email-notification" name="yes"/>
<transition to="assign" name="no"/>
</decision>
等价的配置:
<decision name="high-priority?" >
<transition to="email-notification" name="yes">
<condition>#{priority == "HIGH"}</condition>
</transition>
<transition to="assign" name="no">
<condition>#{priority != "HIGH"}</condition>
</transition>
</decision>
指定处理器类:
<decision name="high-priority?" >
<handler class=”com.sample.MyDecisionHandler”/>
</decision>
转换的元素和属性:
description:转换的表述,用于文档,可选;
expression:可选的表达式定义,用于判断该转换是否应继续。 表达式可以作为元素文本(如:<condition>#
{a>5}</condition>),也可以使用@expression属性(如:<condition expression=#{a>5}>),可选。
action:指定Java动作类或BeanShell脚本来实现定制逻辑;
exception-handler:让开发人员可以根据捕获的错误类型不同执行一组动作;
@name:转换的名称。从任何指定的节点离开的转换路径都必须有一个独一无二的名称。可选;
@to:目标节点的名称,不选。
(6)Fork可join节点类型