MIGO屏幕增强

定义表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,比如显示的时候,自己画的只能显示一个,有兴趣的自己调试下。

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-12-08 17:56  蛀牙首领  阅读(1487)  评论(0编辑  收藏  举报