“动事务索”功能模块是一个带有动态代码生成器的映射工具。它使用 SAP
的“调用事务”API 来将数据输入 SAP
应用程序。并且,它按对象/详细描述组合来存储“批处理数据通信”(BDC)会话的静态定义。在将
BDC 数据传递至“调用事务”之前,将把业务对象属性值映射至 BDC
会话。在完成调用事务时,将在业务对象的适当值中设置产生的键值,并将来自调用事务的所有消息写入日志。
- 注:
- 如果“调用事务”失败,则连接器不会将 BDC 会话存储在 SAP
中重新处理。废弃版本的连接器代理程序会存储 BDC
会话;但使用的是在交叉引用和请求处理中导致不一致的存储会话。
“动态事务”功能模块通过组合在“动态事务”表 YXR_CHANGE 中定义的
BDC 和来自入局业务对象的值,构建 BDC
会话来执行调用事务。当调用“动态事务”功能模块时,将执行下列步骤:
- 从 YXR_CHANGE 中检索所有条目,其中:
对象名 =
objectName,查询描述 =
objectVerb
- 根据属性名将字段输入值从业务对象映射至 BDC 会话。
- 已使用“调用事务”来处理 BDC 会话。
- 捕获键值,将“调用事务”消息写入日志并在业务对象中设置键。
- 注:
- 您必须使用 IBM WebSphere InterChange Server 连接器工具窗口(YXR1)来创建
WebSphere 业务对象,然后才能生成业务对象定义。
- 在初始屏幕上输入的数据可以是所有行项的缺省值,因而减少了需要的行项输入。
- 行项概述屏幕可以提供足够的输入,而不是向下查找到可能需要其它输入的详细信息屏幕。
- 确认消息在 BDC 中通常不需要回答;例如,Are you
sure you want to save?
- 在您每次以更改方式进入和退出表维护时,对于每个对象和查询描述组合,计数器以
10 为增量重新编号。
- 在执行期间,“调用事务”使用用户设置,将日期格式化。确保连接器用户已设置为使用
YYYY-MM-DD 日期格式的变体。这是由 WebSphere Business Integration
系统使用的标准日期格式。同样,如果您要通过逐步执行事务来重新处理业务对象,则更改您自己的用户设置。
编写 BDC 会话需要了解 SAP 事务的设计。SAP
事务允许以各种顺序和在不同屏幕上输入相同的数据。通常,每种顺序或流都会显示额外的功能。因此,在某些屏幕上将进行验证某种数据并且需要输入字段,而在其它屏幕上则不需要。难处在于要找出最省力的顺序。简单的
BDC 会话比复杂的 BDC 会话更稳定。
当 SAP
事务在后台进程中使用“调用事务”方法进行访问而不是联机进行访问时,它的行为可能会不同。例如,可能会出现不同的或额外的屏幕,或输入字段可能位于与显示的联机调查不同的屏幕上。出现这种差异的原因是因为在后台执行而不是联机执行时,事务的控制代码可能指示不同的行为。因此,与您逐步执行事务一样,当重新处理失败的业务事件时,联机测试可能起作用,但是,当处理同一对象时,连接器仍会失败。如果发生这种错误,则修改
BDC,以便它在后台进行处理。如果您修改 BDC,您可能会遇到 BDC
在后台进行处理但联机处理时仍失败的情况。
您在“动态事务”表中定义的 BDC
是静态的。如果某些输入数据导致弹出其它屏幕或其它字段在运行时变为必填字段,则它在事务期间不能作出反应。正确地调查事务的配置对于能否预测一致的行为非常重要。对事务进行几次试验,那么重复的行为可以成为您的准则。
一旦确定了屏幕流,则遵循以下步骤并将您收集的信息记录在电子表格中。
- 转至支持您的对象的事务并标识事务代码。
- 标识您需要的屏幕和输入字段的 BDC 元素。
- 标识您继续处理到下一屏幕所需要的菜单命令。
- 对每个必需的屏幕重复步骤 2 和 3。
- 完成时记下保存事务的命令。
表 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):
- 转至“IBM WebSphere InterChange Server 连接器工具”窗口(事务 YXR1)。
- 从“定制”菜单,单击“调用事务”,然后单击“修改”、“创建”或“更新”。
定义业务对象的元数据很简单。对于每个屏幕,第一个条目标识屏幕,后面的条目标识输入字段,最后一个条目必须是命令。此分组对每个屏幕重复。
图 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-MSGV1、SY-MSGV2、SY-MSGV3
或
SY-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 会话定义。
如果“调用事务”在失败时返回一条错误消息,您可能遇到以下描述的其中一个常见错误。
- SAP 应用程序调用了 BDC 不需要的屏幕,因此 SAP
应用程序返回消息没有可用于程序 XX 和屏幕 YY
的输入。如果发生这种错误,则将适当的条目添加至“动态事务”表来处理程序
XX 和屏幕 YY 的输入屏幕。
- SAP 应用程序根据 BDC 的指示来设置不存在的字段。最可能的情况是,SAP
应用程序执行了它自己的指令,而您未显式设置该指令。因此,您所在的屏幕不是预计的屏幕。如果发生这种错误,则重复此指令并仅添加使您进入适当屏幕的那部分。
