为了解释Decision节点,在这个方案中工作流设计为根据工作流从某个变量提取出的值做出决定,这个变量是用客户XML消息赋值的。
在这里,设计一个条件,在运行时对它进行判断以决定在收到的Request for Quote XML中指定的发货地址是否要计算销售税。如果条件判断为true,那么就必须计算销售税,执行流程就沿着调用计算销售税的Web服务这一分支继续。如果条件判断为false,那么就不需要计算报价的销售税,执行流程就沿着默认分支继续。
在这一步,添加Decision节点,并指定在运行时要判断的条件。在后面的步骤中,定义根据条件的判断结果在不同执行路径上要执行的事件:
· 创建一个Decision节点和条件
· 设计不同的执行路径的工作流动作
创建一个Decison节点和条件
完成下列任务:
· 在工作流中添加一个Decision节点
· 定义这个节点中的条件
在工作流中添加Decison节点
1. 如果Palette在WebLogic Workshop中不可见,则从WebLogic Workshop菜单中选择 View —> Windows —> Palette。
2. 单击Palette中的Decision并将 Decision节点拖到Design View中的工作流中,将它放到工作流中紧靠在第2步:指定工作流如何开始中创建的Client Request Quote节点后面。
注:将节点从Palette中拖到Design View中时,在工作流中出现目标 。每一个目标表示工作流中一个可以放置节点的有效位置。当将节点拖到一个效位置附近时,目标就会激活 。这时可以释放鼠标按键,节点会停靠在工作流中激活的目标位置上。
Decision节点包含一个表示条件(标记为Condition)的节点,和两条执行路径:一个用于条件判断为true时要执行的事件,另一个(默认路径)用于当条件判断为false时要执行的事件。
3. 将Decision和Condition重新标记,以更清楚地表明这个节点的业务任务:
a. 要输入一个标记以替换Decision,双击Decision并输入Sales Tax Calculation Needed?
b. 要输入一个标记以替换Condition,双击Condition并输入Yes。
c. 要输入一个标记以替换Default,双击Default并输入No。
现在在Design View中工作流中的decision节点应该是如下图所示的样子:
定义这个Decision节点中的条件
1. 双击条件节点 以调出decision构造器。它提供了一个任务驱动的用户界面以帮助设计decision逻辑。
在decision构造器中,XML默认是被选中的。不要改变这种选择,因为在这里,要根据XML文档中一个元素的值设计decision。
2. 选择用来进行判断的XML元素。为此:
a. 在decision构造器中,双击Select Variable选择一个工作流变量。
显示出项目中的工作流变量下拉列表。这里,显示了为工作流开始处的Client Request节点创建的变量:requestXML (为XML类型QuoteRequestDocument)。
b. 单击 requestXML (QuoteRequestDocument)。
在Select Node窗格中显示Quote Request XML(QuoteRequestDocument) i的XML schema表示。
在上面的图中,指定给这个变量的XML文档的元素和属性显示为层次结构的节点。我们例子中的schema(QuoteRequest.xsd)指定了根元素(quoteRequest)和子元素:customerName、shipAddress,以及重复元素:widgetRequest。这个shipAddress元素包含下列属性:street、city、state、zip。
3. 在Select Node窗格中,单击state属性。
这就选择了XML文档资料中表示要对其定义条件的那个元素的节点。
Left Hand Expression域填入了下列表达式:
$requestXML/ns0:shipAddress/@ns0:state
4. 从Operator列表中选择=操作符。
5. 在Right Hand Expression域输入CA。
6. 单击Add以添加在Condition List窗格中创建的条件。
下列条件添加到Condition List:
$requestXML/ns0:shipAddress/@state = "CA"
7. 在Condition List窗格右边的Join选项中,单击单选按钮以选择OR。
这样就完成了这个节点的第一个条件的设计。
8. 重复第3到第6步三次,但是每次都改变Right Hand Expression域中的项——分别输入California、NJ和New Jersey。
所指定的条件在Condition List窗格中列出,如下图所示:
. 单击Apply,再单击Close以保存条件并关闭decision构造器。
在Design View中的Condition节点添加了这个图标 。它以可视的方式表明在这个节点上定义的条件基于对XML的判断。
10. 选择File —> Save 以保存到目前为止所做的工作。
这一步完成了在运行时,流程运行到Decison节点时要判断的条件设计。条件逻辑作为XQuery表达式写入源代码——参见下一节:源代码中的XML条件。
现在可以定义流程后面的路径中的动作了——继续完成设计不同执行路径的工作流动作。
10. 选择File —> Save 以保存到目前为止所做的工作。
这一步完成了在运行时,流程运行到Decison节点时要判断的条件设计。条件逻辑作为XQuery表达式写入源代码——参见下一节:源代码中的XML条件。
现在可以定义流程后面的路径中的动作了——继续完成设计不同执行路径的工作流动作。
源代码中的XML条件
在像前面一节中描述的那样在decision构造器中定义XML条件时,WebLogic Workshop会将一个XQuery表达式写入JWF文件。XQuery表达式写入源代码中的Workflow Language部分。
要查看XQuery表达式,单击Source View选项卡,展开用下面一行注释的代码部分: //* Workflow Language */
按上面第3到第6步的范例定义的条件在源代码中产生下面的XQuery表达式:
* @jwf:flow xquery::
:
* define function cond_requestXML_1(element $requestXML) returns xs:boolean {
* (((data($requestXML/ns0:shipAddress/@state) = "CA") or
* (data($requestXML/ns0:shipAddress/@state) = "California")) or
* (data($requestXML/ns0:shipAddress/@state) = "NJ")) or
* (data($requestXML/ns0:shipAddress/@state) = "New Jersey")
* }
* ::
* flow::
相关主题
定义分支条件
设计不同执行路径的工作流动作
在默认情况下,Decision节点包含一个条件、一个条件节点下面的路径,它表示当这个条件或者多个条件判断为true时要执行的路径、和在条件右边的路径,它表示当条件判断为false时要执行的路径(默认路径)。
注:可以向Decision节点添加更多的条件节点和路径,但是在这里,我们只需要一组条件和两条路径。
要了解如何向Decision节点(Sales Tax Calculation Needed?)的不同路径添加逻辑,参见本教程中后面的步骤: