您的位置:首页 > 编程语言

用OO生成ALV集成代码

2011-07-06 14:03 211 查看
*& 调用说明:

*&

*& 1. 创建ALV_GRID.

*& FORM CONTAINER_CREATE TABLES P_IT_TAB "显示的内表

*& USING P_CONTAINER_NAME "控件名称

*& P_CONTAINER_EVENT "被调用事件的FORM

*& P_FRM_FIELDCAT_NAME "被调用显示字段的FORM

*& CHANGING P_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER "容器控件

*& P_GRID TYPE REF TO CL_GUI_ALV_GRID. "表格

*& 1)P_IT_TAB : GRID显示的数据内表

*& 2)P_CONTAINER_NAME : CONTIANER的字符串名称

*& 3)P_CONTAINER_EVENT : GRID的事件说明

*& 4)P_FRM_FIELDCAT_NAME : ALV显示的列属性设置

*&

*& 2. GRID 事件SET

*& FORM CONTAINER_SET_EVENT USING P_EVENT

*& P_CALL_FROM_NAME

*& CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID.

*& 1)P_EVENT(字符串):事件名变量,可从FORM中查到对就的值

*& 2)P_CALL_FROM_NAME (字符串): 事件将会调用的FORM名称

*&

*& 3. 显示字段的FORM设置

*& FORM CONTAINER_SET_FIELDCAT USING P_FIELDNAME "内表对应的字段名

*& P_TEXT "GRID显示的TITLE

*& P_LEN "字段的长度

*& P_JUST "内表的位置(L-左,C-中间,R-RIGHT)

*& P_REF_TABLE "参照的表名(加个对应的表名,可以在GRID中实现F4的功能)

*& P_REF_FIELD "参照的字段名

*& P_CHECKBOX "复选框

*& P_HOTSPOT "热键(可配合CLICK事件一起使用)

*& P_KEY "固定的列

*& P_EDIT "编辑状态('X'-可编辑,否则不可编辑)

*& P_DO_SUM. "合计

*&

*& 4. GRID标准的TOOLBAR上工具栏设置

*& FORM DIS_TOOLBAR USING P_MENUNAME TYPE STRING.

*& 1)P_MENUNAME : 工具栏的名称('明细 按升序排序 按降序排序 查找 查找下一个 设置筛选器 总计 小计 打印 视图 输出 ')

*& 传入参数时,只需要传入参数如: '明细 按升序排序' ,程序运行后,在GRID上就会出现在,明细和按升序排序的标准图标

*&

*& 5.当GRID修改值时,得到修改值

*& FORM GET_GRID_MODI TABLES P_MODI.

*& 1)P_MODI : 定义(IT_MODI TYPE LVC_T_MODI.)

*& 2)调用的该FORM之后只需LOOP AT IT_MODI...ENDLOOP将相对应的行跟列写入内表的相对应的字段

*&

*& 6.GIRD刷新(内表的值发生改变时,刷新数据到GRID)

*& FORM GRID_REFRESH CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID.

*&

*& 7.用于刷新GRID光标重新定位到刷新前的行列上

*& FORM GRID_SELECT_ROW USING P_ROW_ID CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID.

*&

*& 8.用于刷新GRID光标重新定位到刷新前的行列上

*& FORM GRID_SELECT_CELL USING P_ROW_ID P_CELL_ID CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID.

*& FORM GRID_SELECT_ROW_CELL USING P_ROW P_CELL CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID.

*&

*& 9.获得了光标所在的行,列

*& FORM GET_GRID_CURRENT_CELL CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID P_ROW P_COL.

*&

*& 10. 设置工具栏上的自定义按钮

*& FORM SET_TOOLBAR_DEFINE_BUTTON USING P_FUNCTION P_ICON P_TEXT P_QUICKINFO P_BUTN_TYPE P_DISABLED P_CHECKED.

*& -->P_FUNCTION 功能代码

*& -->P_ICON ICON图标

*& -->P_TEXT 显示的文本

*& -->P_QUICKINFO 摘要(当鼠标移到按钮上面时显示的文本)

*& -->P_BUTN_TYPE ' '-无下拉菜单,1-有下拉菜单

*& -->P_DISABLED 可否编辑

*& -->P_CHECKED ‘X’-按下去状态

*&

*& 11. 设置GRID的TITLE

*& FORM SET_CONTAINER_TITLE USING P_TITLE.

*&

*& 12. 列宽最优

*& FORM SET_CONTIANER_GRID_WIDTH.

*&

*& 13. 获得了当前的用户自定义代码

*& FORM GET_GRID_TOOLBAR_UCOMM CHANGING P_UCOMM TYPE SY-UCOMM.

*&

*& 14. 刷新屏幕

*& FORM REFRESH_SCREEN .

*&---------------------------------------------------------------------*

"定义控件所需的变量

DATA: ALV_CLASS_FIELDCAT TYPE LVC_T_FCAT.

DATA: ALV_CLASS_LAYOUT TYPE LVC_S_LAYO.

DATA: BEGIN OF WA_DISPLAY_TOOLBAR_CHECK.

DATA: DYNNR LIKE SY-DYNNR.

INCLUDE STRUCTURE ZRANGES.

DATA: END OF WA_DISPLAY_TOOLBAR_CHECK,

IT_DISPLAY_TOOLBAR_CHECK LIKE WA_DISPLAY_TOOLBAR_CHECK OCCURS 0 WITH HEADER LINE,

IT_DISPLAY_TOOLBAR LIKE ZRANGES OCCURS 0 WITH HEADER LINE. "显示标准菜单内表

DATA: BEGIN OF WA_EVENT,

DYNGR LIKE SY-DYNGR, "屏幕号

CONT_NAME(100),

EVENTID(100),

EVENTNAME(100),

END OF WA_EVENT,

IT_EVENT LIKE WA_EVENT OCCURS 0 WITH HEADER LINE.

DATA: GRID_MODI TYPE LVC_T_MODI.

DATA: BEGIN OF WA_GRID_ROW,

ID TYPE P,

END OF WA_GRID_ROW.

DATA: BEGIN OF WA_TOOLBAR,

DYNNR LIKE SY-DYNNR, "屏幕号

FUNCTION LIKE STB_BUTTON-FUNCTION,

ICON LIKE STB_BUTTON-ICON, " 图标的名称

QUICKINFO LIKE STB_BUTTON-QUICKINFO, "关于图标的简要信息

BUTN_TYPE LIKE STB_BUTTON-BUTN_TYPE, "工具栏按钮类型

DISABLED LIKE STB_BUTTON-DISABLED,"不能使用

TEXT LIKE STB_BUTTON-TEXT, "注释( 40个字符)

CHECKED LIKE STB_BUTTON-CHECKED, "打印的

UCOMM TYPE STRING,

END OF WA_TOOLBAR,

IT_TOOLBAR LIKE WA_TOOLBAR OCCURS 0 WITH HEADER LINE .

DATA: GRID_E_UCOMM TYPE SY-UCOMM.

DATA: GRID_TITLE TYPE LVC_S_LAYO-GRID_TITLE. "GRID的TITLE

DATA: GRID_CWDTH_OPT LIKE ALV_CLASS_LAYOUT-CWIDTH_OPT.

*----------------------------------------------------------------------*

* CLASS CL_EVENT DEFINITION

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

CLASS CL_EVENT DEFINITION.

PUBLIC SECTION.

METHODS:

"sy-ucomm

HANDLE_COMMAND

FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID

IMPORTING E_UCOMM,

"双击事件

HANDLE_DOUBLE_CLICK

FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID

IMPORTING E_ROW E_COLUMN ES_ROW_NO,

"工具栏设置

HANDLE_TOOLBAR

FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID

IMPORTING E_OBJECT E_INTERACTIVE,

HANDLE_USER_COMMAND " toolbar UCOMM

FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID "用户自定义事件的设置

IMPORTING E_UCOMM,

HANDLE_ONDROP

FOR EVENT ONDROP OF CL_GUI_ALV_GRID

IMPORTING E_ROW E_COLUMN ES_ROW_NO E_DRAGDROPOBJ,

"单击事件

HANDLE_CLICK

FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID

IMPORTING E_ROW_ID E_COLUMN_ID ES_ROW_NO,

"数据变化事件

HANDLE_CHANGED

FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID

IMPORTING ER_DATA_CHANGED,

HANDLE_CHANGED_FINISHED

FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID

IMPORTING E_MODIFIED ET_GOOD_CELLS.

ENDCLASS . "cl_event DEFINITION

*----------------------------------------------------------------------*

* CLASS CL_EVENT IMPLEMENTATION

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

CLASS CL_EVENT IMPLEMENTATION.

METHOD HANDLE_COMMAND.

PERFORM HANDLE_CALL_FORM USING 'HANDLE_COMMAND'.

ENDMETHOD. "HANDLE_COMMAND

METHOD HANDLE_DOUBLE_CLICK.

PERFORM HANDLE_CALL_FORM USING 'HANDLE_DOUBLE_CLICK'.

ENDMETHOD. "handle_double_click

METHOD HANDLE_TOOLBAR.

REFRESH IT_TOOLBAR.

PERFORM HANDLE_CALL_FORM USING 'HANDLE_TOOLBAR'.

PERFORM HANDLE_SET_STANDART_TOOLBAR. "取工具栏上的标准的图标

DELETE E_OBJECT->MT_TOOLBAR WHERE QUICKINFO IN IT_DISPLAY_TOOLBAR. "设置标准的图标

PERFORM TOOLBAR_DEFINE_BUTTON USING E_OBJECT . "增加工具栏按钮

ENDMETHOD. "handle_toolbar

METHOD HANDLE_ONDROP.

ENDMETHOD. "HANDLE_ONDROP

*---------------user_command-----------------------------------*

"用户自定义按钮事件

METHOD HANDLE_USER_COMMAND.

GRID_E_UCOMM = E_UCOMM.

PERFORM HANDLE_CALL_FORM USING 'HANDLE_USER_COMMAND'.

ENDMETHOD. "lcl_event_receiver

METHOD HANDLE_CLICK.

PERFORM HANDLE_CALL_FORM USING 'HANDLE_CLICK'.

ENDMETHOD. "HANDLE_CLICK

METHOD HANDLE_CHANGED.

GRID_MODI[] = ER_DATA_CHANGED->MT_MOD_CELLS[].

PERFORM HANDLE_CALL_FORM USING 'HANDLE_CHANGED'.

ENDMETHOD. "HANDLE_CHANGED

METHOD HANDLE_CHANGED_FINISHED.

PERFORM HANDLE_CALL_FORM USING 'HANDLE_CHANGED_FINISHED'.

ENDMETHOD. "HANDLE_CHANGED

ENDCLASS. "CL_EVENT IMPLEMENTATION

"定义事件

DATA: ALV_EVENT TYPE REF TO CL_EVENT.

DATA: ALV_APPLI TYPE REF TO CL_EVENT. "

DATA: ALV_CUR_DYNNR TYPE STRING.

DATA: ALV_SET_CUR_DYNNR TYPE STRING.

DATA: ALV_CONT_NAME(100).

*&---------------------------------------------------------------------*

*& Form FRM_GET_ALV_CURDYNNR

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

FORM FRM_GET_ALV_CURDYNNR.

DATA: FRM_TYPE LIKE D020S-TYPE.

"检查是否为子屏幕

SELECT SINGLE TYPE INTO FRM_TYPE FROM D020S WHERE PROG = SY-REPID AND DNUM = SY-DYNNR.

IF FRM_TYPE EQ 'I' .

CLEAR ALV_CUR_DYNNR.

CLEAR ALV_CONT_NAME.

RETURN.

ENDIF.

"获得事件对象

DATA: FRM_EVENT TYPE REF TO CL_GUI_EVENT.

CALL METHOD CL_GUI_CFW=>GET_CURRENT_EVENT_OBJECT

RECEIVING

EVENT_OBJECT = FRM_EVENT.

IF FRM_EVENT IS INITIAL.

CLEAR ALV_CUR_DYNNR.

CLEAR ALV_CONT_NAME.

RETURN.

ENDIF.

"从事件对象获得事件源

DATA: FRM_SRC TYPE REF TO CL_GUI_CONTROL.

FRM_SRC = FRM_EVENT->EVENT_SRC.

"从事件源的GRID中获取屏幕号

DATA: FRM_SCREEN_NAME TYPE STRING.

CALL METHOD FRM_SRC->GET_NAME

RECEIVING

NAME = FRM_SCREEN_NAME.

"从事件源中获得容器对象

DATA: FRM_PARENT TYPE REF TO CL_GUI_CONTAINER.

FRM_PARENT = FRM_SRC->PARENT.

"从容器对象获得容器名

DATA:FRM_CONTAINER TYPE STRING.

CALL METHOD FRM_PARENT->GET_NAME

RECEIVING

NAME = FRM_CONTAINER.

ALV_CUR_DYNNR = FRM_SCREEN_NAME.

ALV_CONT_NAME = FRM_CONTAINER.

ENDFORM. "FRM_GET_alv_CURDYNNR

*&---------------------------------------------------------------------*

*& Form container_init

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

FORM CONTAINER_CREATE TABLES P_IT_TAB "显示的内表

USING P_CONTAINER_GRID_TITLE " TITLE

P_CONTAINER_NAME "控件名称

P_CONTAINER_EVENT "被调用事件的FORM

P_FRM_FIELDCAT_NAME "被调用显示字段的FORM

CHANGING P_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER "容器控件

P_GRID TYPE REF TO CL_GUI_ALV_GRID. "表格

DATA: FRM_ROW TYPE I,FRM_CELL TYPE I.

ALV_CONT_NAME = P_CONTAINER_NAME .

IF P_CONTAINER IS INITIAL.

"创建应用

CREATE OBJECT ALV_APPLI.

"创建容器控件

CREATE OBJECT P_CONTAINER

EXPORTING

CONTAINER_NAME = P_CONTAINER_NAME.

"表格

CREATE OBJECT P_GRID

EXPORTING

I_PARENT = P_CONTAINER.

"事件注册(自动接受输入的内容)

CALL METHOD P_GRID->REGISTER_EDIT_EVENT

EXPORTING

I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.

"事件定义

CREATE OBJECT ALV_EVENT.

SET HANDLER ALV_EVENT->HANDLE_TOOLBAR FOR P_GRID. "默认工具栏是没有标准按钮

IF P_CONTAINER_EVENT IS NOT INITIAL.

PERFORM (P_CONTAINER_EVENT) IN PROGRAM .

ENDIF.

"保存屏幕号到GRID的NAME中

DATA: FRM_DYNNR TYPE STRING.

FRM_DYNNR = SY-DYNNR.

CALL METHOD P_GRID->SET_NAME

EXPORTING

NAME = FRM_DYNNR

EXCEPTIONS

CNTL_ERROR = 1

PARENT_NO_NAME = 2

ILLEGAL_NAME = 3

OTHERS = 4.

ELSE.

"取当前的行号

PERFORM GET_GRID_CURRENT_CELL CHANGING P_GRID FRM_ROW FRM_CELL.

ENDIF.

"刷新显示字段内表

REFRESH ALV_CLASS_FIELDCAT.

CLEAR ALV_CLASS_LAYOUT.

ALV_CLASS_LAYOUT-ZEBRA = 'X'. "班马线

ALV_CLASS_LAYOUT-CWIDTH_OPT = GRID_CWDTH_OPT.

ALV_CLASS_LAYOUT-GRID_TITLE = P_CONTAINER_GRID_TITLE.

"动态调用FORM获得显示字段

IF P_FRM_FIELDCAT_NAME IS INITIAL.

MESSAGE S001(00) WITH '没有找显示字段(FIELDCAT)' DISPLAY LIKE 'E'.

RETURN.

ENDIF.

PERFORM (P_FRM_FIELDCAT_NAME) IN PROGRAM. "动态调用FORM

"将内表数据发给ALV(MAIN)的数据

CALL METHOD P_GRID->SET_TABLE_FOR_FIRST_DISPLAY

EXPORTING

IS_LAYOUT = ALV_CLASS_LAYOUT

CHANGING

IT_OUTTAB = P_IT_TAB[]

IT_FIELDCATALOG = ALV_CLASS_FIELDCAT.

PERFORM GRID_SELECT_ROW USING FRM_ROW CHANGING P_GRID.

ENDFORM. "container_init

*&---------------------------------------------------------------------*

*& Form alv_clear_ucomm

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

FORM ALV_CLEAR_UCOMM.

CLEAR GRID_E_UCOMM.

ENDFORM. "alv_clear_ucomm

*&---------------------------------------------------------------------*

*& Form SET_FIELDCAT

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

FORM CONTAINER_SET_FIELDCAT USING P_FIELDNAME

P_TEXT

P_LEN

P_JUST

P_REF_TABLE

P_REF_FIELD

P_CHECKBOX

P_HOTSPOT

P_KEY

P_EDIT

P_DO_SUM.

DATA: WA_FIELDCAT LIKE LINE OF ALV_CLASS_FIELDCAT.

WA_FIELDCAT-EDIT = P_EDIT.

WA_FIELDCAT-COL_OPT = 'U'.

WA_FIELDCAT-CHECKBOX = P_CHECKBOX.

WA_FIELDCAT-FIELDNAME = P_FIELDNAME .

WA_FIELDCAT-HOTSPOT = P_HOTSPOT.

WA_FIELDCAT-SCRTEXT_M = P_TEXT.

WA_FIELDCAT-DO_SUM = P_DO_SUM.

WA_FIELDCAT-REF_FIELD = P_REF_FIELD.

WA_FIELDCAT-REF_TABLE = P_REF_TABLE.

WA_FIELDCAT-OUTPUTLEN = P_LEN.

WA_FIELDCAT-KEY = P_KEY.

WA_FIELDCAT-JUST = P_JUST.

COLLECT WA_FIELDCAT INTO ALV_CLASS_FIELDCAT.

ENDFORM. "SET_FIELDCAT

*&---------------------------------------------------------------------*

*& Form container_set_event

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

FORM CONTAINER_SET_EVENT USING P_EVENT

P_CALL_FROM_NAME

CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID.

CLEAR IT_EVENT.

CASE P_EVENT.

WHEN 'USER_COMMAND' OR '自定义事件' OR 'UCOMM'. "sy-ucomm

SET HANDLER ALV_EVENT->HANDLE_USER_COMMAND FOR P_GRID.

IT_EVENT-EVENTID = 'HANDLE_USER_COMMAND'.

WHEN 'COMMAND'. "sy-ucomm

SET HANDLER ALV_EVENT->HANDLE_COMMAND FOR P_GRID.

IT_EVENT-EVENTID = 'HANDLE_COMMAND'.

WHEN 'TOOLBAR' OR '工具栏'."工具栏设置

SET HANDLER ALV_EVENT->HANDLE_TOOLBAR FOR P_GRID.

IT_EVENT-EVENTID = 'HANDLE_TOOLBAR'.

WHEN 'DBCLIKE' OR '双击' OR 'DBC'."双击事件

SET HANDLER ALV_EVENT->HANDLE_DOUBLE_CLICK FOR P_GRID.

IT_EVENT-EVENTID = 'HANDLE_DOUBLE_CLICK'.

WHEN 'CLICKED' OR '单击'."单击事件

SET HANDLER ALV_EVENT->HANDLE_CLICK FOR P_GRID.

IT_EVENT-EVENTID = 'HANDLE_CLICK'.

WHEN 'CHANGED' OR '变化' OR '修改' OR 'MODIFY' OR 'MOD'."数据变化事件

SET HANDLER ALV_EVENT->HANDLE_CHANGED FOR P_GRID.

IT_EVENT-EVENTID = 'HANDLE_CHANGED'.

WHEN 'ONDROP'.

SET HANDLER ALV_EVENT->HANDLE_CHANGED FOR P_GRID.

IT_EVENT-EVENTID = 'HANDLE_ONDROP'.

* WHEN 'CHANGED_FINISHED'."数据变化事件

* SET HANDLER ALV_EVENT->HANDLE_CHANGED FOR P_GRID.

* IT_EVENT-EVENT = 'HANDLE_CHANGED_FINISHED'.

ENDCASE.

IT_EVENT-DYNGR = SY-DYNNR. "屏幕号

IT_EVENT-EVENTNAME = P_CALL_FROM_NAME. "调用的事件名(FROM)

IT_EVENT-CONT_NAME = ALV_CONT_NAME.

COLLECT IT_EVENT.

ENDFORM. "container_set_event

*&---------------------------------------------------------------------*

*& Form DIS_TOOLBAR

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* -->P_MENUNAME text

*----------------------------------------------------------------------*

FORM DIS_TOOLBAR USING P_MENUNAME TYPE STRING.

"*--------- 标准工具栏所有的功能按钮 ------------------

"明细 按升序排序 按降序排序 查找 查找下一个 设置筛选器

"总计 小计 打印 视图 输出 选择格式 显示图形 最终用户文档

"*----------------------------------------------------

DATA: FRM_ITAB TYPE TABLE OF STRING WITH HEADER LINE.

REFRESH IT_DISPLAY_TOOLBAR_CHECK.

CLEAR IT_DISPLAY_TOOLBAR_CHECK.

IT_DISPLAY_TOOLBAR_CHECK-DYNNR = SY-DYNNR. "屏幕号

IF P_MENUNAME IS NOT INITIAL.

SPLIT P_MENUNAME AT SPACE INTO TABLE FRM_ITAB.

LOOP AT FRM_ITAB.

IT_DISPLAY_TOOLBAR_CHECK-SIGN = 'E'.

IT_DISPLAY_TOOLBAR_CHECK-OPTION = 'CP'.

CONCATENATE '*' FRM_ITAB '*' INTO IT_DISPLAY_TOOLBAR_CHECK-LOW.

CONDENSE IT_DISPLAY_TOOLBAR_CHECK-LOW.

APPEND IT_DISPLAY_TOOLBAR_CHECK.

ENDLOOP.

ELSE.

IT_DISPLAY_TOOLBAR_CHECK-SIGN = 'E'.

IT_DISPLAY_TOOLBAR_CHECK-OPTION = 'CP'.

IT_DISPLAY_TOOLBAR_CHECK-LOW = '!!!'.

CONDENSE IT_DISPLAY_TOOLBAR_CHECK-LOW.

APPEND IT_DISPLAY_TOOLBAR_CHECK.

ENDIF.

ENDFORM. "alv_TOOLBAR

*&---------------------------------------------------------------------*

*& Form HANDLE_CHANGED

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* -->P_ET_GOOD_CELLS text

*----------------------------------------------------------------------*

FORM HANDLE_CALL_FORM USING P_EVENTID.

DATA FRM_DYNNR LIKE SY-DYNNR.

PERFORM ALV_GET_DYNNR CHANGING FRM_DYNNR.

CLEAR IT_EVENT.

IF ALV_CONT_NAME IS INITIAL.

READ TABLE IT_EVENT WITH KEY DYNGR = FRM_DYNNR

EVENTID = P_EVENTID.

ELSE.

READ TABLE IT_EVENT WITH KEY DYNGR = FRM_DYNNR

CONT_NAME = ALV_CONT_NAME

EVENTID = P_EVENTID.

ENDIF.

IF SY-SUBRC EQ 0 AND IT_EVENT-EVENTNAME IS NOT INITIAL.

PERFORM (IT_EVENT-EVENTNAME) IN PROGRAM.

ENDIF.

ENDFORM. " HANDLE_CHANGED

*&---------------------------------------------------------------------*

*& Form HANDLE_SET_STANDART_TOOLBAR

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

FORM HANDLE_SET_STANDART_TOOLBAR.

IF IT_DISPLAY_TOOLBAR_CHECK[] IS INITIAL.

PERFORM DIS_TOOLBAR USING ''.

ENDIF.

REFRESH IT_DISPLAY_TOOLBAR.

CLEAR IT_DISPLAY_TOOLBAR.

LOOP AT IT_DISPLAY_TOOLBAR_CHECK WHERE DYNNR = SY-DYNNR. "屏幕号

MOVE-CORRESPONDING IT_DISPLAY_TOOLBAR_CHECK TO IT_DISPLAY_TOOLBAR.

COLLECT IT_DISPLAY_TOOLBAR.

ENDLOOP.

ENDFORM. "HANDLE_SET_STANDART_TOOLBAR

*&---------------------------------------------------------------------*

*& Form CONTAINER_ACCEPTTEXT

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

FORM CONTAINER_ACCEPTTEXT CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID.

CALL METHOD P_GRID->CHECK_CHANGED_DATA.

ENDFORM. "CONTAINER_ACCEPTTEXT

*&---------------------------------------------------------------------*

*& Form GET_GRID_MODI

*&---------------------------------------------------------------------*

* 获得GRID的值(非内表值)

*----------------------------------------------------------------------*

* -->P_MODI text

*----------------------------------------------------------------------*

FORM GET_GRID_MODI TABLES P_MODI STRUCTURE LVC_S_MODI.

SORT GRID_MODI BY ROW_ID.

P_MODI[] = GRID_MODI[].

ENDFORM. "GET_GRID_MODI

*&---------------------------------------------------------------------*

*& Form grid_refresh

*&---------------------------------------------------------------------*

* 刷新ALV

*----------------------------------------------------------------------*

FORM GRID_REFRESH CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID.

DATA: FRM_ROW TYPE P,

FRM_COL TYPE P.

PERFORM GET_GRID_CURRENT_CELL CHANGING P_GRID FRM_ROW FRM_COL.

"刷新

CALL METHOD P_GRID->REFRESH_TABLE_DISPLAY.

ENDFORM. "grid_refresh

*&---------------------------------------------------------------------*

*& Form grid_select_row

*&---------------------------------------------------------------------*

* 光标跳到指定的行

*----------------------------------------------------------------------*

FORM GRID_SELECT_ROW USING P_ROW_ID CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID.

"滚动到选中的行

DATA: FRM_POS_ROW TYPE LVC_T_ROID,

FRM_WA_POS_ROW LIKE LINE OF FRM_POS_ROW.

FRM_WA_POS_ROW-ROW_ID = P_ROW_ID.

APPEND FRM_WA_POS_ROW TO FRM_POS_ROW.

CALL METHOD P_GRID->SET_SELECTED_ROWS

EXPORTING

IT_ROW_NO = FRM_POS_ROW.

ENDFORM. "grid_select_row

*&---------------------------------------------------------------------*

*& Form grid_set_cell

*&---------------------------------------------------------------------*

* 光标跳到指定的列

*----------------------------------------------------------------------*

* -->P_CELL_ID text

*----------------------------------------------------------------------*

FORM GRID_SELECT_CELL USING P_ROW_ID P_CELL_ID CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID.

"将光标定位在选中的字段上

DATA: FRM_CELL TYPE LVC_S_CENO OCCURS 0.

DATA: FRM_WA_CELL LIKE LINE OF FRM_CELL.

DATA: FRM_SET_COL TYPE LVC_S_COL,

FRM_SET_ROW TYPE LVC_S_ROW,

FRM_SET_VAL TYPE LVC_VALUE.

FRM_SET_ROW-INDEX = P_ROW_ID.

FRM_WA_CELL-ROW_ID = FRM_SET_ROW.

FRM_WA_CELL-COL_ID = P_CELL_ID.

APPEND FRM_WA_CELL TO FRM_CELL.

CALL METHOD P_GRID->SET_SELECTED_CELLS_ID

EXPORTING

IT_CELLS = FRM_CELL.

ENDFORM. "grid_set_cell

*&---------------------------------------------------------------------*

*& Form GRID_SELECT_ROW_BY_TAB

*&---------------------------------------------------------------------*

* 光标跳到指定的行列

*----------------------------------------------------------------------*

* -->P_IT_ROW text

* -->P_GRID text

*----------------------------------------------------------------------*

FORM GRID_SELECT_ROW_CELL USING P_ROW P_CELL CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID.

"光标定位在修改的行

PERFORM GRID_SELECT_ROW USING P_ROW CHANGING P_GRID.

"光标定位在修改的行的列上

PERFORM GRID_SELECT_CELL USING P_ROW P_CELL CHANGING P_GRID.

ENDFORM. "GRID_SELECT_ROW_BY_TAB

*&---------------------------------------------------------------------*

*& Form GET_GRID_CURRENT_CELL

*&---------------------------------------------------------------------*

* 获得光标所在的行

*----------------------------------------------------------------------*

* -->P_GRID text

* -->P_ROW text

* -->P_COL text

*----------------------------------------------------------------------*

FORM GET_GRID_CURRENT_CELL CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID P_ROW P_COL.

DATA: FRM_ROW TYPE I,

FRM_VALUE(100) TYPE C,

FRM_COL TYPE I,

FRM_ROW_ID TYPE LVC_S_ROW.

"取当前的记录信息(行,列,值等等)

CALL METHOD P_GRID->GET_CURRENT_CELL

IMPORTING

E_ROW = FRM_ROW

E_VALUE = FRM_VALUE

E_COL = FRM_COL

ES_ROW_ID = FRM_ROW_ID.

P_ROW = FRM_ROW.

P_COL = FRM_COL.

ENDFORM. "GET_GRID_CURRENT_CELL

*&---------------------------------------------------------------------*

*& Form ALV_SET_DYNNR

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* -->P_DYNNR text

*----------------------------------------------------------------------*

FORM ALV_SET_DYNNR USING P_DYNNR.

ALV_SET_CUR_DYNNR = P_DYNNR.

ENDFORM. "ALV_SET_DYNNR

*&---------------------------------------------------------------------*

*& Form alv_get_dynnr

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* -->P_DYNNR text

*----------------------------------------------------------------------*

FORM ALV_GET_DYNNR CHANGING P_DYNNR.

DATA FRM_DYNNR LIKE SY-DYNNR.

* DATA FRM_UCOMM TYPE SY-UCOMM.

* PERFORM GET_GRID_TOOLBAR_UCOMM CHANGING FRM_UCOMM.

* IF GRID_E_UCOMM IS NOT INITIAL.

* FRM_DYNNR = GRID_E_UCOMM(4).

* ELSE.

IF ALV_SET_CUR_DYNNR IS INITIAL.

PERFORM FRM_GET_ALV_CURDYNNR. "取当前操作的屏幕号

IF ALV_CUR_DYNNR IS NOT INITIAL.

FRM_DYNNR = ALV_CUR_DYNNR.

ELSE.

FRM_DYNNR = SY-DYNNR.

ENDIF.

P_DYNNR = FRM_DYNNR.

ELSE.

P_DYNNR = ALV_SET_CUR_DYNNR.

CLEAR ALV_SET_CUR_DYNNR.

ENDIF.

ENDFORM. "alv_get_dynnr

*&---------------------------------------------------------------------*

*& Form SET_TOOLBAR_DEFINE_BUTTON

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* -->P_FUNCTION 功能代码

* -->P_ICON ICON图标

* -->P_TEXT 显示的文本

* -->P_QUICKINFO 摘要(当鼠标移到按钮上面时显示的文本)

* -->P_BUTN_TYPE ' '-无下拉菜单,1-有下拉菜单

* -->P_DISABLED 可否编辑

* -->P_CHECKED ‘X’-按下去状态

*----------------------------------------------------------------------*

FORM SET_TOOLBAR_DEFINE_BUTTON USING P_FUNCTION P_ICON P_TEXT P_QUICKINFO P_BUTN_TYPE P_DISABLED P_CHECKED.

DATA FRM_DYNNR LIKE SY-DYNNR.

PERFORM ALV_GET_DYNNR CHANGING FRM_DYNNR.

IT_TOOLBAR-DYNNR = FRM_DYNNR. "屏幕号

"IT_TOOLBAR-FUNCTION = P_FUNCTION.

IT_TOOLBAR-UCOMM = P_FUNCTION.

IT_TOOLBAR-ICON = P_ICON.

IF P_QUICKINFO IS INITIAL.

IT_TOOLBAR-QUICKINFO = P_TEXT.

ELSE.

IT_TOOLBAR-QUICKINFO = P_QUICKINFO.

ENDIF.

IT_TOOLBAR-BUTN_TYPE = P_BUTN_TYPE.

IT_TOOLBAR-DISABLED = P_DISABLED.

IT_TOOLBAR-TEXT = P_TEXT.

IT_TOOLBAR-CHECKED = P_CHECKED.

CONCATENATE IT_TOOLBAR-DYNNR IT_TOOLBAR-UCOMM INTO IT_TOOLBAR-FUNCTION.

COLLECT IT_TOOLBAR.

ENDFORM. "set_toolbar_define_button

*&---------------------------------------------------------------------*

*& Form SET_GRID_TITLE

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* -->P_TITLE text

*----------------------------------------------------------------------*

FORM SET_CONTAINER_TITLE USING P_TITLE.

GRID_TITLE = P_TITLE.

ENDFORM. "SET_GRID_TITLE

*&---------------------------------------------------------------------*

*& Form set_col_width

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

FORM SET_CONTIANER_GRID_WIDTH.

GRID_CWDTH_OPT = 'X'.

ENDFORM. "set_col_width

*&---------------------------------------------------------------------*

*& Form TOOLBAR_DEFINE_BUTTON

*&---------------------------------------------------------------------*

* 设置TOOLBAR的按钮

*----------------------------------------------------------------------*

* --> p1 text

* <-- p2 text

*----------------------------------------------------------------------*

FORM TOOLBAR_DEFINE_BUTTON USING E_OBJECT TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET .

DATA: LS_TOOLBAR TYPE STB_BUTTON.

DATA: LS_TEXT(100).

"在标准工具栏后加上自定义的按钮方法

DEFINE SET_TOOLBAR.

CLEAR LS_TOOLBAR.

MOVE &1 TO LS_TOOLBAR-FUNCTION.

MOVE &2 TO LS_TOOLBAR-ICON.

MOVE &3 TO LS_TOOLBAR-QUICKINFO.

MOVE &4 TO LS_TOOLBAR-BUTN_TYPE.

MOVE &5 TO LS_TOOLBAR-DISABLED.

MOVE &6 TO LS_TOOLBAR-TEXT.

MOVE &7 TO LS_TOOLBAR-CHECKED.

APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.

END-OF-DEFINITION.

DATA FRM_DYNNR LIKE SY-DYNNR.

PERFORM ALV_GET_DYNNR CHANGING FRM_DYNNR.

"调用加上自定义的按钮方法在工具栏上增加自定义按钮

LOOP AT IT_TOOLBAR WHERE DYNNR = FRM_DYNNR.

CONCATENATE ' 'IT_TOOLBAR-TEXT INTO LS_TEXT SEPARATED BY SPACE.

SET_TOOLBAR IT_TOOLBAR-FUNCTION IT_TOOLBAR-ICON IT_TOOLBAR-QUICKINFO IT_TOOLBAR-BUTN_TYPE IT_TOOLBAR-DISABLED LS_TEXT IT_TOOLBAR-CHECKED.

ENDLOOP.

ENDFORM. " TOOLBAR_DEFINE_BUTTON

*&---------------------------------------------------------------------*

*& Form get_grid_toolbar_ucomm

*&---------------------------------------------------------------------*

* 返回当前事件的SY-UCOMM

*----------------------------------------------------------------------*

* -->P_UCOMM text

*----------------------------------------------------------------------*

FORM GET_GRID_TOOLBAR_UCOMM CHANGING P_UCOMM TYPE SY-UCOMM.

P_UCOMM = GRID_E_UCOMM+4.

ENDFORM. "get_grid_toolbar_ucomm

*&---------------------------------------------------------------------*

*& Form REFRESH_SCREEN

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* --> p1 text

* <-- p2 text

*----------------------------------------------------------------------*

FORM REFRESH_SCREEN .

"刷新屏幕

CALL METHOD CL_GUI_CFW=>SET_NEW_OK_CODE

EXPORTING

NEW_CODE = 'OK'.

ENDFORM. " REFRESH_SCREEN`

*&---------------------------------------------------------------------*

*& Form get_selectrow

*&---------------------------------------------------------------------*

* 获得选中的列号

*----------------------------------------------------------------------*

FORM GET_SELECTROW TABLES P_ROW_NO STRUCTURE LVC_S_ROID CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID.

DATA: FRM_ROW_NO TYPE LVC_T_ROID.

REFRESH P_ROW_NO.

CALL METHOD P_GRID->GET_SELECTED_ROWS

IMPORTING

ET_ROW_NO = FRM_ROW_NO.

P_ROW_NO[] = FRM_ROW_NO[].

ENDFORM. "get_selectrow

*&---------------------------------------------------------------------*

*& Form selectall

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* -->P_ITAB text

* -->P_GRID text

*----------------------------------------------------------------------*

FORM SELECTALL TABLES P_ITAB CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID.

DATA: FRM_ROW_NO TYPE LVC_T_ROID,

FRM_ROWID TYPE I,

FRM_WA_ROW LIKE LINE OF FRM_ROW_NO.

CLEAR FRM_ROWID.

LOOP AT P_ITAB.

ADD 1 TO FRM_ROWID.

CLEAR FRM_ROW_NO.

FRM_WA_ROW-ROW_ID = FRM_ROWID.

APPEND FRM_WA_ROW TO FRM_ROW_NO.

ENDLOOP.

CALL METHOD P_GRID->SET_SELECTED_ROWS

EXPORTING

IT_ROW_NO = FRM_ROW_NO.

ENDFORM. "selectall

*&---------------------------------------------------------------------*

*& Form SET_CELL

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* -->P_CELLID text

* -->P_GRID text

*----------------------------------------------------------------------*

FORM SET_CELL USING P_ROWID P_CELLID CHANGING P_GRID TYPE REF TO CL_GUI_ALV_GRID.

DATA: LVC_T_CENO TYPE LVC_T_CENO,

FRM_WA_CENO LIKE LINE OF LVC_T_CENO.

FRM_WA_CENO-ROW_ID = P_ROWID.

FRM_WA_CENO-COL_ID = P_CELLID.

APPEND FRM_WA_CENO TO LVC_T_CENO.

CALL METHOD P_GRID->SET_SELECTED_CELLS_ID

EXPORTING

IT_CELLS = LVC_T_CENO.

ENDFORM. "SET_CELL
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: