SAP ABAP BDC:什么是批量数据通信?

⚡ 智能摘要

SAP ABAP BDC(批处理数据通信)通过自动驱动标准事务将旧版数据传输到 R/3 系统。本页将介绍批处理输入会话、经典事务方法和调用事务方法、BDCDATA 结构、BDC_OPEN_GROUP 工作流以及批处理输入记录器。

  • 🔄 核心宗旨: BDC 会自动将数据集馈送到交易屏幕中,像用户一样运行每个屏幕和业务验证。
  • 🧾 批量输入会话: 会话将事务调用及其输入数据分组,并存储在数据库中,直到执行为止。
  • 🛠️ 两种方法: 传统的批量输入使用 BDC_OPEN_GROUP、BDC_INSERT 和 BDC_CLOSE_GROUP,而调用事务方法使用 CALL TRANSACTION USING。
  • 方法选择: 传统的批量输入与日志同步,而调用事务速度更快、异步,并且处理单个事务。
  • 🗂️ BDCDATA 结构: 字段 PROGRAM、DYNPRO、DYNBEGIN、FNAM 和 FVAL 分别描述每个步骤的屏幕、字段和值。
  • ⏺️ 录音机: 批处理输入记录器捕获手动交易,并生成会话或现成的 BDC 程序,该程序稍后在 SM35 中运行。

SAP ABAP BDC 批处理数据通信

批量输入简介

批输入通常用于将数据从非 R/​​3 系统传输到 R/3 系统或在 R/3 系统之间传输数据。

它是一种数据传输技术,允许您将数据集自动传输到属于交易的屏幕,从而传输到 SAP 系统。批输入由批输入会话控制。

批输入会话

将一系列事务调用与输入数据和用户操作组合在一起。批输入会话可用于执行批输入中的对话事务,其中部分或全部屏幕由会话处理。批输入会话作为数据库表存储在数据库中,并且可以在访问事务时在程序中用作内部表。

注意事项

  • BDI 的运作方式是 SAP 就像用户一样进行交易,但它会自动执行交易。所有屏幕验证和业务逻辑验证都将在使用批量数据输入时完成。
  • 适合输入大量数据。
  • 无需手动交互

批量输入方法

SAP 提供两种将遗留数据传输到 R/3 系统的基本方法。

  1. 经典的批量输入方法。
  2. 调用交易方法。

经典批量输入法

在此方法中,ABAP/4 程序将外部数据读取到 SAP 系统并存储在批处理输入会话中。

创建会话后,您可以运行会话来执行 SAP 其中的交易。

此方法使用功能模块 BDC_OPEN、BDC_INSERT 和 BDC_CLOSE

批量输入会话可以通过三种方式处理

  1. 在前台
  2. 在后台
  3. 加工过程中,有错误显示

如果您想测试数据传输,您应该在前台处理批量输入会话或使用错误显示。

如果您想执行数据传输或测试其性能,您应该在后台处理会话。

传统批量输入法注意事项

  • Sync同步处理
  • 为多个交易传输数据。
  • Sync同步数据库更新。
  • 每次会话都会生成一个批量输入过程日志。
  • 会话无法并行生成。

调用交易方法。

在这个方法中 ABAP/4 程序使用 CALL TRANSACTION USING 语句运行 SAP 交易。

整个批量输入过程在程序中在线进行

调用交易方式

注意事项:

  • 更快地处理数据
  • 异步处理
  • 为单笔交易传输数据。
  • 没有生成批输入处理日志。

传统批量输入与调用事务

这两种方法都能完成同一笔交易,但在速度、日志记录和错误处理方面有所不同。下表列出了每种方法的适用场景。

标准 经典批量输入 呼叫交易
技术 BDC_OPEN_GROUP、BDC_INSERT、BDC_CLOSE_GROUP 使用调用交易
的解决方案 Synchronous,稍后从SM35运行 在线运行,在程序中
交易 一次会话中多次交易 每次调用仅进行一次交易
历史记录 每个会话都会自动生成一个进程日志。 不记录日志,程序会收集消息
速度 速度较慢,但​​更稳定可靠且可重启。 更快
最适合 必须可审计的大型一次性遗留数据加载 交互式或高速传输单个文档

在比较了各种方法之后,下一节将介绍项目遵循的总体流程。

批量输入程序

批量输入程序

您通常会遵循以下步骤为您的组织开发批量输入

  1. 分析遗留数据。确定要传输的数据如何映射到 SAP 结构。还需注意必要的数据类型或数据长度转换。
  2. 产生 SAP 用于导出程序的数据结构。
  3. 将数据导出到顺序文件中。请注意,字符格式是预定义的 SAP 批处理输入程序。
  4. 如果 SAP 如果不使用提供的 BDC 程序,请编写自己的批输入程序。根据情况选择合适的批输入方法。
  5. 处理数据并将其添加到 SAP 系统.
  6. 分析进程日志。对于 CALL TRANSACTION 方法,如果没有创建适当的日志,请使用程序收集的消息。
  7. 根据过程分析的结果,纠正并重新处理错误的数据。

编写 BDC 程序

您可以遵循以下过程来编写 BDC 程序

  1. 分析交易以处理批量输入数据。
  2. 决定要使用的批量输入方法。
  3. 从顺序文件读取数据
  4. 执行数据转换或错误检查。
  5. 将数据存储在批量输入结构BDCDATA中。
  6. 为经典批输入生成批输入会话,或者直接使用 CALL TRANSACTION USING 语句处理数据。

批量输入数据结构

批量输入数据结构声明

DATA : BEGIN OF < bdc table>

OCCURS <occurs parameters>.

INCLUDE STRUCTURE BDCDATA.

DATA:END OF <bdc table>.
字段名称 类型 长度 描述
日语课程选择 CHAR 8 模块池
达普罗 荷兰国家计算机公司 4 Dynpro 号码
动力开始 CHAR 1 启动 dynpro
FNAM CHAR 35 字段名称
有效值 CHAR 80 字段值

特定屏幕的数据中字段的顺序并不重要

注意事项

  • 在填充 BDC 数据时,请务必考虑用户设置。这一点对于填写涉及数字的字段(例如数量、金额)尤为重要。用户设置决定了分组方式。ping 数字字符 例如:五万可以写成 50,000.00 或 50.000,00,具体取决于用户设置。
  • 压缩金额和数量字段的 FVAL 字段,以便它们左对齐。
  • 请注意,在填充 BDC 数据表时,通过 BDC 填充的所有字段都应被视为字符类型字段。
  • 在某些屏幕中,当您使用 BDC 填充表格控件中的值时,您必须注意默认屏幕大小上有多少行,并为这些行编写代码。如果您必须填充更多行,那么您必须编写“向下翻页”功能的代码,就像您手动填充表格控件时所做的那样。
  • 上述场景中出现的行数将根据用户使用的屏幕尺寸而有所不同。因此,请始终针对标准屏幕尺寸进行编码,并让您的 BDC 始终在标准屏幕尺寸下工作,而不管用户将屏幕尺寸设置为何种尺寸。

创建批输入会话

  1. 使用功能模块BDC_OPEN_GROUP打开批输入会话。
  2. 对于会话中的每个事务:
  3. 使用交易中处理的所有屏幕和字段的值填充 BDCDATA。
  4. 使用 BDC_INSERT 将事务转移到会话。
  5. 使用 BDC_CLOSE_GROUP 关闭批输入会话

示例:使用调用交易的 BDC

以下程序完整展示了调用事务的方法。它为事务的两个屏幕构建 BDCDATA 表,并以 N 模式(无显示)运行,同时使用错误表来报告故障。

REPORT z_bdc_call_transaction.

DATA: lt_bdcdata TYPE STANDARD TABLE OF bdcdata,
      ls_bdcdata TYPE bdcdata,
      lt_messages TYPE STANDARD TABLE OF bdcmsgcoll.

* Helper that appends one BDCDATA line
FORM bdc_field USING p_fnam p_fval.
  CLEAR ls_bdcdata.
  ls_bdcdata-fnam = p_fnam.
  ls_bdcdata-fval = p_fval.
  APPEND ls_bdcdata TO lt_bdcdata.
ENDFORM.

* Screen 1: start the dynpro, then fill the fields
CLEAR ls_bdcdata.
ls_bdcdata-program  = 'SAPMV45A'.
ls_bdcdata-dynpro   = '0101'.
ls_bdcdata-dynbegin = 'X'.
APPEND ls_bdcdata TO lt_bdcdata.

PERFORM bdc_field USING 'VBAK-AUART' 'OR'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.

* Run the transaction: mode N = no display, update S = synchronous
CALL TRANSACTION 'VA01'
  USING         lt_bdcdata
  MODE          'N'
  UPDATE        'S'
  MESSAGES INTO lt_messages.

IF sy-subrc <> 0.
  * Read lt_messages to report the errors that occurred
ENDIF.

💡提示: MODE 参数控制显示模式:A 显示所有屏幕,E 仅在发生错误时停止,N 静默运行。测试时使用 E,生产环境使用 N。

批量输入记录器

批量输入记录器(系统 > 服务 > 批量输入 > 记录器)记录手动输入的交易并创建批量输入会话,稍后可使用 SM35 执行。

批量输入记录器

  • 从批输入初始屏幕中选择“记录”按钮来启动批输入记录器。
  • 录音名称是用户定义的名称,可以与从录音创建的批量输入会话名称匹配。
  • 输入 SAP 交易并开始发布交易。
  • 在您完成发布后 SAP 交易中您可以选择获取交易并保存来结束记录或者选择下一个交易并发布另一个交易。
  • 保存记录后,您可以从记录中创建批输入会话和/或从记录中生成批输入程序。
  • 您创建的批输入会话现在可以像任何其他批输入会话一样进行分析。
  • 批量输入记录器功能生成的程序是数据接口程序员的强大工具。它提供了坚实的基础,然后可以根据客户要求进行修改。

⚠️警告: 录制程序会完整地记录屏幕显示过程,因此,仅针对特定数据(例如未完成弹出窗口)显示的屏幕不会被录制。务必使用能够触发所有可选屏幕的数据来测试生成的程序。

常见问题

BDC_OKCODE 包含用户通过按钮或按键触发的功能代码,例如 /00 代表回车,=SAVE 代表保存。它告诉屏幕在字段填写完毕后要执行的操作。

SM35 是批处理输入监视器。它列出由传统批处理输入创建的会话,在前台或后台运行这些会话,并显示进程日志,以便分析和重新处理失败的事务。

在没有 BAPI 的情况下,仍然会使用 BDC,因为它重用了事务的屏幕验证。LSMW 将 BDC、录制和 BAPI 封装在一个迁移工具中。 商业应用程序接口 当有稳定的 API 可用时,这是首选方案。

是的。ABAP 开发工具中的 AI 助手会读取录音或屏幕列表,并自动生成 BDCDATA 数据填充、CALL TRANSACTION 代码块以及消息处理代码。开发人员只需映射源文件并测试加载即可。

AI 工具会对旧文件进行分析,在加载之前标记缺失的必填字段和格式不匹配之处,并在加载之后汇总批量输入日志,以便更快地纠正和重新处理错误记录。

总结一下这篇文章: