胡长城(银狐999)BLOG

工作流,BPM,SOA,Java,J2EE、Flex;个人主页http://www.javafox.org;普元BPS业务流程平台

原创 Oracle BPEL的研究(5)流程变量和Human Task数据交互说明收藏

       Oracle BPEL Workflow Service的“Human Task的数据交互”稍微有些复杂,有几个地方要注意,其基本处理思路围绕:数据类型和Message Type的声明;流程变量的声明;任务参数的定义;任务参数与流程变量之间的映射;任务提交后数据的处理和提取。
       其基本关系如下图所示:
 
类型
说明
Schema
一般是在shema目录下的.xsd文件,用于声明流程中所涉及的数据类型
Client MessageType
一般是在bpel流程所对应的client partner link所对应的wsdl中声明,用于定义与外界交互的消息类型。
BPEL Variables
流程全局变量,可以是简单类型、复杂类型和消息类型
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中默认会构造一个RequestResonse元素,如下所示:(其中蓝色斜字体表示是为此流程扩展的)
<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>
       当然,开发人员可以定义自己的schema。但定义的schem必须放于%Project_Home%/bpel目录下才能够被schema目录识别。 Process Variables的声明      为了便于对“请假单”流程中变量进行统一声明,声明了一个ApplyFormvariable,类型是MessageType,指明到刚刚在wsdl定义的message。其实,就是索引到我们在schema中声明的表单元素。  
       一般来讲,流程变量并不一定需要很多很复杂。因为Oracle BPEL在设计流程的时候,会为每一个Human Task产生一个相应的全局的variable,来绑定到其taskservice:taskMessage上,根据这个variable可以获取到客户端所提交进来的数据。

发表于 @ 2008年06月18日 22:46:00|评论(loading...)|收藏

新一篇: Oracle BPEL的研究(6)流程变量和Human Task数据交互说明(2)  | 旧一篇: Oracle BPEL的研究(4)Human Task Display Form介绍

Csdn Blog version 3.1a
Copyright © 银狐999