BDC(Batch Data Conversion):在SAP系统里,由于某种原因,可能需要重复输入数据,(数据不同,但是操作是相同的,典型的情形就是切换系统的时候,旧系统的数据需要导入SAP),大致过程不外乎是这样: 输入一个t-code,
进入一个某个屏幕,然后输入一个值(有时还要加上一些附加的checkbox选项等),点执行或者确定按钮,
进入另一个屏幕,在某些字段输入值(也可能是标注checkbox选中或者不选中)或者修改这些字段里的值。
MODE 确定批输入的执行模式,有下面几个可选值:(执行模式常用的是A N)
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):
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/RW | Back |
=PICK | Pick |
=DLT | Delete |
=UPDA | SAVE |
=%PRI | |
=%SC | Search |
=%SC+ | Find next |
=FCNP | 新插入一行item(像BOM的item那种) |
=GO | Continue |
=/AB | Go to overview |
=ZK | Go to additional information |
=PI | select cursor location |
=STER | Go 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.