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

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

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

  1. /CWLD/WIZ_IN 中检索所有条目,其中:
    对象名 = objectName,查询描述 = objectVerb
     
  2. 根据属性名将字段输入值从业务对象映射至 BDC 会话。
  3. 已使用“调用事务”来处理 BDC 会话。
  4. 捕获键值,将“调用事务”消息写入日志并在业务对象中设置键。

提示

为业务对象编写 BDC 会话

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

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

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

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

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

表 48 描述“动态事务”表 /CWLD/WIZ_IN 的列名。

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

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

  1. 转至 IBM WebSphere BI Station(事务 /n/CWLD/HOME)。
    重要提示:
    当使用 IBM WebSphere BI Station 来生成业务对象定义或 ABAP 处理程序时,您必须以英语登录到 SAP 系统。WebSphere BI Station 日志仅以英语提供。
  2. 单击“开发”选项卡。
  3. 单击“基于事务 - 入站”部分中的“修改 BO 元数据”按钮。

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

通过使用“计数器”列作为要讨论的行号,逐步执行 SAP4_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# 字段。

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 会话定义。

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

将入站向导用于动态事务

当您单击第一个字段或者更改屏幕时,“入站向导”将记录您在事务中的导航、操作和字段输入。记录器将记录发生的每个操作,但不是您看到的所有内容。例如,当初始屏幕第一次出现时,记录器将捕获对事务的初始调用,但是不会捕获出现在该屏幕上的所有输入字段。如果想要能够使用某个输入字段,则必须向该字段中输入一些数据。并且,即使输入字段中可能包含缺省数据,也不会选取该数据,除非该数据是用手工输入的。

要创建新的 WebSphere 业务对象定义:

  1. 转至 IBM WebSphere BI Station(事务 /n/CWLD/HOME)。
    重要提示:
    当使用 IBM WebSphere BI Station 来生成业务对象定义或 ABAP 处理程序时,您必须以英语登录到 SAP 系统。WebSphere BI Station 日志仅以英语提供。
  2. 在“开发”选项卡上单击“入站向导”按钮。
  3. 输入以下信息:
  4. 单击“记录”。
  5. 逐步执行支持业务对象功能的事务。使用所有必需的字段和屏幕。完成时,保存事务。
  6. 选择想要包括为业务对象中的元数据的组件。将光标放在该组件上,然后单击“选择/取消选择子树”按钮(F9)。缺省情况下,将选择所有组件。
  7. 生成新的动态对象或源代码。

Copyright IBM Corp. 1997, 2004