本主题仅适用于 IBM Business Automation Workflow Advanced 配置。

业务对象中的数组

可为业务对象中的元素定义数组以便该元素可包含多个数据实例。
可使用列表类型来为业务对象中的单个指定元素创建数组。 这次允许您使用该元素来包含多个数据实例。 例如,您可以使用数组在名为 telephone 的元素中存储多个电话号码,该元素在其业务对象包装器中定义为字符串。 您还可以通过使用 maxOccurs 值指定数据实例数来定义数组的大小。 以下示例代码显示如何创建将包含该元素的三个数据实例的数组:
<xsd:element name="telephone" type="xsd:string" maxOccurs="3"/>
这将为元素 telephone 创建一个列表索引,该索引最多可容纳三个数据实例。 如果您只计划在数组中有一个项,那么也可以使用值 minOccurs
生成的数组包含两项:
  • 数组的内容
  • 数组本身。
但是,为创建此数组,您需要通过定义包装器来执行中间步骤。 此包装器会将元素的属性替换为数组对象。 在上一个示例中,您可以创建 ArrayOfTelephone 对象以将元素 telephone 定义为数组。 以下代码示例说明如何完成此任务:
<?xml version="1.0" encoding="UTF-8"?>
 	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 	 	  <xsd:element name="Customer">
 	    <xsd:complexType>
 	      <xsd:sequence>
 	        <xsd:element name="name" type="xsd:string"/>
 	        <xsd:element name="ArrayOfTelephone" type="ArrayOfTelephone"/>
 	      </xsd:sequence>
 	    </xsd:complexType>
 	  </xsd:element>

 	  <xsd:complexType name="ArrayOfTelephone">
 	    <xsd:sequence maxOccurs="3">
 	      <xsd:element name="telephone" type="xsd:string" nillable="true"/>
 	    </xsd:sequence>
 	  </xsd:complexType> 
	</xsd:schema>

现在,telephone 元素显示为 ArrayOfTelephone 包装器对象的子代。

请注意,在上一个示例中,telephone 元素包含名为 nillable 的属性。 如果您希望数组下标中的某些项不包含任何数据,那么可以将此属性设置为 true。 以下示例代码说明如何表示数组中的数据:
<Customer>
	  <name>Bob</name>
	  <ArrayOfTelephone>
	    <telephone>111-1111</telephone>
	    <telephone xsi:nil="true"/>
	    <telephone>333-3333</telephone>
	  </ArrayOfTelephone>
	</Customer>
在此情况下,telephone 元素的数组下标中的第一个和第三个项包含数据,而第二个项不包含任何数据。 如果您未将 nillable 属性用于 telephone 元素,那么您必须使前两个元素包含数据。
您可以使用 IBM® Business Automation Workflow 中的服务数据对象 (SDO) 序列 API 作为替代方法来处理业务对象数组中的序列。 以下示例代码为 telephone 元素创建一个数组,其数据与上一个示例中显示的数据相同:
DataObject customer = ...
	customer.setString("name", "Bob");
	 
	DataObject tele_array = customer.createDataObject("ArrayOfTelephone");
	Sequence seq = tele_array.getSequence();  // The array is sequenced
	seq.add("telephone", "111-1111");
	seq.add("telephone", null);
	seq.add("telephone", "333-3333");
可使用与以下示例类似的代码来返回给定元素数组下标的数据:
String tele3 = tele_array.get("telephone[3]");  // tele3 = "333-3333"
在此示例中,名为 tele3 的字符串将返回数据“333-3333”。

可使用固定宽度或置于 JMS 或 MQ 消息队列的限定数据在列表下标中输入该数组的数据项。 还可使用包含具有正确格式的数据的平面文本文件来完成此任务