标签:display for ack stand field nbsp splay ons end
*&---------------------------------------------------------------------* *& REPORT Y_ALV_OO_JAMES_4 *& *&---------------------------------------------------------------------* *& THIS REPORT SHOW YOU HOW TO USE FUNCATION ALV AND EVENT *&---------------------------------------------------------------------* REPORT Y_FCUNCA_ALV_DEMON. TABLES:YCACS_CTRTBU. *&---------------------------------------------------------------------* *& DATA DEFINE *&---------------------------------------------------------------------* DATA: CTRTBU_ID TYPE CACS_CTRTBU_ID. DATA: LT_CACS_CTRTBU_TEMP TYPE TABLE OF YCACS_CTRTBU1, LT_CACS_CTRTBU TYPE TABLE OF YCACS_CTRTBU1, LS_CACS_CTRTBU TYPE YCACS_CTRTBU1, * ALV DEFINIE GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, GS_FIELDCAT TYPE SLIS_FIELDCAT_ALV, GS_LAYOUT TYPE SLIS_LAYOUT_ALV, * EVENT用 GT_EVENT TYPE SLIS_T_EVENT, GS_EVENT TYPE SLIS_ALV_EVENT, * 当用户选择复选框时,立刻出发DATA_CHANGED 事件. GS_GLAY TYPE LVC_S_GLAY. *&---------------------------------------------------------------------* *& PARAMETERS DEFINITION *&---------------------------------------------------------------------* START-OF-SELECTION. SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-B01. PARAMETERS: P_CLIK AS CHECKBOX DEFAULT ‘X‘. PARAMETERS: P_EDIT AS CHECKBOX DEFAULT ‘X‘. SELECT-OPTIONS:S_COMM FOR CTRTBU_ID. SELECTION-SCREEN END OF BLOCK B01. *&---------------------------------------------------------------------* *& INITIALIZATION *&---------------------------------------------------------------------* INITIALIZATION. CLEAR: LT_CACS_CTRTBU_TEMP, LT_CACS_CTRTBU, LS_CACS_CTRTBU, GT_FIELDCAT, GS_LAYOUT, GT_EVENT, GS_EVENT. *&---------------------------------------------------------------------* *& START-OF-SELECTION *&---------------------------------------------------------------------* START-OF-SELECTION. * GET DATA PERFORM GET_DATA. PERFORM SET_ALV_FIELDCAT. PERFORM SET_ALV_LAYOUT. PERFORM SET_ALV_EVENT. PERFORM SET_ALV_SHOW. * 和SE80里自己设置的 GUI_STATUS 进行关联。 FORM ALV_STATUS_SET USING PT_EXTAB TYPE SLIS_T_EXTAB. CLEAR: PT_EXTAB. * SET PF-STATUS ‘ALV_STATUS‘. " 这是我自己设置的GUI STATUS,具体方法SE80-->GUI STATUS -APPLICATION TOOLBAR SET PF-STATUS ‘STANDARD_FULLSCREEN‘. " 这是我参照SAP 系统标准的GUI STATUS 进行设置的,功能比较齐全,具体方法,复制STANDARD_FULLSCREEN名 ENDFORM. * USER_COMMAND 事件 FORM ALV_USER_COMMAND USING P_UCOMM LIKE SY-UCOMM P_SELFIELD TYPE SLIS_SELFIELD. " 可以获取某一个单元格内的值 CASE P_UCOMM. WHEN ‘CLOSE‘. LEAVE PROGRAM. WHEN ‘&DATA_SAVE‘. MODIFY YCACS_CTRTBU FROM TABLE LT_CACS_CTRTBU. IF SY-SUBRC = 0. COMMIT WORK. MESSAGE ‘SUCCESSS‘ TYPE ‘S‘. ELSE. MESSAGE ‘FAIL‘ TYPE ‘E‘. ENDIF. WHEN OTHERS. ENDCASE. ENDFORM. * ALV_DATA_CHANGED 事件 FORM ALV_DATA_CHANGED USING PCL_DATA TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL. DATA: L_NAME(100), LS_CELLS TYPE LVC_S_MODI. FIELD-SYMBOLS <FS_VALUE>. LOOP AT PCL_DATA->MT_MOD_CELLS INTO LS_CELLS. CLEAR:LS_CACS_CTRTBU. READ TABLE LT_CACS_CTRTBU INTO LS_CACS_CTRTBU INDEX LS_CELLS-ROW_ID. CONCATENATE ‘LT_CACS_CTRTBU-‘LS_CELLS-FIELDNAME INTO L_NAME. ASSIGN (L_NAME) TO <FS_VALUE>. <FS_VALUE> = LS_CELLS-VALUE. MODIFY LT_CACS_CTRTBU INDEX LS_CELLS-ROW_ID FROM LS_CACS_CTRTBU. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& FORM SET_ALV_FIELDCAT *&---------------------------------------------------------------------* * THIS PERFORM IS FOR GET ALL FIELDCAT REFERENCE CACS_CTRTBU *----------------------------------------------------------------------* * --> CACS_CTRTBU REFERENCE * <-- GT_FIELDCAT *----------------------------------------------------------------------* FORM SET_ALV_FIELDCAT . CALL FUNCTION ‘REUSE_ALV_FIELDCATALOG_MERGE‘ EXPORTING I_PROGRAM_NAME = ‘Y_FCUNCA_ALV_DEMON‘ * I_INTERNAL_TABNAME = I_STRUCTURE_NAME = ‘CACS_CTRTBU‘ * I_CLIENT_NEVER_DISPLAY = ‘X‘ * I_INCLNAME = * I_BYPASSING_BUFFER = * I_BUFFER_ACTIVE = CHANGING CT_FIELDCAT = GT_FIELDCAT EXCEPTIONS INCONSISTENT_INTERFACE = 1 PROGRAM_ERROR = 2 OTHERS = 3 . IF SY-SUBRC <> 0. * IMPLEMENT SUITABLE ERROR HANDLING HERE ENDIF. * ALV 显示的时候增加出2列CHECK BOX DELETE和ADD 列 GS_FIELDCAT-FIELDNAME = ‘DELETE_LINE‘."FIELDNAME GS_FIELDCAT-TABNAME = ‘YCACS_CTRTBU‘."TABNAME GS_FIELDCAT-CHECKBOX = ‘X‘. * GS_FIELDCAT-COLTEXT = ‘DELETE LINE‘##NO_TEXT . GS_FIELDCAT-SELTEXT_L = ‘DELETE_LINE‘. GS_FIELDCAT-SELTEXT_M = ‘DELETE_LINE‘. GS_FIELDCAT-SELTEXT_S = ‘DELETE_LINE‘. INSERT GS_FIELDCAT INTO TABLE GT_FIELDCAT. CLEAR GS_FIELDCAT. GS_FIELDCAT-FIELDNAME = ‘NEW_LINE‘."FIELDNAME GS_FIELDCAT-TABNAME = ‘YCACS_CTRTBU‘."TABNAME GS_FIELDCAT-CHECKBOX = ‘X‘. GS_FIELDCAT-SELTEXT_L = ‘NEW_LINE‘. GS_FIELDCAT-SELTEXT_M = ‘NEW_LINE‘. GS_FIELDCAT-SELTEXT_S = ‘NEW_LINE‘. INSERT GS_FIELDCAT INTO TABLE GT_FIELDCAT. ENDFORM. *&---------------------------------------------------------------------* *& FORM SET_ALV_LAYOUT *&---------------------------------------------------------------------* * EDIT THE LAYOUT *----------------------------------------------------------------------* * --> P1 TEXT * <-- GS_LAYOUT LAYOUT *----------------------------------------------------------------------* FORM SET_ALV_LAYOUT . * SET LAYOUT GS_LAYOUT-ZEBRA = ABAP_TRUE. GS_LAYOUT-COLWIDTH_OPTIMIZE = ABAP_TRUE. * Set edit mode IF P_EDIT = ABAP_TRUE. GS_LAYOUT-EDIT = ABAP_TRUE. GS_GLAY-EDT_CLL_CB = ABAP_TRUE. " 选中复选款,立刻触发data changed 事件 ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& FORM SET_ALV_GUI_STATUS *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEXT *----------------------------------------------------------------------* FORM SET_ALV_EVENT. * SET GUI STATUS EVENT MOVE ‘PF_STATUS_SET‘ TO GS_EVENT-NAME. " ALV的事件名 MOVE ‘ALV_STATUS_SET‘ TO GS_EVENT-FORM. " ALV 程序内设置GUI STATUS的语句 APPEND GS_EVENT TO GT_EVENT. * SET ALV DATA_CHANGED EVENT MOVE ‘DATA_CHANGED‘ TO GS_EVENT-NAME. MOVE ‘ALV_DATA_CHANGED‘ TO GS_EVENT-FORM. APPEND GS_EVENT TO GT_EVENT. ENDFORM. *&---------------------------------------------------------------------* *& FORM SET_ALV_SHOW *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEXT *----------------------------------------------------------------------* FORM SET_ALV_SHOW . CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY‘ EXPORTING * I_INTERFACE_CHECK = ‘ ‘ * I_BYPASSING_BUFFER = ‘ ‘ * I_BUFFER_ACTIVE = ‘ ‘ I_CALLBACK_PROGRAM = ‘Y_FCUNCA_ALV_DEMON‘ * I_CALLBACK_PF_STATUS_SET = ‘ ‘ I_CALLBACK_USER_COMMAND = ‘ALV_USER_COMMAND‘ * I_CALLBACK_TOP_OF_PAGE = ‘ ‘ * I_CALLBACK_HTML_TOP_OF_PAGE = ‘ ‘ * I_CALLBACK_HTML_END_OF_LIST = ‘ ‘ I_STRUCTURE_NAME = ‘CACS_CTRTBU‘ * I_BACKGROUND_ID = ‘ ‘ * I_GRID_TITLE = * I_GRID_SETTINGS = GS_GLAY " 复选框触发data changed 事件 IS_LAYOUT = GS_LAYOUT IT_FIELDCAT = GT_FIELDCAT * IS_SEL_HIDE = * I_DEFAULT = ‘X‘ * I_SAVE = ‘ ‘ * IS_VARIANT = IT_EVENTS = GT_EVENT * IT_EVENT_EXIT = * IS_PRINT = * IS_REPREP_ID = TABLES T_OUTTAB = LT_CACS_CTRTBU EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2 . IF SY-SUBRC <> 0. * IMPLEMENT SUITABLE ERROR HANDLING HERE ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& FORM GET_DATA *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEXT *----------------------------------------------------------------------* FORM GET_DATA . IF P_CLIK = ABAP_TRUE. SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_CACS_CTRTBU_TEMP FROM CACS_CTRTBU. IF LT_CACS_CTRTBU_TEMP IS NOT INITIAL. LT_CACS_CTRTBU = LT_CACS_CTRTBU_TEMP. ENDIF. ELSE. SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_CACS_CTRTBU FROM CACS_CTRTBU WHERE CTRTBU_ID IN S_COMM. ENDIF. IF LT_CACS_CTRTBU IS INITIAL. MESSAGE ‘SORRY, NOT ABLE TO FIND THE DATA‘ TYPE ‘E‘. ENDIF. ENDFORM.
Funcation ALV 事件用法(编辑ALV ,直接保存修改数据到DB)
标签:display for ack stand field nbsp splay ons end
原文地址:https://www.cnblogs.com/HARU/p/9359772.html