ABAP 处理程序的功能是将业务对象数据输入 SAP 应用程序数据库或从 SAP 应用程序数据库中输出。当处理业务对象数据时,ABAP 处理程序执行以下操作:
每个 ABAP 处理程序接收相同格式(平面结构)的业务对象数据。但是,每个 ABAP 处理程序都对业务对象具有特定要求,这些要求由 WebSphere 业务对象定义的复杂性、SAP 提供的本机 API 和 ABAP 处理程序提供的功能级别确定。由于这些原因,ABAP 处理程序可以通过对业务对象数据进行语法分析 来将该数据解释为特定于业务对象的结构。这使 ABAP 处理程序能够更容易地处理数据。
适配器提供了几个 ABAP 处理程序,如 IDoc 处理程序。IDoc 处理程序通过提供 ABAP 处理程序来利用 SAP 的 IDoc 技术,即,将业务对象数据重新格式化为基于 IDoc 的结构来解释业务对象数据,以便 ABAP 处理程序使用。
一旦 ABAP 处理程序解释了业务对象数据,ABAP 处理程序就必须将该数据与 SAP 应用程序数据库集成在一起。它必须处理业务对象数据以使用 SAP 本机 API(如“调用事务”、BAPI 或 ABAP SQL)来将数据输入应用程序数据库或从应用程序数据库中输出。
创建、更新或删除操作的目的是要修改 SAP 应用程序数据库。虽然给定业务对象的 SAP 应用程序数据库模式定义数据的结构,但由 SAP 提供的修改该数据的事务具有更广的影响范围。因此,直接修改 SAP 应用程序的应用程序数据库表可能会对应用程序的数据完整性造成灾难性的后果。
SAP 不会直接修改数据库表,而是为创建、更新和删除操作提供一个灵活的 ABAP API(调用事务)。“调用事务”是 SAP 提供的用于将数据输入 SAP 应用程序的功能。它通过使用联机用户将在事务中使用的相同屏幕来保证数据遵循 SAP 的数据模型。此过程通常称为屏幕搜集。
如果查询描述是“检索”,则连接器使用 ABAP SQL 语句来从 SAP 应用程序数据库检索数据。当获取数据时,业务对象数据为 where 子句提供键。此检索数据的方法的困难在于必须以表示业务对象结构的格式表示检索的数据。将在 ABAP 处理程序 ABAP 代码中执行此操作。
如果 ABAP 处理程序返回非零代码,则不会将任何业务对象返回至连接器。如果 ABAP 处理程序处理成功,则连接器希望反映所执行操作的新业务对象数据。例如,在成功创建之后,返回的业务对象是最初发送进来的业务对象的精确副本,只是更新了键。同样,成功的检索将产生业务对象的结构完整实例。但是,创建、更新和删除操作对返回的业务对象具有与检索操作不同的需求。
当 InterChange Server(ICS)是集成代理程序时,需求的差别来自 WebSphere Business Integration 如何处理业务对象,尤其是如何处理映射期间对对象标识的动态交叉引用。当连接器在执行创建或更新操作之后将业务对象返回至 InterChange Server 时,映射基础结构尝试用新获得的对象标识来更新交叉引用表。将通过查找在将业务对象最初发送至连接器时设置的业务对象的 ObjectEventId 属性值来完成更新。
因为 ABAP 处理程序负责将对象标识与返回至连接器的业务对象“绑定”在一起,所以这对于 ABAP 处理程序很重要。通常,因为不存在相应的动态交叉引用,所以这对于检索操作不是问题。检索操作生成返回至连接器的全新业务对象。此业务对象与原始业务对象的结构没有任何直接关系。
ABAP 处理程序返回的业务对象数据必须处于与最初将该数据传递至功能模块 Y_XR_RFC_DO_VERB_NEXTGEN 时相同的平面结构格式。ABAP 处理程序只需要发送出简单类型属性以及每个属性的以下信息:
因为连接器仅使用特定于应用程序的信息来根据此数据创建业务对象,所以此时不需要属性名。将不使用也不应添加用于开始和结束业务对象或对象类型属性的标识。例如,从 ABAP 处理程序返回的业务对象中将不使用 BoName 和 BoVerb 行。最初将它们传递至 ABAP 处理程序只是为了便于处理。
当 ABAP 处理程序用表示 WebSphere 业务对象的业务对象响应数据来填充平面结构时,它必须遵守下面的一组规则:
图 71 举例说明了平面业务对象(无对象类型属性)。
表 42 表示平面业务对象 SAP_Material 的结构,该对象的键值为
ItemID。注意,字段 ATTR_NAME 不是必需的,APPTEXT
对于每个属性是唯一的。并且,由于此业务对象是平面的,所以 PEERS
字段可以保留为空白。
ATTR_NAME | ATTR_VALUE | ISKEY | ISNEW | PEERS | OBJ_ NUMBER | APPTEXT |
---|---|---|---|---|---|---|
(空白) | 000000000000001179 | (空白) | (空白) | (空白) | (空白) | ItemId |
(空白) | Toaster 6000 | (空白) | (空白) | (空白) | (空白) | ShortDesc |
(空白) | SAP_124 | (空白) | (空白) | (空白) | (空白) | ObjectEventId |
图 72 举例说明了分层业务对象(包含对象类型)。
表 43 显示基于 IDoc
销售订单的分层业务对象的平面结构表示。注意,字段 ATTR_NAME
不是必需的,APPTEXT
对于每个属性是唯一的。并且,由于此业务对象是分层的,所以 PEERS
字段列示适当的关系。
ATTR_NAME | ATTR_VALUE | ISKEY | ISNEW | PEERS | OBJ_ NUMBER | APPTEXT |
---|---|---|---|---|---|---|
(空白) | USD | 0 | 0 | 1 | (空白) | E1EDK01:CURCY |
(空白) | 0000000101 | 0 | 0 | 1 | (空白) | E1EDK01:BELNR |
(空白) | SAP_124 | 0 | 0 | 1 | (空白) | E1EDK01: ObjectEventId |
(空白) | User1 | 0 | 0 | 2 | (空白) | Z1XRV40:ERNAM |
(空白) | SAP_125 | 0 | 0 | 2 | (空白) | Z1XRV40: ObjectEventId |
(空白) | 001 | 0 | 0 | 1 | (空白) | Z1XRV40:QUALF |
(空白) | 1000 | 0 | 0 | 1 | (空白) | E1EDK14:ORGID |
(空白) | SAP_126 | 0 | 0 | 1 | (空白) | E1EDK14: ObjectEventId |
(空白) | User1 | 0 | 0 | 2 | (空白) | Z1XRV40:ERNAM |
(空白) | SAP_127 | 0 | 0 | 2 | (空白) | Z1XRV40: ObjectEventId |