|
|
|
|
Oracle BPEL Workflow Service的“Human Task的数据交互”稍微有些复杂,有几个地方要注意,其基本处理思路围绕:数据类型和Message Type的声明;流程变量的声明;任务参数的定义;任务参数与流程变量之间的映射;任务提交后数据的处理和提取。 Oracle BPEL Workflow Service的“Human Task的数据交互”稍微有些复杂,有几个地方要注意,其基本处理思路围绕:数据类型和Message Type的声明;流程变量的声明;任务参数的定义;任务参数与流程变量之间的映射;任务提交后数据的处理和提取。
其基本关系如下图所示:
|
类型
|
说明
|
|
Schema
|
一般是在shema目录下的.xsd文件,用于声明流程中所涉及的数据类型
|
|
Client MessageType
|
一般是在bpel流程所对应的client partner link所对应的wsdl中声明,用于定义与外界交互的消息类型。
|
|
|
流程全局变量,可以是简单类型、复杂类型和消息类型
|
|
Customer Variable
|
开发人员自定义的流程变量,用于处理流程活动之间的数据交互和转换
|
|
Task Message Variable
|
每个Human Task都有产生一个全局的变量,用于索引到任务消息对象,从而可以在其它活动获取与此human task相关的一些信息,包括任务实例的状态信息、任务提交的数据等等。其中表单提交的数据,都会写在“/task:task/task:payload”这个元素下,比如“/task:task/task:payload/task:ApplyUser”。
|
|
Human Task Parameter
|
Human Task会声明当前任务相关的参数,这些参数需要在Display Form中被显示或引用。在 BPEL流程中,每个Human Task的参数都需要告知其数据是从哪个bpel variable取值的(或者初始值为空)。
|
数据类型和MessageType的声明 在对数据类型的声明,一般在创建BPEL工程的时候会自动在Schema目录下生成一个,比如“VactationApplyProcess.xsd”文件,如下所示: 在VactationApplyProcess.xsd中默认会构造一个Request和Resonse元素,如下所示:(其中蓝色斜字体表示是为此流程扩展的)
- <schema attributeFormDefault="unqualified"
-
- elementFormDefault="qualified"
-
- targetNamespace="http://xmlns.oracle.com/VacationApplyProcess"
-
- xmlns="http://www.w3.org/2001/XMLSchema">
-
-
-
- <element name="VacationApplyProcessProcessRequest">
-
- <complexType>
-
- <sequence>
-
- <element name="input" type="string"/>
-
- </sequence>
-
- </complexType>
-
- </element>
-
- <element name="VacationApplyProcessProcessResponse">
-
- <complexType>
-
- <sequence>
-
- <element name="result" type="string"/>
-
- </sequence>
-
- </complexType>
-
- </element>
-
- <element name="VacationApplyProcessForm">
-
- <complexType>
-
- <sequence>
-
- <element name="Apply_User" type="string"/>
-
- <element name="Apply_Reason" type="string"/>
-
- <element name="Approve_Manager" type="string"/>
-
- <element name="Approve_Comment" type="string"/>
-
- <element name="Approve_Status" type="boolean"/>
-
- </sequence>
-
- </complexType>
-
- </element>
-
- <schema>
<schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="http://xmlns.oracle.com/VacationApplyProcess"
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="VacationApplyProcessProcessRequest">
<complexType>
<sequence>
<element name="input" type="string"/>
</sequence>
</complexType>
</element>
<element name="VacationApplyProcessProcessResponse">
<complexType>
<sequence>
<element name="result" type="string"/>
</sequence>
</complexType>
</element>
<element name="VacationApplyProcessForm">
<complexType>
<sequence>
<element name="Apply_User" type="string"/>
<element name="Apply_Reason" type="string"/>
<element name="Approve_Manager" type="string"/>
<element name="Approve_Comment" type="string"/>
<element name="Approve_Status" type="boolean"/>
</sequence>
</complexType>
</element>
<schema>
在与BPEL对应的VactationApplyProcess.wsdl文件中,则声明了MessageType:
- <types>
-
- <schema xmlns="http://www.w3.org/2001/XMLSchema">
-
- <import namespace="http://xmlns.oracle.com/VacationApplyProcess"
-
- schemaLocation="VacationApplyProcess.xsd" />
-
- </schema>
-
- </types>
-
-
-
- <message name="VacationApplyProcessRequestMessage">
-
- <part name="payload" element="client:VacationApplyProcessProcessRequest"/>
-
- </message>
-
- <message name="VacationApplyProcessResponseMessage">
-
- <part name="payload" element="client:VacationApplyProcessProcessResponse"/>
-
- </message>
-
- <message name="VacationApplyProcessFormInputMessage">
-
- <part name="payload" element="client:VacationApplyProcessForm"/>
-
- </message>
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://xmlns.oracle.com/VacationApplyProcess"
schemaLocation="VacationApplyProcess.xsd" />
</schema>
</types>
<message name="VacationApplyProcessRequestMessage">
<part name="payload" element="client:VacationApplyProcessProcessRequest"/>
</message>
<message name="VacationApplyProcessResponseMessage">
<part name="payload" element="client:VacationApplyProcessProcessResponse"/>
</message>
<message name="VacationApplyProcessFormInputMessage">
<part name="payload" element="client:VacationApplyProcessForm"/>
</message>
当然,开发人员可以定义自己的schema。但定义的schem必须放于%Project_Home%/bpel目录下才能够被schema目录识别。 Process Variables的声明 为了便于对“请假单”流程中变量进行统一声明,声明了一个ApplyForm的variable,类型是MessageType,指明到刚刚在wsdl定义的message。其实,就是索引到我们在schema中声明的表单元素。
一般来讲,流程变量并不一定需要很多很复杂。因为Oracle BPEL在设计流程的时候,会为每一个Human Task产生一个相应的全局的variable,来绑定到其taskservice:taskMessage上,根据这个variable可以获取到客户端所提交进来的数据。
|
|
本文参加了“SOA中国的关键任务”博客大赢家,评论文章即可参与活动,赢取万元奖金! 
 
|