BDC模式与OKCODE、 CALL TRANSACTION用法

BDC(Batch Data Conversion):在SAP系统里,由于某种原因,可能需要重复输入数据,(数据不同,但是操作是相同的,典型的情形就是切换系统的时候,旧系统的数据需要导入SAP),大致过程不外乎是这样: 输入一个t-code,
进入一个某个屏幕,然后输入一个值(有时还要加上一些附加的checkbox选项等),点执行或者确定按钮,
进入另一个屏幕,在某些字段输入值(也可能是标注checkbox选中或者不选中)或者修改这些字段里的值。

MODE 确定批输入的执行模式,有下面几个可选值:(执行模式常用的是A N)

MODE确定批输入的执行模式
A显示所有输入屏幕,如果在 bdc_tab 中包含该屏幕的功能码,则会出现小窗口显示这个功能码。它也是默认值,如果指定不是下面的值,则都认为是 A。 
E只有在出现错误时才显示屏幕,用户可以修正数据,修正后程序可以继续处理。
N不显示屏幕的静默模式。如果到达被调用事务的断点,则系统处理终止,并设置一些系统字段。sy-subrc 为 1001,sy-msgty 为 "S"、sy-msgid 为 "00"、sy-msgno 为 "344"、sy-msgv1 为 "SAPMSSY3"、sy-msgv2 为 "0131"。
P不显示屏幕的调试模式。如果到达被调用事务的断点,则系统自动转到 ABAP 调试器,这种方式主要用于调试过程。

UPDATE 更新模式,有下列可选值(更新模式常用的是S):

UPDATE 更新模式
A异步更新被调用程序的更新按照没有指定 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由另一个专门的更新进程执行,主程序一旦提交数据就继续执行,而不管提交的更新是否执行完成。这种方式比较适合于用一个事务码大量更新指定数据,比如维护主数据等。
S同步更新被调用程序的更新按照指定了 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由专门的更新进程执行,但是主程序会等到数据提交完成,返回结果信息后才继续执行。这种方式比较适合于数据一致性要求比较高,多个不同事务码的连续处理。
L本地更新被调用程序的更新按照执行 SET UPDATE TASK LOCAL 语句的方式执行。也就是说,数据更新在主程序所在的进程中完成,主程序必定等到被调用事务完成才继续执行。

以消息举例,SE91 查看消息内容,消息类通常为 msgid ,消息编号为 msgnr

BDC里的部分 OKCODE

BDC OKCODE其实都是function code,对于处理一些BDC问题 非常有用,列出一些知道的 OKCODE

BDC_OKCODE功能描述
=/00. Enter
= /8 F8,Continue or Execute
=/11 F11,Post
=ENTE 回车
=SCHL 组织层次
=BILD  数据
=SELA  全选
=RESA 取消全选
=DEF/DEF_SAVE  保存
=P--  First Page
=P-   Previous Page
=P+  Next Page
=P++ Last Page
=AUSW Select view
=MARK Selection On/off
=ABBR/RW 删除
 =BU 保存
 =ENDE/%EX  Exit
=BACK/RWBack
=PICKPick
=DLTDelete
=UPDASAVE
=%PRIPrint
=%SCSearch
=%SC+Find next
=FCNP新插入一行item(像BOM的item那种)
=GOContinue
=/ABGo to overview
=ZKGo to additional information
=PIselect cursor location
=STERGo to taxes

 CALL TRANSACTION 'tcode' USING bdc_tab ... 是 ABAP 里提供的一个方便的执行批量输入的语句,使用它可以通过程序代码完成多个事务码的连续执行。

例:

 DATA : gc_mode   LIKE apqi-putactive VALUE 'N',
       gc_update LIKE apqi-putactive VALUE 'S'.  

 CALL TRANSACTION 'PA30' USING it_bdcdata
          MODE gc_mode
          UPDATE gc_update
          MESSAGES INTO it_bdcmsg.

*&---错误消息处理
    DATA:e_mess(50).
    CLEAR:e_mess.
*    LOOP AT i_messtab WHERE msgtyp = 'E' OR msgtyp = 'A'.
    LOOP AT it_bdcmsg INTO is_bdcmsg.
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = is_bdcmsg-msgid
          msgnr               = is_bdcmsg-msgnr
          msgv1               = is_bdcmsg-msgv1
          msgv2               = is_bdcmsg-msgv2
          msgv3               = is_bdcmsg-msgv3
          msgv4               = is_bdcmsg-msgv4
        IMPORTING
          message_text_output = e_mess.
      MESSAGE e_mess TYPE 'S'.
    ENDLOOP.

 

 

 

 

<think>好的,我现在需要处理用户关于SAP BDC代码示例和实现方法的查询。首先,我应该回忆一下BDC的基本概念和相关知识。BDC是批输入数据通讯,用于批量导入数据到SAP系统,类似于用户手动输入事务码。用户可能想要具体的代码示例以及步骤说明。 根据用户提供的引用内容,引用[1]提到使用Function Module进行批量导入,而引用[2]和引用[3]则涉及BDC的基本流程和消息处理。所以,我需要将这些信息整合到回答中,给出一个清晰的实现步骤和代码示例。 接下来,我需要确保回答结构清晰,分步骤说明。可能需要包括BDC的两种方法:CALL TRANSACTION和SESSION METHOD。同时,代码示例要符合ABAP语法,并且注释详细,让用户容易理解。 另外,用户要求生成相关问题,我需要考虑用户可能的后续问题,比如性能优化、错误处理等。这样能帮助用户更深入地了解BDC的应用。 最后,检查是否符合系统级指令:使用正确的中文,数学公式格式(虽然这个问题可能不涉及数学公式,但需要注意其他格式),引用标识的正确添加,以及代码块的正确标记。确保引用的来源正确标注,比如引用[1]、[2]、[3]分别对应提供的参考内容。</think>### SAP BDC 代码实现方法 SAP BDC(批输入数据通讯)的实现主要分为两种方式:**CALL TRANSACTION** 和 **SESSION METHOD**。以下是具体实现步骤代码示例: --- #### **1. CALL TRANSACTION 方法** 通过直接调用事务码执行批量操作,适合实时处理且数据量较小的情况。 ```abap DATA: lt_bdcdata TYPE TABLE OF bdcdata, lt_msg TYPE TABLE OF bdcmsgcoll. * 定义BDC数据 APPEND VALUE #( program = 'SAPMF02D' dynpro = '0100' dynbegin = 'X' ) TO lt_bdcdata. APPEND VALUE #( fnam = 'BDC_OKCODE' fval = '=ENTR' ) TO lt_bdcdata. APPEND VALUE #( fnam = 'RF02D-KUNNR' fval = '000000001' ) TO lt_bdcdata. "客户编号 * 调用事务码XD02(客户主数据维护) CALL TRANSACTION 'XD02' USING lt_bdcdata MODE 'A' "A: 自动模式,N: 后台模式 MESSAGES INTO lt_msg. * 错误处理 IF sy-subrc <> 0. WRITE '错误发生,请检查消息日志'. ENDIF. ``` --- #### **2. SESSION METHOD 方法** 通过创建会话批量执行,适合大数据量或需要后台处理的场景[^2]。 ```abap DATA: lv_session TYPE apq-groupid. * 创建会话 CALL FUNCTION 'BDC_OPEN_GROUP' EXPORTING client = sy-mandt group = 'ZBDC_DEMO' keep = 'X' IMPORTING qid = lv_session EXCEPTIONS group_invalid = 1 OTHERS = 2. * 添加BDC数据到会话 CALL FUNCTION 'BDC_INSERT' EXPORTING tcode = 'XD02' TABLES dynprotab = lt_bdcdata EXCEPTIONS internal_error = 1 OTHERS = 2. * 关闭会话并提交处理 CALL FUNCTION 'BDC_CLOSE_GROUP' EXCEPTIONS not_open = 1 queue_error = 2 OTHERS = 3. IF sy-subrc = 0. WRITE '会话已提交至SM35处理'. ENDIF. ``` --- #### **3. 关键注意事项** 1. **数据准备**:需严格匹配事务码的屏幕字段和顺序,可通过`SHDB`录制事务码生成BDC模板[^1]。 2. **错误处理**:使用`CONVERT_BDCMSGCOLL_TO_BAPIRET2`函数转换错误消息,方便日志分析[^3]。 3. **性能优化**:大数据量时优先使用SESSION METHOD,避免锁竞争。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值