作为业务对象处理的第一步,连接器将业务对象转换为可以在 SAP 应用程序中处理的平面结构。平面结构的格式对于所有类型的业务对象(如基于事务调用的业务对象或基于 IDoc 的业务对象)都是相同的。平面结构是来自特定于应用程序的业务对象的重新格式化的数据。两种格式的数据之间的唯一差别是平面结构不保持父子业务对象关系。因此,连接器依靠一组规则来创建平面结构。
当将业务对象转换为平面结构时,连接器在内存中创建一个结构,然后用来自业务对象的数据填充该结构。在此过程中,连接器将以下数据从业务对象传递至 SAP 应用程序:
表 42 显示业务对象的通用平面结构。连接器在添加来自 WebSphere
业务对象的业务对象数据时使用此平面结构。
表 42. SAP 的 WebSphere 业务对象的通用平面结构表示
字段名 | 数据类型 | 长度 | 描述 |
---|---|---|---|
ATTR_NAME | CHAR | 32 | 属性名(例如 CustomerId) |
BLANK1 | CHAR | 1 | 定界符 |
ATTR_VALUE | CHAR | 200 | 属性值(例如 00000103) |
BLANK2 | CHAR | 1 | 定界符 |
ISKEY | CHAR | 1 | 1= true,0 = false;仅限于属性 |
BLANK3 | CHAR | 1 | 定界符 |
ISNEW | CHAR | 1 | 1 = 业务对象;0 = 查询描述或属性 |
BLANK4 | CHAR | 1 | 定界符 |
PEERS | CHAR | 6 | 指示一组业务对象中同级的数目 |
BLANK5 | CHAR | 1 | 定界符 |
OBJ_NUMBER | CHAR | 6 | 未使用 |
BLANK6 | CHAR | 1 | 定界符 |
APPTEXT | CHAR | 120 | 对象、查询描述或属性的特定于应用程序的信息 |
BLANK7 | CHAR | 1 | 定界符 |
要使数据转换能够正确进行,平面结构中的业务对象数据必须严格遵守一组规则。这些规则在以下初始数据转换步骤中进行定义:
当连接器用业务对象数据填充平面结构时,连接器从顶级业务对象开始,对每个业务对象循环两次。
表示子业务对象的属性不包括在它们的父代中。实际上,将作为完整的业务对象创建每个包含数据的子代。结果是按先深度后宽度来排序属性的单一列表。
图 72 举例说明了 SAP 的 WebSphere 业务对象的数据至平面数据结构的转换。数据转换始终遵循先深度后宽度的规则。在该示例中,顶级父业务对象 SAP_Order 具有两个子代 SAP_LineItem (1) 和 SAP_LineItem (2),这两个子代被认为是同级的。SAP_LineItem (1) 具有一个子业务对象 SAP_ScheduleLines。
当设计业务对象定义时,了解业务对象及其属性的排序很重要。下表举例说明了
WebSphere 业务对象至平面结构的转换结果。表 43 表示平面业务对象 SAP_Material 的平面结构,该对象的键值为
ItemID。在此示例中,该业务对象或任何属性没有特定于应用程序的信息。表 44 表示基于 IDoc 销售订单的分层业务对象的平面结构。
ATTR_NAME | ATTR_VALUE | ISKEY | ISNEW | PEERS | OBJ_ NUMBER | APPTEXT |
---|---|---|---|---|---|---|
BoName | SAP_Material | 0 | 1 | 1 | (空白) | (空白) |
BoVerb | Retrieve | 0 | 0 | 1 | (空白) | :/CWLD /DYNAMIC_RETRIEVE |
ItemID | 000000000000001179 | 1 | 0 | 1 | (空白) | (空白) |
ShortDesc | CxIgnore | 0 | 0 | 1 | (空白) | (空白) |
ObjectEventID | SAP_124 | 0 | 0 | 1 | (空白) | (空白) |
在此示例中,该业务对象或任何属性没有特定于应用程序的信息。
ATTR_NAME | ATTR_VALUE | ISKEY | ISNEW | PEERS | OBJ_ NUMBER | APPTEXT |
---|---|---|---|---|---|---|
BoName | SAP_Order | 0 | 1 | 1 | (空白) | YXRV4B01 |
BoVerb | Create | 0 | 0 | 1 | (空白) | [archive:methods] |
Currency | USD | 0 | 0 | 1 | (空白) | E1EDK01:CURCY |
OrderId | CxIgnore | 1 | 0 | 1 | (空白) | E1EDK01:BELNR |
ObjectEventId | SAP_124 | 0 | 0 | 1 | (空白) | E1EDK01: ObjectEventId |
BoName | SAP_LineItem | 0 | 1 | 2 | (空白) | Z1XRV40 |
BoVerb | Create | 0 | 0 | 2 | (空白) | (空白) |
Createdby | User1 | 1 |
| 2 | (空白) | Z1XRV40:ERNAM |
ObjectEventId | SAP_125 | 0 | 0 | 2 | (空白) | Z1XRV40: ObjectEventId |
BoName | SAP_ ScheduleLines | 0 | 1 | 1 | (空白) | E1EDK14 |
BoVerb | Create | 0 | 0 | 1 | (空白) | (空白) |
Qualifier | 001 | 1 | 0 | 1 | (空白) | Z1XRV40:QUALF |
OrganizationId | 1000 | 0 | 0 | 1 | (空白) | E1EDK14:ORGID |
ObjectEventId | SAP_126 | 0 | 0 | 1 | (空白) | E1EDK14: ObjectEventId |
BoName | SAP_LineItem | 0 | 1 | 2 | (空白) | Z1XRV40 |
BoVerb | Create | 0 | 0 | 2 | (空白) | (空白) |
Createdby | User1 | 1 | 0 | 2 | (空白) | Z1XRV40:ERNAM |
ObjectEventId | SAP_127 | 0 | 0 | 2 | (空白) | Z1XRV40: ObjectEventId |
连接器将为每个业务对象添加前两行 BoName 和 BoVerb。BoName 和 BoVerb 是不能用作业务对象属性的关键字。