使用动态事务开发业务对象

“动事务索”功能模块是一个带有动态代码生成器的映射工具。它使用 SAP 的“调用事务”API 来将数据输入 SAP 应用程序。并且,它按对象/详细描述组合来存储“批处理数据通信”(BDC)会话的静态定义。在将 BDC 数据传递至“调用事务”之前,将把业务对象属性值映射至 BDC 会话。在完成调用事务时,将在业务对象的适当值中设置产生的键值,并将来自调用事务的所有消息写入日志。

注:
如果“调用事务”失败,则连接器不会将 BDC 会话存储在 SAP 中重新处理。废弃版本的连接器代理程序会存储 BDC 会话;但使用的是在交叉引用和请求处理中导致不一致的存储会话。

“动态事务”功能模块通过组合在“动态事务”表 YXR_CHANGE 中定义的 BDC 和来自入局业务对象的值,构建 BDC 会话来执行调用事务。当调用“动态事务”功能模块时,将执行下列步骤:

  1. YXR_CHANGE 中检索所有条目,其中:

    对象 = objectName查询描述 = objectVerb

  2. 根据属性名将字段输入值从业务对象映射至 BDC 会话。
  3. 已使用“调用事务”来处理 BDC 会话。
  4. 捕获键值,将“调用事务”消息写入日志并在业务对象中设置键。

注:
您必须使用 IBM WebSphere InterChange Server 连接器工具窗口(YXR1)来创建 WebSphere 业务对象,然后才能生成业务对象定义。

提示

为业务对象编写 BDC 会话

编写 BDC 会话需要了解 SAP 事务的设计。SAP 事务允许以各种顺序和在不同屏幕上输入相同的数据。通常,每种顺序或流都会显示额外的功能。因此,在某些屏幕上将进行验证某种数据并且需要输入字段,而在其它屏幕上则不需要。难处在于要找出最省力的顺序。简单的 BDC 会话比复杂的 BDC 会话更稳定。

当 SAP 事务在后台进程中使用“调用事务”方法进行访问而不是联机进行访问时,它的行为可能会不同。例如,可能会出现不同的或额外的屏幕,或输入字段可能位于与显示的联机调查不同的屏幕上。出现这种差异的原因是因为在后台执行而不是联机执行时,事务的控制代码可能指示不同的行为。因此,与您逐步执行事务一样,当重新处理失败的业务事件时,联机测试可能起作用,但是,当处理同一对象时,连接器仍会失败。如果发生这种错误,则修改 BDC,以便它在后台进行处理。如果您修改 BDC,您可能会遇到 BDC 在后台进行处理但联机处理时仍失败的情况。

您在“动态事务”表中定义的 BDC 是静态的。如果某些输入数据导致弹出其它屏幕或其它字段在运行时变为必填字段,则它在事务期间不能作出反应。正确地调查事务的配置对于能否预测一致的行为非常重要。对事务进行几次试验,那么重复的行为可以成为您的准则。

一旦确定了屏幕流,则遵循以下步骤并将您收集的信息记录在电子表格中。

  1. 转至支持您的对象的事务并标识事务代码。
  2. 标识您需要的屏幕和输入字段的 BDC 元素。
  3. 标识您继续处理到下一屏幕所需要的菜单命令。
  4. 对每个必需的屏幕重复步骤 2 和 3。
  5. 完成时记下保存事务的命令。

表 45 描述动态事务表 YXR_CHANGE 的列名。

表 45. YXR_CHANGE 表的动态检索条目
字段名 描述 何时使用 技术名称
对象名 WebSphere 业务对象名 始终 OBJ_NAME
查询描述 查询描述(创建、更新、删除或检索) 始终 OBJ_VERB
计数器 计数器 始终 POSNR
程序 与屏幕相关的程序 BDC 屏幕标识 PROG_NAME
屏幕号 与屏幕相关的屏幕号 BDC 屏幕标识 DYNPRO
开始 指定新的屏幕 BDC 屏幕标识 DYNBEGIN
BDC 字段名 BDC 输入字段名 BDC 输入字段 FNAM
缺省值 静态缺省值,该值在 IBM WebSphere 业务对象中未提供条目或者因为条目是命令值而使用 BDC_OKCODE 时使用 可能不会始终传递进一个值,而该值对于事务是必需的 DEFLT_VAL
SY 字段 将用作缺省值(例如:DATUM)的动态系统字段 未传递进值,或者应该由 SAP 系统字段确定值 SYFIELD
返回 一个 1 至 4 之间的数字,它标识哪个系统消息字段在事务完成时返回键值(sy-msgv#) 应接收键值的业务对象键属性 RETURNFLD
业务对象中的字段名称 WebSphere 业务对象中的属性,用于提供输入值 BDC 输入字段 SOURCEFLD
长度 字符长度,从应该用于输入的属性值的 0 位算起。 仅当使用包含组合值的属性时才相关 LENGTH

要定义或修改业务对象的元数据(将信息传送至 YXR_CHANGE):

  1. 转至“IBM WebSphere InterChange Server 连接器工具”窗口(事务 YXR1)。
  2. 从“定制”菜单,单击“调用事务”,然后单击“修改”、“创建”或“更新”。

定义业务对象的元数据很简单。对于每个屏幕,第一个条目标识屏幕,后面的条目标识输入字段,最后一个条目必须是命令。此分组对每个屏幕重复。

图 74 显示 SAP CustomerMaster 业务对象用来创建客户(事务 XD01)的动态事务表。

图 74. SAP CustomerMaster 业务对象的动态事务


通过使用“计数器”列作为要讨论的行号,逐步执行 SAP CustomerMaster 示例。

100
从程序 SAPMF02D 的屏幕号 100 开始。这是一个新屏幕,即第一个屏幕,因此在“开始”列中标记了它。

110
在屏幕 110 上,使用来自业务对象中 Customer_account_group 属性的值,并将它添加至“BDC 字段名”列(值为 RF02D-KT0KD)。将缺省值指定为 0001。如果 Customer_account_group 属性包含 CxIgnore,则“BDC 字段名”列接收缺省值 0001

120
Customer_Account_Number 属性是键值,因此在“调用事务”期间不设置它。SAP 在内部指定该键值,并仅在成功记入事务之后才使该键值可用。因此,将“BDC 字段名”列保留为空白,但应在表中包括一个条目,因为当结束“调用事务”返回 Customer_Account_Number 属性时,必须使用此键值来设置该属性。还应在 CustomerNumber 的“程序”列中输入单词 RETURN

根据事务不同,SAP 在以下四个可能字段的其中一个字段中返回键值:SY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4。要指定您想在特定属性中设置返回值,在“返回”列中输入一个 1 至 4 之间的数字。此数字对应于包含键值的 SY-MSGV# 字段。例如,图 74 举例说明了“返回”列中的 1,它指示 SY-MSGV1 包含客户号。

130
您完成了为第一个屏幕输入必要的值,因此在“缺省值”列中输入命令 /00 以模拟按 Enter 键。这使您进入下一个事务屏幕。在屏幕输入字段中输入命令 BDC_OKCODE,该字段是您输入事务代码的位置。

140
此时,您在下一个事务屏幕中。输入地址信息。因为它是新屏幕,所以在“开始”列中标记它。在此示例中,第二个屏幕和与初始屏幕相同的程序相关,只是屏幕号从 100 更改为 110。但情况并非总是如此。

150 -210
在业务对象中使用来自 Name_1、Sort_field、City、P_0_Box_postal_code、 Country_key、Language_keys 和 Post_office_box 属性的值,并将相应的值添加至“BDC 字段名”列。

220
与行 130 类似,此屏幕的处理已完成。但是,输入命令值 UPDA 以保存事务,而不是只模拟 Enter 键。这使您进入下一个事务屏幕。

230
此时,您在第三个事务屏幕中,因此在“开始”列中标记它。因为您的业务对象不需要此屏幕中的数据,因此,您将在下一行中完成对此屏幕的处理。

240
与行 130 类似,此屏幕的处理已完成。输入命令值 /00 以模拟按 Enter 键。这使您进入最终的事务屏幕。

250
此时,您在最终的事务屏幕中。在“开始”列中标记它。

260
与行 150-210 类似。使用来自业务对象属性 Transport_zone_to_which_or_from_which_the_goods
_are_delivered 的值,并将其相应值(KNA1-LZONE)添加至“BDC 字段名”列。

270
与行 220 类似,对此屏幕的处理已完成且事务也已完成,因此输入命令值 UPDA 进行保存。这是“调用事务”API 接收的最后一个操作。

280
任何业务对象的最后条目总是事务代码的说明。关键字 TCODE 在“程序”列,而事务代码在“BDC 字段名”列。

这样就完成了 SAP4_CustomerMaster 业务对象的 BDC 会话定义。

如果“调用事务”在失败时返回一条错误消息,您可能遇到以下描述的其中一个常见错误。

Copyright IBM Corp. 1997, 2004