16.1.7. getVariableProperty与getVariableData功能
WS-BPEL提供内置函数,允许存储在变量中或者是与变量关联的信息能在业务流程执行期间被处理。
getVariableProperty(variable name, property name)
这个函数允许从变量中接收全局的属性值。它完全接受了作为输入的值和属性名称,并返回所要求的值。
getVariableData(variable name, part name, location path)
由于变量通常用于管理状态信息,这个函数要求提供访问数据的其他部分处理逻辑。getVariableData 函数具有一个强制的变量名称参数和两个能够用于指定变量数据的可选变量。
在我们的示例中我们多次使用 getVariableData 函数来从变量中获取消息数据。
示例16.5. 两个 getVariableData 函数被用于接收来自于不同变量的特定数据
getVariableData ('InvoiceHoursResponse',
'ResponseParameter')
getVariableData ('input','payload',
'/tns:TimesheetType/Hours/...')
16.1.8. sequence元素
sequence 结构允许你组织一系列的活动以便它们以预定义的、有顺序的次序执行。WS-BPEL提供了大量能够用于在流程定义中表示工作流逻辑的活动。在本节中剩余的元素描述解释了一组基本的用于我们将要进行案例研究示例的一部分活动。
示例16.6. sequence 结构框架仅包含了WS-BPEL所提供的许多活动元素中的一些
<sequence>
<receive>
...
</receive>
<assign>
...
</assign>
<invoke>
...
</invoke>
<reply>
...
</reply>
</sequence>
注意 sequence 元素可以嵌套,允许你在序列中定义序列。
16.1.9. invoke元素
该元素识别了伙伴服务的操作,这是流程定义计划在其执行过程中要调用的。invoke 元素配备了五个常见属性,进一步详细说明了条文的细节(表16.1)。
表16.1. invoke元素属性
属性
描述
partnerLink
该元素通过相应的 partnerLink 来命名伙伴服务。
portType
该元素用于识别伙伴服务的 portType 元素。
operation
流程服务需要发送请求到的伙伴服务操作。
inputVariable
输入消息将用于和伙伴服务操作进行通信。注意这里所提及的是作为变量,因为它引用了具有messageType 属性的WS-BPEL变量。
outputVariable
当基于请求-响应的MEP进行通信的时候采用该元素。返回值存储在单独的variable元素中。
示例16.7. invoke 元素确定了目标伙伴服务的细节
<invoke name=“ValidateWeeklyHours”
partnerLink=“Employee”
portType=“emp:EmployeeInterface”
operation=“GetWeeklyHoursLimit”
inputVariable=“EmployeeHoursRequest”
outputVariable=“EmployeeHoursResponse”/>
16.1.10. receive元素
receive 元素允许我们建立流程服务期望从外部客户端伙伴服务中接收请求的信息。在这个案例中,流程服务被视作是等待调用的服务提供者。
receive 元素包含一组属性,它们中的每一个都被赋值,涉及到预期进来的通信(表16.2)。
表16.2. receive 元素属性
属性 描述
partnerLink 客户端伙伴服务在相应的partnerLink结构中被识别。
portType 流程服务portType 会等待从伙伴服务中接收请求消息。
operation 会接收请求的流程服务操作。
variable 进来的请求消息将会被存储在流程定义的variable 结构中。
createInstance 当这个属性被设置成“yes”的时候,这个特殊请求的可能负责创建新的 进程实例。
注意这个元素同样能够被用于在异步消息交换的过程中接收回调消息。
示例16.8. 用于工单提交流程定义的receive元素预示着客户端的伙伴服务负责启动工单文挡提交流程
<receive name=“receiveInput”
partnerLink=“client”
portType=“tns:TimesheetSubmissionInterface”
operation=“Submit”
variable=“ClientSubmission”
createInstance=“yes”/>