定義表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中添加檢查
到此結束。
日志:
一、2021年11月12日。
檢查寫在CHECK_ITEM方法中沒用,直接多點幾次過賬,就能跳過這里的檢查,需要改到
IF_EX_MB_MIGO_BADI~POST_DOCUMENT中,
這里就不寫了。中間也發現了其它的一些BUG,比如顯示的時候,自己畫的只能顯示一個,有興趣的自己調試下。