“动态事务”功能模块是一个映射工具和动态代码生成器。它使用 SAP
的“调用事务”API 来将数据输入 SAP
应用程序。并且,它按对象和查询描述的组合来存储“批处理数据通信”(BDC)会话的静态定义。在将
BDC 数据传递至“调用事务”之前,将把业务对象属性值映射至 BDC
会话。在完成调用事务时,将在业务对象的适当值中设置产生的键值,并将来自调用事务的所有消息写入日志。
“动态事务”功能模块通过组合在“动态事务”表 /CWLD/WIZ_IN
中定义的 BDC 和来自传入业务对象的值,构建 BDC
会话来执行调用事务。当调用“动态事务”功能模块时,将执行下列步骤:
- 从 /CWLD/WIZ_IN 中检索所有条目,其中:
对象名 = objectName,查询描述 = objectVerb
- 根据属性名将字段输入值从业务对象映射至 BDC 会话。
- 已使用“调用事务”来处理 BDC 会话。
- 捕获键值,将“调用事务”消息写入日志并在业务对象中设置键。
- 在初始屏幕上输入的数据可以是所有行项的缺省值,因而减少了需要的行项输入。
- 行项概述屏幕可以提供足够的输入,而不是向下查找到详细信息屏幕(该屏幕可能需要其它输入)。
- 确认消息在 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。
- 完成时记下保存事务的命令。
表 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):
- 转至 IBM WebSphere BI Station(事务 /n/CWLD/HOME)。
- 重要提示:
- 当使用 IBM WebSphere BI Station 来生成业务对象定义或 ABAP
处理程序时,您必须以英语登录到 SAP 系统。WebSphere BI Station
日志仅以英语提供。
- 单击“开发”选项卡。
- 单击“基于事务 - 入站”部分中的“修改 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-MSGV1、SY-MSGV2、SY-MSGV3
或
SY-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 会话定义。
如果调用事务在失败时返回一条错误消息,您可能遇到以下描述的其中一个常见错误。
- SAP 应用程序调用了 BDC 不需要的屏幕,因此 SAP 应用程序返回消息 No
input available for program XX and screen
YY。如果发生这种错误,则将适当的条目添加至“动态事务”表来处理程序 XX
和屏幕 YY 的输入屏幕。
- SAP 应用程序根据 BDC 的指示来设置不存在的字段。最可能的情况是,SAP
应用程序执行了它自己的指令,而您未显式设置该指令。因此,您所在的屏幕不是预计的屏幕。如果发生这种错误,则重复此指令并仅添加使您进入适当屏幕的那部分。
当您单击第一个字段或者更改屏幕时,“入站向导”将记录您在事务中的导航、操作和字段输入。记录器将记录发生的每个操作,但不是您看到的所有内容。例如,当初始屏幕第一次出现时,记录器将捕获对事务的初始调用,但是不会捕获出现在该屏幕上的所有输入字段。如果想要能够使用某个输入字段,则必须向该字段中输入一些数据。并且,即使输入字段中可能包含缺省数据,也不会选取该数据,除非该数据是用手工输入的。
要创建新的 WebSphere 业务对象定义:
- 转至 IBM WebSphere BI Station(事务 /n/CWLD/HOME)。
- 重要提示:
- 当使用 IBM WebSphere BI Station 来生成业务对象定义或 ABAP
处理程序时,您必须以英语登录到 SAP 系统。WebSphere BI Station
日志仅以英语提供。
- 在“开发”选项卡上单击“入站向导”按钮。
- 输入以下信息:
- 业务对象名 -
业务对象类型的名称以及对象的每个实例的名称。如果您正在创建新的业务对象,则输入新的名称。建议您使用用来定义业务对象的简单名称。如果您正在使用现有业务对象,则从下拉列表中选择它。
- 查询描述 - 业务对象支持的查询描述。
- 事务代码 -
支持业务对象执行的必需功能的屏幕的事务代码。要获取一个屏幕的事务代码,单击“系统”菜单中的“状态”。事务代码列示在“事务”字段中的
SAP 数据下。
- 单击“记录”。
- 逐步执行支持业务对象功能的事务。使用所有必需的字段和屏幕。完成时,保存事务。
- 选择想要包括为业务对象中的元数据的组件。将光标放在该组件上,然后单击“选择/取消选择子树”按钮(F9)。缺省情况下,将选择所有组件。
- 生成新的动态对象或源代码。
- 要为“动态事务”表生成和插入元数据,单击“生成元数据”按钮(F6)。可以根据此数据来生成
WebSphere 业务对象定义。
- 要生成具有 BDC
数据和字段描述的文本文件,单击“在文本文件中生成代码”按钮(F5)。不能根据此数据来生成
WebSphere 业务对象定义。
