业务对象结构

连接器假定每个个体业务对象由一个或多个数据库表来表示,并假定该业务对象内的每个简单属性(即,表示单值的属性,如 StringIntegerDate)由其中一个表中的列表示。以下情况是有效的:

SAP 的 WebSphere 业务对象可以是平面的或分层的。平面业务对象的所有属性都是简单的并表示一个单值。

分层业务对象具有表示单个子业务对象、一组子业务对象或两者组合的属性。同样,每个子业务对象都可以包含单个子业务对象或一组业务对象等等。

业务对象关系

表示一个子代或一组子代的属性的 Cardinality 特性确定父代和子代之间的关系类型:

连接器不会以与多基数关系不同的方式来处理单基数关系。但是,当数据库表具有单基数或多基数关系时,外键关系中存在结构差别。由于下列原因,这种差别是很重要的:

在任一情况下,父代和子代业务对象之间的外键关系都由子业务对象键属性的特定于应用程序的信息指定。有关更多信息,请参阅业务对象属性特性简单属性的特定于应用程序的信息

单基数关系示例

图 60 提供了一个为处理 SAP 中的客户对象而开发的简单 WebSphere 业务对象的示例。此 SAP_Customer 示例与它包含的地址对象示例具有单基数关系(addr_data[1] 属性具有基数 1)。子业务对象中的主键属性(address_id)引用父业务对象中的非主键(address_id)。

图 60. 客户和地址关系示例


以下 SELECT 语句及其输出举例说明了从以上业务对象表示的表中检索数据的过程:

SELECT * FROM KNA1
  
 KUNNR          NAME1          ADRNR
 -----          -------------  ----------
 10254          JOE'S PIZZA          2208
 10255          LARRY'S HARDWARE     2209
  
 SELECT * FROM ADRC
  
 ADDRNUMBER          CITY1          REGION
 ----------          ----           -----
 2208                BURLINGAME     CA
 2209                SAN FRANCISCO  CA
 

在以上示例中,每个客户(Joe's Pizza 和 Larry's Hardware)都具有单个地址。如果将 KUNNR 和 ADDRNUMBER 列分别定义为它们的表的主键约束,则以上结构确保每个客户都只能具有一个相关地址。

注:
为了简单起见,本文档中的举例说明不显示由连接器用来确定 SAP 应用程序数据库中表和字段的特定于应用程序的信息。

多基数关系示例

图 61 举例说明了多基数关系。在该示例中,ID=ABC 是具有父代的主键的简单属性,child[n] 是表示一组子业务对象的属性。

图 61. 多基数业务对象关系


图 62 提供了一个为处理 SAP 中的客户对象而开发的不同 WebSphere 业务对象的示例。此 SAP_Customer 示例与它包含的销售视图对象示例具有多基数关系(sales_view_data[n] 属性具有基数 n)。子业务对象中的主键属性(customer_id)引用父业务对象中的主键(customer_id)。

图 62. 客户和销售视图关系示例


以下 SELECT 语句及其输出举例说明了从其中每个表中检索数据的过程:

SELECT * FROM KNA1
  
 KUNNR          NAME1
 -----          -------------
 10254          JOE'S PIZZA
 10255          LARRY'S HARDWARE
  
 SELECT * FROM KNVV
  
 KUNNR          VKORG          VTWEG          SPART
 ----------     -----          -----          -----
 10254          EURP          01             12
 10255          EURP          01             09
 10255          USA           01             13
 10255          USA           01             14
 

在此示例中,Joe's Pizza 具有一条相关的销售视图记录,而 Larrys Hardware 具有三条相关的销售视图记录。以上结构允许每个客户具有 0 条或多条相关的销售视图记录。

处理长数据行

SAP 的 RFC_READ_TABLE 功能将数据检索限制为每行数据 512 个字节。许多 SAP 表的每行数据超过 512 个字节。但是,大多数业务对象都表示所有数据库字段的小子集。因此,一个业务对象中所有属性的总长度很少超过最大值 512 个字节。

在要求连接器从单个数据库表检索超过 512 个字节数据的那些情况下,必须在不同的单基数子业务对象中表示额外的字段。例如,如果业务对象必须表示单个表中 1500 个字节的数据,则顶级业务对象至少包含两个单基数子业务对象。父代或子代都没有其总长度(即它们的最大长度之和)超过 512 个字节的属性。

注:
如果一个业务对象表示多个数据库表,则表示每个表的属性中值的总长度不能超过 512 个字节。但是,此限制不适合于所有属性的值的总长度。例如,如果业务对象表示来自表(这些表存储关于客户和客户伙伴的信息)的数据,则用于表示客户的那些属性值不能超过 512 个字节,且用于表示客户伙伴的那些属性值不能超过 512 个字节,但这些属性的组合值可以超过 512 个字节。

业务对象查询描述处理

本节概述连接器处理具有“检索”查询描述的业务对象请求所执行的步骤。连接器递归地处理分层业务对象;即,它对每个子业务对象执行相同的步骤,直到它已处理所有个体业务对象。

业务对象比较

当处理来自集成代理程序的检索请求时,连接器尝试返回与业务对象的当前数据库表示匹配的业务对象。换句话说:

因此,当分层动态检索模块接收到具有“检索”查询描述的业务对象请求时,它通过在应用程序中递归地向下查找整个对象并检索当前数据库表示来创建一个响应业务对象。为了执行该检索,连接器使用在顶级请求业务对象中指定的键值。因此,该响应业务对象(它包含该顶级父代的所有子代 )可能具有与请求业务对象不同的简单属性值和不同的子业务对象。

例如,假设集成代理程序将以下 SAP_Customer 业务对象传递至分层动态检索模块:

在当前数据库表示中,如果 SAP_Customer 2345 包含的一组 SAP_SalesView 子业务对象不包括 sales_org A,则连接器的响应业务对象不包含该子代。但是,如果 SAP_Customer 2345 的当前数据库表示包括 sales_org D 和 sales_org E,则连接器在响应业务对象中包括那些子代。SAP 分层动态检索模块在结束检索时返回到集成代理程序的业务对象如下:

注:
如果连接器在创建特定响应业务对象时从多个表读取,则该业务对象不会与单个数据库对象匹配。而是,它与从指定的表中选择的字段匹配。

检索操作

当检索业务对象时,如果操作成功,则连接器返回 VALCHANGE 状态(而不管该操作是否导致了对业务对象的更改),或者,如果操作失败则返回 FAIL 状态。

连接器在检索分层业务对象时执行以下步骤:

  1. 从它从集成代理程序接收到的顶级业务对象中除去所有子业务对象。
  2. 调用 RFC_READ_TABLE 函数来从数据库中检索顶级业务对象

    连接器使用请求业务对象中的键值来构建 SELECT 语句的 WHERE 子句。检索结果导致以下其中一项操作:

  3. 递归地检索所有子业务对象(单基数和多基数)。

    连接器调用 RFC_READ_TABLE 功能,该功能使用适当的外键值来构建 SELECT 语句的 WHERE 子句。连接器以下列方式来处理标记为必需的属性:

    对于返回的每条记录,连接器执行以下操作:

    1. 创建正确类型的新的个体业务对象。
    2. 根据返回的行中的值设置当前业务对象的所有属性。
    3. 递归地检索当前业务对象的所有子代。

      注意: 如果单基数子代的检索返回多条记录,则连接器仅返回第一条记录。

    4. 将当前业务对象及其所有子代插入父代的适当单基数属性或数组属性。

注:
业务对象可以具有不对应于任何数据库列的属性,如占位符属性。在检索期间,连接器不会在顶级业务对象中更改这种属性;它们仍保持设置为从集成代理程序接收的值。这些属性的特定于应用程序的信息必须为空白。

Copyright IBM Corp. 1997, 2004