BPEL 设计器开发人员指南:BPEL 映射器
由
Bob May 创建,由
Irina Filippova 维护
2007 年 12 月
目录

BPEL 设计器开发人员指南
关于 BPEL 映射器
BPEL 映射器为处理和定向 BPEL 流程数据提供了一个框架。本框架由以下几个部分组成:
- 菜单栏。菜单栏提供了所有用来创建 BPEL 映射的 BPEL 映射器的 XPath 函数。还可以通过加入包含 XPath 函数的谓词来改进或扩展 BPEL 映射。
在菜单栏的右侧,可以使用以下按钮来操作函数框,或函数 ID:
- 自动布局。自动在映射窗格中安排函数框。
- 展开所有函数 ID。展开函数框。
- 折叠所有函数 ID。折叠所有函数框。当映射窗格中有大量的函数框时,该命令非常有用。
- 删除选择。删除选中的函数框。
- 源树窗格。源树窗格包含一个树组件,用于提供对 BPEL 流程的数据变量的访问。
- 映射窗格。映射窗格包含用来创建 BPEL 映射的画布。在菜单栏中选择函数时,将在映射窗格中显示一个函数框。如果该函数接受任何参数,则在函数框的左侧会为每个数提供一个连接器。如果参数是可选的,则会在参数名称后面显示一个问号。并且在函数框的右侧会为结果提供一个连接器。您可以在以下 BPEL 流程元素中使用 BPEL 映射器:
- 分配活动。可以定义一个或多个分配副本。
- If 活动。 您可以定义条件
- If 活动内的 ElseIf 元素。 您可以定义条件
- ForEach 活动 您可以定义条件
- RepeatUntil 活动 您可以定义条件
- While 活动。 您可以定义条件
- 等待活动。可以指定截止期限或持续时间。
- 目标树窗格。目标树窗格的树组件将依赖于要映射的 BPEL 流程元素。目标树窗格包含以下组件:
- 对于分配活动,右窗格包含的树组件与左窗格相同。
- 对于 If 活动、ElseIf 元素、ForEach 活动、RepeatUntil 活动以及 While 活动,右窗格都包含“结果”节点。
- 对于等待活动,右窗格包含了“截止期限”或“持续时间”节点。
选择“设计”视图中列出的元素将会打开“BPEL映射器”窗口。如果该窗口不可见,则从主菜单中选择“窗口”>“其他”>“BPEL映射器”选项。
回到顶部
您可以直接创建源树窗格到目标树窗格的映射,而无需使用任何函数。此类映射包含以下几种方式:
- 变量到变量
- 部件到部件
- XSD 元素到 XSD 元素
- XSD 属性到 XSD 属性
还可以在 BPEL 映射器的菜单栏中,创建使用一个或多个 XPath 函数 的映射。例如,如果 BPEL 流程中包含了等待一段时间的等待活动,则可以使用 Duration Literal 函数来指定持续时间。
在不使用任何函数的情况下创建映射:
- 在源树窗格中,展开树组件,直至出现要映射的源节点。
- 如果目标树窗格也包含了树组件,则展开树组件,直至出现要映射的目标节点。
- 在源树窗格中选择该节点,并将指针拖到目标树窗格中的节点。
将出现一个连接两个节点的链接。
在映射中使用函数:
- 单击包含该函数的下拉菜单。
- 单击该函数。
函数框将出现在映射窗格中。
- 将任何参数映射到函数框左侧的相应连接器。源可以是源树窗格中的节点,也可以是另一个函数框的输出。如果参数是可选的,则会在参数名称后面显示一个问号。
- 从函数框右侧映射结果。目标可以是目标树窗格中的节点,也可以是另一个函数框的输入。
删除映射中的链接或函数:
- 选择该链接或函数。
- 按下“删除” 键。
回到顶部
您可以使用 BPEL 映射器来创建由 XPath 函数组成的谓词。
谓词将条件应用于可能具有多个值的节点。结果是满足条件的一部分节点。
例如,假定节点表示某种产品的数量。如果要选择数量大于 50 件的所有产品,则可以使用 greater than 和 number literal 函数来定义条件。
只有某些类型的节点才允许创建谓词。这些节点的上下文菜单包含“新建谓词”选项。展开源树窗格中的树组件时,可以创建谓词的节点将标记有星号(*)。
创建谓词后,您可以在赋值中使用谓词。例如,可以将数据从源树窗格中的谓词复制到目标树窗格中的节点。
您可以编辑或删除现有的谓词。
创建谓词:
- 在源树窗格中,右键单击某个节点,然后选择“新建谓词”。
将显示谓词编辑器。
- 使用 XPath 函数来创建谓词条件。将结果映射到标树窗格中的谓词节点。
- 单击“确定”。
编辑器将在紧靠原始节点的下面添加谓词节点。条件将显示在方括号中。
编辑谓词:
- 在源树窗格中,右键单击该谓词节点,然后选择“编辑谓词”。
- 修改条件。
- 单击“确定”。
删除谓词:
- 在源树窗格中,右键单击该谓词节点,然后选择“删除谓词”。
- 单击“确定”。
回到顶部
BPEL 映射器的菜单栏中提供了 XPath 函数集合。这些函数均基于 XPath 1.0 规范。
每个函数具有零个或多个参数。每个函数都返回单个结果。
该页面显示的下拉菜单选项如下所示:菜单栏中的下拉菜单包括:日期时间、运算符、布尔值、字符串、节点 和 数值。
日期时间
“日期时间”菜单包含了以下函数:
- Duration Literal 用于输入持续时间类型。请使用 XML 架构规范中指定的格式。
- Current Time 提供当前时间。
- Current Date 提供当前日期。
- Current Date and Time 提供当前日期和时间。
运算符
“运算符”菜单包含了以下函数:
- Greater Than
- Greater or Equal
- Less Than
- Less or Equal
- Addition
- Subtraction
- Multiplication
- Div 或 division 运算符返回给定被除数和除数的商。
- Mod 或 modulus 运算符返回给定被除数和除数的余数。
- Negative
- Not Equal
- EQUAL
布尔值
“布尔值”菜单包含了以下函数:
- True 返回 true。
- False 返回 false。
- AND 使用以下逻辑:如果两个参数均为 true,则该函数返回 true。如果有一个参数为 false,则该函数返回 false。
- OR 使用以下逻辑:如果有一个参数为 true,则该函数返回 true。如果两个参数均为 false,则该函数返回 false。
- Not 使用以下逻辑:如果参数为 false,则该函数返回 true。如果参数为 true,则该函数返回 false。
- Lang 返回 true 或 false,具体取决于上下文节点的语言与参数中指定的语言相同,还是属于参数中指定语言的子语言。
- Boolean 将参数转换为布尔值。有关此逻辑的详细信息,请参见 XPath 1.0 规范。
字符串
“字符串”菜单包含了以下函数:
- Contains 使用以下逻辑:如果第一个参数字符串不包含第二个参数字串,则该函数返回空字符串。否则,函数返回 false。
- Normalize Space 返回包含空白的参数字符串,这些空白将按照以下方法进行规格化:去除前导和结尾的空白并使用单个空格替换一系列空白字符。
- String 将对象转换为字符串。
- Starts With 使用以下逻辑:如果第一个参数字符串以第二个参数字符串开头,则该函数返回 true。否则,函数返回 false。
- String Length 返回字符串中的字符数。
- Substring 返回第一个参数的子串,该子串的起始位置由第二个参数指定,其长度由第三个参数指定。第一个字符的位置为 1,第二个字符的位置为 2,依此类推。第三个参数是可选的。如果未指定第三个参数,则该函数返回的子串由第二个参数指定的位置开始,一直延续到字符串结束。
- Substring Before 返回第一个参数字符串的子串,当第一个参数字符串中首次出现第二个参数字符串时,子串即为该位置前面的内容。如果第一个参数字符串不包含第二个参数字串,则该函数返回空字符串。
- Substring After 返回第一个参数字符串的子串,当第一个参数字符串中首次出现第二个参数字符串时,子串即为该位置后面的内容。如果第一个参数字符串不包含第二个参数字串,则该函数返回空字符串。
- Translate 返回第一个参数字符串,如果该字符串含有第二个参数字符串中的字符,则这些字符将被第三个参数字符串中相应位置的字符所替换。
- Concat 返回连接的参数。
- String Literal 用于输入字符串类型。
节点
“节点”菜单包含了以下函数:
- Local Name 返回参数节点集(最初使用文档顺序排列)中的节点展开名称的本地部件(展开的名称包含本地部件和名称空间 URI)。(展开的名称包含本地部件和名称空间 URI。)
- Name 返回表示参数节点集(最初使用文档顺序排列)中的节点展开名称的限定名称(展开的名称包含本地部件和名称空间 URI)。
- Namespace URI 返回参数节点集(最初使用文档顺序排列)中的节点展开名称的名称空间 URI(展开的名称包含本地部件和名称空间 URI)。
- Position 返回上下文位置。
- Last 返回上下文大小。
- Count 返回参数节点集中的节点数。
数值
“数值”菜单包含了以下函数:
- Number 将参数转换为数值。有关此逻辑的详细信息,请参见 XPath 1.0 规范。
- Number Literal 用于输入数值类型。
- Round 返回与参数最接近的整数数字。
- Sum 对于参数节点集中的每个节点,返回将节点字符串值转换为数值后所得结果的和。
- Floor 返回不大于该参数的最大整数值。
- Ceiling 返回不小于该参数的最小整数值。
回到顶部
映射示例
这些示例说明了多种不同的映射用例:
分配活动用例
假定您希望 BPEL 流程复制从合作伙伴接收的数据。请执行以下任务:
- 在接收活动后面添加一个分配活动。
- 选择该分配活动,并使用编辑器定义一个或多个分配副本。
以下示例说明了不使用任何 XPath 函数的分配副本。ItineraryIn 变量的 itinerary 部分将被复制到 ItineraryOut 变量的 itinerary 部分。请注意,左窗格和右窗格都包含相同的树组件。

单击以放大
以下示例说明了使用 concat XPath 函数的分配副本。输入变量 paramA 将连接至字符串型 Parameter A: 的结尾,并被复制到输出变量 paramA。

单击以放大
If 活动用例
假定您希望仅当某个条件为 true 时才执行一系列步骤。请执行以下任务:
- 在 BPEL 流程中添加一个 If 活动。
- 选择该分配活动,并使用编辑器定义一个或多个分配副本。
- 在 If 活动内添加一些步骤。
以下示例说明了该条件的映射。此映射使用 Not XPath 函数,该函数位于菜单栏的“布尔值”部分中。如果此航线包含机票预订,则 Not XPath 函数将返回 true。结果将被映射到右窗格中的“结果”节点。

单击以放大
谓词用例
假定您希望 BPEL 流程复制客户方(不超过 2 人)行程的行程数据。则输入记录会包含一个变量,用于指定客户方的旅客人数。请执行以下任务:
- 在“BPEL映射器”窗口的左窗格中,右键单击标记为星号(*)的重复节点,然后选择“新建谓词”。
将显示“谓词编辑器”窗口。
- 在中间窗格中添加 Less Than XPath 函数。
- 在中间窗格中添加 number literal XPath 函数。将值设置 3。
- 将变量节点映射到 Less Than XPath 函数的第一个参数。
- 将 number literal XPath 函数的结果映射到 Less Than XPath 函数的第二个参数。
- 将 Less Than XPath 函数的结果映射到右窗格中的“结果”节点。单击“确定”。
- 单击“确定”。
以下示例说明了映射在“谓词”窗口中的显示方式。单击“确定”后,您就可以在分配副本中使用谓词节点了。

单击以放大
如果 BPEL 流程收到了以下 XML,则谓词将选择第一个 Air 标记。
<Air>
<NumberInParty>2</NumberInParty>
</Air>
<Air>
<NumberInParty>4</NumberInParty>
</Air>
<Air>
<NumberInParty>6</NumberInParty>
</Air>
回到顶部