
业务对象中的数组
可为业务对象中的元素定义数组以便该元素可包含多个数据实例。
可使用列表类型来为业务对象中的单个指定元素创建数组。 这次允许您使用该元素来包含多个数据实例。 例如,您可以使用数组在名为
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 消息队列的限定数据在列表下标中输入该数组的数据项。 还可使用包含具有正确格式的数据的平面文本文件来完成此任务