BAPI 模块的工作方式

BAPI 模块实现 init()terminate()pollForEvents()doVerbFor() 方法。但是,因为 BAPI 模块仅支持请求操作,所以未使用 pollForEvents() 方法。

初始化和终止

init() 方法通过 SAP 网关打开与 SAP 应用程序的 RFC 连接。如果连接器未能初始化,则它使用 terminate() 方法来终止。连接器通过断开与 SAP 网关的连接来终止。

业务对象处理

实现一次可视连接器框架的业务对象处理程序中的 doVerbFor() 方法可启动 所有业务对象请求。可视业务对象处理程序处理在 BAPI 模块和集成代理程序之间传递的所有业务对象。在 BAPI 模块中,单个 BAPI 业务对象处理程序支持所有 BAPI 调用。

图 47 举例说明了 BAPI 模块的业务对象处理。

图 47. BAPI 模块的业务对象处理


一旦被可视业务对象处理程序调用,BAPI 业务对象处理程序就以下列方式执行:

  1. 从可视业务对象处理程序接收 SAP 的 WebSphere 业务对象。
  2. 用业务对象数据填充 BAPI 参数。
  3. 使用 RFC 执行 BAPI 调用并将 BAPI 参数传递至 SAP 应用程序。业务对象处理程序等待返回业务对象数据。
  4. 接收业务对象数据(BAPI 参数)。
  5. 将 BAPI 参数重新转换为 WebSphere 业务对象数据。
  6. 将业务对象传递至可视业务对象处理程序并最终传递至集成代理程序。

注:
如果“BAPI 模块”具有返回结构或返回表,则连接器检查消息类型 A(异常终止)和 E(错误)来确定是否成功处理了服务调用请求。消息类型 AE 指示未能处理服务调用请求。如果 BAPI 模块不具有返回结构或返回表,则您必须实现您自己的错误处理。在返回状态描述符中返回了结构或表中的一条或多条错误消息。

支持 BAPI

业务对象生成实用程序 SAPODA 生成支持 BAPI 的业务对象定义。SAPODA 解释 BAPI 的接口,将其参数映射至业务对象属性,并添加每个属性的特定于应用程序的信息(ASI)。

注:
某些 BAPI 没有与 WebSphere 业务对象中的简单属性对应的单一字段参数。连接器要求每个顶级业务对象都具有一个充当键属性的简单属性。因此,当从 BAPI 生成业务对象和业务对象处理程序而没有单一字段参数时,SAPODA 在顶级业务对象中创建一个名为 Dummy_key 的键属性,将它标记为键属性,并添加 dummy_key 作为此属性的特定于应用程序的信息。Dummy_key 为连接器提供一个键属性,以便它可以处理该业务对象。但是,连接器在修改应用程序数据时会忽略 Dummy_key 属性的值。

支持 BAPI 事务

连接器和 SAPODA 支持 SAP BAPI 事务(也称为“逻辑工作单元”)。BAPI 事务由一组 BAPI 组成,这些 BAPI 按顺序执行以便完成整个事务。使用同一 JCo 客户机连接来调用由多个 BAPI 组成的序列。

为了支持 BAPI 事务,SAPODA 生成充当一组子业务对象的包装程序的顶级业务对象,每个子业务对象都表示事务序列中的单个 BAPI 调用。BAPI 事务包装程序对象表示完整事务。每个第二级的子业务对象表示方法的结构参数或表参数。简单属性对应于方法的简单参数。

当成功处理了事务中的所有 BAPI 调用之后,BAPI 业务对象处理程序将返回 SUCCESS(成功)。业务对象处理程序还在发生故障时进行错误处理。如果未能处理事务中的 BAPI 调用,则事务中的后续调用将终止。并且,根据错误代码,BAPI_RETURN 将返回 FAIL 或 APPRESPONSETIMEOUT。

BAPI 接口不对事务提供回滚机制。可以通过下列其中一种方式来获得回滚:

注意,需要由业务流程逻辑来处理回滚。

有关 BAPI 事务业务对象的详细信息,请参阅为 BAPI 模块开发业务对象

支持 BAPI ResultSet

连接器和 SAPODA 对 DB2 Information Integrator(DB2 II)提供了 ResultSet 支持。SAPODA 生成是包装程序业务对象的 ResultSet 对象。此对象包含 BAPI_QueryBAPI_Result 两种属性,表示 Query BAPI 和 Result BAPI 对象。有关 BAPI ResultSet 对象的结构的详细信息,请参阅BAPI ResultSet 的业务对象结构

Copyright IBM Corp. 1997, 2004