定义表ZQMT005、结构ZQMT005_BADI、表结构ZQMT005_BADI_TAB
编辑->包括->插入
se37,或者se80创建4个接口,如下图所示
附上传参
这里需要设置个变量,控制更新屏幕内容,不然会出现回车就清空内容等问题。
在函数组中定义全局变量
FUNCTION-POOL zqmigo. "MESSAGE-ID ..
* INCLUDE LZQMIGOD... " Local class definition
TABLES:zqmt004_badi,zqmt004,zqmt005,zqmt005_badi.
DATA:g_goaction TYPE goaction.
DATA:g_refdoc TYPE refdoc.
DATA:g_action TYPE action.
SE51绘制屏幕
屏幕的PBO里
SE19,在MB_MIGO_BADI创建实施
定义全局变量
设置全局变量(初始化)
然后是添加SE51绘制的子屏幕,
IF_EX_MB_MIGO_BADI~PBO_DETAIL 是在MIGO下面的行项目里增加
IF_EX_MB_MIGO_BADI~PBO_HEADER是在MIGO的抬头里增加
这里是在PBO_DETAIL增加
CHECK gf_class_id = i_class_id.
CHECK i_line_id IS NOT INITIAL.
IF g_no_input2 IS NOT INITIAL.
e_cprog = 'SAPLZQMIGO'.
e_dynnr = '9002'.
e_heading = '配置信息'.
ENDIF.
在IF_EX_MB_MIGO_BADI~LINE_MODIFY中行项目数据到
表it_zqmt005_badi中,点击'签名',可以看到有全局变量cs_goitem。
DATA: ls_zqmt005 TYPE zqmt005.
DATA: ls_zqmt005_badi TYPE zqmt005_badi.
DATA: ls_zqmt005_badi_new TYPE zqmt005_badi.
* IF sy-uname EQ 'IT0003'.
* BREAK-POINT.
* ENDIF.
**工单使用的模具号
READ TABLE it_zqmt005_badi WITH KEY global_counter = i_line_id
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
**************取屏幕中现有数据
CLEAR: ls_zqmt005_badi_new.
CALL FUNCTION 'ZQMIGO_ITEM_BADI_GET_DATA'
IMPORTING
e_output2 = ls_zqmt005_badi_new.
IF ls_zqmt005_badi_new-global_counter = i_line_id.
**************BADI全局变量中已存在
DELETE it_zqmt005_badi WHERE global_counter = i_line_id.
MOVE-CORRESPONDING cs_goitem TO ls_zqmt005_badi.
ls_zqmt005_badi-aufnr = cs_goitem-pps_aufnr.
ls_zqmt005_badi-plnbez = cs_goitem-matnr.
ls_zqmt005_badi-zmatnr = ls_zqmt005_badi_new-zmatnr.
APPEND ls_zqmt005_badi TO it_zqmt005_badi.
ENDIF.
ELSE.
**************BADI全局变量中不存在
IF NOT cs_goitem-matnr IS INITIAL.
**************从自定义表中取数
CLEAR: ls_zqmt005.
SELECT SINGLE *
FROM zqmt005
INTO CORRESPONDING FIELDS OF ls_zqmt005
WHERE plnbez = cs_goitem-matnr.
IF sy-subrc = 0.
MOVE-CORRESPONDING ls_zqmt005 TO ls_zqmt005_badi_new.
ELSE.
MOVE-CORRESPONDING cs_goitem TO ls_zqmt005_badi_new.
ls_zqmt005_badi_new-aufnr = cs_goitem-pps_aufnr.
ls_zqmt005_badi_new-plnbez = cs_goitem-matnr.
ENDIF.
ENDIF.
ls_zqmt005_badi_new-global_counter = i_line_id.
ls_zqmt005_badi_new-zmatnr = ls_zqmt005_badi_new-zmatnr.
APPEND ls_zqmt005_badi_new TO it_zqmt005_badi.
ENDIF.
在IF_EX_MB_MIGO_BADI~LINE_DELETE中增加删除对应行操作
DELETE it_ZQMT005_BADI WHERE global_counter = i_line_id.
在RESET(取消)中,清空废弃的数据。
CLEAR: it_zqmt004_badi,it_zqmt005_badi.
CLEAR: G_NO_INPUT,G_NO_INPUT2,
g_cancel,g_cancel2.
在IF_EX_MB_MIGO_BADI~POST_DOCUMENT中,将内表it_zqmt005_badi数据保存到自建表,这里也可以直接增加检查。为了区分,检查后面再加。
在IF_EX_MB_MIGO_BADI~CHECK_ITEM中添加检查
到此结束。