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.

 

 

 

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值