[Practical] ABAP ALV cell modification information prompt

ALV OO (CL_GUI_ALV_GRID) is often used in the daily development of ABAP to display the list, in which the operation of the specified cell is also a daily necessary skill, such as the requirement in the figure below, modify the "reason code" column of the specified cell, For the validity of the check value, a prompt box as shown below will be given. If the check fails, the original value will be restored.

Class definition and implementation

CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS : handle_data_changed
                 FOR EVENT data_changed OF cl_gui_alv_grid
                 IMPORTING er_data_changed.
ENDCLASS.  

CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_data_changed.
    PERFORM data_changed  USING er_data_changed.
  ENDMETHOD.                    "handle_data_changed
ENDCLASS.  

Check code

FORM DATA_CHANGED  USING    P_ER_DATA_CHANGED
                   TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL.
  DATA : LS_MODI        TYPE LVC_S_MODI. 
  DATA : L_MSSG TYPE CHAR100.    


*CELL MODIFY
  LOOP AT P_ER_DATA_CHANGED->MT_GOOD_CELLS INTO LS_MODI.
    CASE LS_MODI-FIELDNAME.


      WHEN 'ZCAUSE'.
        CLEAR GT_LIST.
        READ TABLE GT_LIST INDEX LS_MODI-ROW_ID.
        IF LS_MODI-VALUE IS NOT INITIAL .
          SELECT SINGLE *
            FROM ZMM001
            WHERE ZCAUSE = LS_MODI-VALUE.
          IF SY-SUBRC NE 0.
            CLEAR L_MSSG.
            CONCATENATE LS_MODI-VALUE  '原因代码不存在.'  INTO L_MSSG.
            PERFORM WS_MSG USING 'E' L_MSSG TEXT-001 .
            CALL METHOD P_ER_DATA_CHANGED->MODIFY_CELL
              EXPORTING
                I_ROW_ID    = LS_MODI-ROW_ID
                I_FIELDNAME = LS_MODI-FIELDNAME
                I_VALUE     = GT_LIST-ZCAUSE.

            CONTINUE.
          ELSE.
            GT_LIST-ZCAUSE = LS_MODI-VALUE.
          ENDIF.
        ELSE.
          CLEAR L_MSSG.
          CONCATENATE LS_MODI-VALUE '原因代码不能为空.'  INTO L_MSSG.
          PERFORM WS_MSG USING 'E' L_MSSG TEXT-002 .
          CALL METHOD P_ER_DATA_CHANGED->MODIFY_CELL
            EXPORTING
              I_ROW_ID    = LS_MODI-ROW_ID
              I_FIELDNAME = LS_MODI-FIELDNAME
              I_VALUE     = GT_LIST-ZCAUSE.

          CONTINUE.
        ENDIF.

    ENDCASE.

    MODIFY GT_LIST INDEX LS_MODI-ROW_ID.
  ENDLOOP.

*"Alv Style
  PERFORM MAKE_ALV_STYLE.

*Refresh.
  PERFORM REFRESH_TABLE_DISPLAY USING G_GRID.

*Refresh
  CALL METHOD CL_GUI_CFW=>FLUSH.
ENDFORM.                    " data_changed

Message box

*&---------------------------------------------------------------------*
*&      Form  WS_MSG
*&---------------------------------------------------------------------*
FORM WS_MSG  USING  P_TYPE  P_TEXT  P_TITLE.
  CALL FUNCTION 'WS_MSG'
    EXPORTING
      MSG_TYPE = P_TYPE
      TEXT     = P_TEXT
      TITL     = P_TITLE.
ENDFORM.                    " WS_MSG

 

 

Guess you like

Origin blog.csdn.net/zhongguomao/article/details/108475900