BDC录屏操作目标:ME22修改采购订单的"短文本"和"采购订单数量"这2个字段的内容
输入TCODE事务码: SHDB
点击按钮
填写记录名称以及需要进行录屏处理的事务码,上述信息填写完以后,点击"开始记录",之后就会跳到该事务码的初始屏幕,然后就可以按照正常的前台流程进行操作
输入需要进行更改的采购订单编号
回车跳转至更改采购订单的详情页面,
修改上述采购订单中的"短文本"和"采购订单数量"2个字段的内容以后,点击保存按钮,之后就会进入到事务记录器的页面,在这里可以看到刚刚修改采购订单的所有操作步骤
上述代码结果是模拟我们在前台操作的过程
提示Tips:BDC录屏进行前台流程操作尽量一步到位,不要有多余的操作
我们参考上述事务记录器中的参数信息,在自开发ALV报表程序中进行调用
* 定义变量用于BDC录屏操作
DATA: bdcdata TYPE STANDARD TABLE OF bdcdata WITH HEADER LINE.
上述涉及到BDCDATA结构,这个结构就是处理BDC数据的主要结构
组件说明
① PROGRAM:程序名,当前屏幕所在的程序
② DYNPRO:屏幕编号
③ DYNBEGIN:'X'表示启动,''表示不启动
④ FNAM:字段名
⑤ FVAL:字段值
调用BDC对采购订单进行修改部分代码如下所示
子程序frm_display_alv
子程序frm_user_command
子程序frm_import_data
子程序frm_change_po_bdc代码如下所示
*&---------------------------------------------------------------------*
*& Form frm_change_po_bdc
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LT_IMPORT
*& <-- LV_ERROR_FLG
*&---------------------------------------------------------------------*
FORM frm_change_po_bdc USING pt_import TYPE tt_output
CHANGING cv_error_flg TYPE boole_d.
DATA: ls_import TYPE ty_output,
bdcmsg TYPE STANDARD TABLE OF bdcmsgcoll. " 收集SAP系统中的信息
DATA: lv_var1 TYPE char5,
lv_var2 TYPE char2,
lv_field TYPE bdcdata-fnam, " 字段名
lv_menge TYPE c LENGTH 16. " 采购订单数量
READ TABLE pt_import INTO ls_import INDEX 1.
CLEAR bdcdata[]. " 清空bdcdata内表
PERFORM bdc_dynpro USING 'SAPMM06E' '0105'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'RM06E-BSTNR' ls_import-ebeln. " ebeln:采购订单编号
PERFORM bdc_dynpro USING 'SAPMM06E' '0121'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BU'.
LOOP AT pt_import INTO ls_import.
lv_var1 = ls_import-ebelp. " ebelp:
lv_var2 = lv_var1+2(2).
lv_field = 'EKPO-TXZ01(' && lv_var2 && ')'.
PERFORM bdc_field USING lv_field ls_import-txz01. " txz01:短文本
CLEAR:lv_field.
lv_field = 'EKPO-MENGE(' && lv_var2 && ')'.
CLEAR:lv_menge.
WRITE ls_import-menge TO lv_menge.
CONDENSE lv_menge.
PERFORM bdc_field USING lv_field lv_menge. " menge:采购订单数量
ENDLOOP.
" 调用并执行事务码
CALL TRANSACTION 'ME22' USING bdcdata
MODE 'N' " A:Debug模式显示所有屏幕 E:错误发生显示屏幕 N:不显示屏幕
UPDATE 'A' " A:同步更新 S:异步更新
MESSAGES INTO bdcmsg. " 消息
IF sy-subrc = 0.
LOOP AT bdcmsg INTO DATA(ls_msg)
WHERE msgtyp CA 'AEX'.
cv_error_flg = abap_true. " 报错
EXIT.
ENDLOOP.
IF cv_error_flg = abap_true.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. " 回滚,撤销以上修改
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. " 提交,保存以上修改
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. " 回滚,撤销以上修改
ENDIF.
ENDFORM.
上述涉及2个子程序:bdc_dynpro 和 bdc_field 的调用
bdc_dynpro 子程序的作用:处理屏幕
bdc_field 子程序的作用:处理字段
*&---------------------------------------------------------------------*
*& Form bdc_dynpro
*&---------------------------------------------------------------------*
*& 处理屏幕
*&---------------------------------------------------------------------*
*& --> P_
*& --> P_
*&---------------------------------------------------------------------*
FORM bdc_dynpro USING program TYPE bdcdata-program
dynpro TYPE bdcdata-dynpro.
CLEAR:bdcdata.
bdcdata-program = program. " 程序名
bdcdata-dynpro = dynpro. " 屏幕编号
bdcdata-dynbegin = 'X'. " 开始ID
APPEND bdcdata.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*
*& 处理字段
*&---------------------------------------------------------------------*
*& --> P_
*& --> P_
*& --> ENDFORM
*&---------------------------------------------------------------------*
FORM bdc_field USING fnam TYPE bdcdata-fnam
fval.
CLEAR:bdcdata.
bdcdata-fnam = fnam. " 字段名称
bdcdata-fval = fval. " 字段值
APPEND bdcdata.
ENDFORM.
补充资料