OO ALV 的一些小功能(开发日记)

论坛 期权论坛 脚本     
匿名技术用户   2021-1-4 16:13   35   0

目录

1、可编辑字段值修改错误日志的弹出

2、ALV 某一列的字段可编辑

3、设置状态栏的按钮

4、获取ALV上选择的行

5、ALV 修改单元格的值

6、ALV全屏

7、ALV中动态显示Toolbar的方法



1、可编辑字段值修改错误日志的弹出

DATA_CHANGED 事件中有一个参数ER_DATA_CHANGED,参数参考CL_ALV_CHANGED_DATA_PROTOCOL,当屏幕字段修改的时候,触发DATA_CHANGED事件,此时判断字段的值是否符合规定,如果不符合规定,则调用CL_ALV_CHANGED_DATA_PROTOCOL的方法ADD_PROTOCOL_ENTRY,显示日志。

PERFORM ADD_PROTOCOL_ENTRY USING PO_DATA

'ZPSH1' '037' TEXT-T01

LS_CELL-FIELDNAME

LS_CELL-ROW_ID.

FORM ADD_PROTOCOL_ENTRY USING PO_DATA TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL

PV_MSGID

PV_MSGNO

PV_MSG

PV_FIELDNAME

PV_ROWID.

CALL METHOD PO_DATA->ADD_PROTOCOL_ENTRY

EXPOTING

I_MSGID = PV_MSGID

I_MSGNO = PV_MSGNO

I_MSGTY = 'E'

I_MSGV1 = PV_MSG

I_FIELDNAME = PV_FIELDNAME

I_ROW_ID = PV_ROWID.

2、ALV 某一列的字段可编辑

在定义的内表中增加移个参数 STYL 参考LVC_T_STYL,

执行显示前,设置STYL的参数 FIELDNAME = 要编辑的字段名称

STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED。注意如果有多个字段需要可编辑的时候,要注意字段排序

3、设置状态栏的按钮

参数参考 CL_ALV_EVENT_TOOLBAR_SET.

PV_OBJECT TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET.

PERFORM SET_BUT USING PV_OBECCT->MT_TOOLBAR: 'ADD' 'ADD'

ICON_INSERT_ROW.

FORM SET_BUT USING PV_TOOLBAR TYPE TTB_BUTTON

PV_FUNCTION

PV_TEXT

PV_ICON.

DATA:LS_TOOLBAR TYPE STB_BUTTON.

MOVE PV_FUNCTION TO LS_TOOLBAR-FUNCITON.

MOVE PV_TEXT TO LS_TOOLBAR-TEXT.

MOVE PV_TEXT TO LS_TOOLBAR-QUICKINFO.

MOVE PV_ICON TO LS_TOOLBAR-ICON.

APPEND LS_TOOLBAR TO PV_TOOLBAR.

ENDFORM.

4、获取ALV上选择的行

DATA:LT_ROWS TYPE LVC_T_ROID.

GO_GRID->GET_SELECTED_ROWS( IMPORTING ET_ROW_NO = LT_ROWS )

5、ALV 修改单元格的值

在DATA_CHANGED事件中,调用参数的类CL_ALV_CHANGED_DATA_PROTOCOL 的方法MODIFY_CELL.

PERFORM MODIFY_FIELD USING PO_DATA

LS_CELL-ROW_ID

'WERKS'

LS_DATA-WERKS.

FORM MODIFY_FIELD USING PO_DATA TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL

PV_ROW_ID

PV_FIELDNAME TYPE LVC_FNAME

PV_VALUE.

CALL METHOD PO_DATA->MODIFY_CELL

EXPORTING

I_ROW_ID = PV_ROW_ID

I_FIELDNAME = PV_FIELDNAME

I_VALUE = PV_VALUE.

ENDFORM.

6、ALV全屏

创建ALV的时候,不再使用在屏幕上画控件,调用控件的方式实现ALV,而使用CL_GUI_DOCKING_CONTAINER的方式实现,具体方式如下。

1、定义全局变量

DATA:GO_DOCKING TYPE REF TO CL_GUI_DOCKING_CONTATINER.

2、在屏幕PBO的逻辑流里面

DATA:LV_SIDE TYPE I VALUE CL_GUI_DOCKING_CONATINER=>DOCK_AT_TOP.

CREATE OBJECT GO_DOCKING

EXORTING

REPID = SY-REPID

DYNNR = SY-DUNNR

SIDE = LV_SIDE

EXTENSION = 500

EXCEPTIONS

CNTL_ERROR = 1

CNTL_SYSTEM_ERROR = 2

CREATE_ERROR = 3

LIFETIME_ERROR = 4

LIFETIME_DYNPRO_DYNPRO_LINE = 5.

IF SY-SUBRC NE 0.

ENDIF.

CREATE OBJECT GO_GRID

EXPORTNG

I_PARENT = GO_DOCKING

EXCEPTIONS

ERROR_CNTL_CREATE = 1

ERROR_CNTL_INIT = 2

ERROR_CNTL_LINK = 3

ERROR_DP_CREATE = 4

OTHERS = 5

IF SY-SUBRC NE 0

ENDIF.

7、ALV中动态显示Toolbar的方法

调用ALV的时候,将ALV的按钮设置成隐藏状态,注册Toolbar事件,并将对应的功能码及文本重新添加上去。

隐藏按钮:

PERFORM EXCLUDE_TB_FUNCTION USING 'GT_EXCE_100'.

FORM EXCLUDE_TB_FUNCTION USING PV_TABNM.

FIELD-SYSBOLS:<L_TAB> TYPE UI_FUNCTIONS.

DATA:LV_TAB_NAME TYPE FELD-NAME.

CLEAR LV_TAB_NAME.

CONCATENATE:PV_TABNM '[]' INTO LV_TAB_NAME.

ASSIGN (LV_TAB_NAME) TO <L_TAB>.

CLEAR <L_TAB>.

PERFORM APPEND_EXCLUDE_FUNCTIONS TABLES <L_TAB>

USING:CL_GUI_ALV_GRID=>MC_FC_SUBTOT. "小计

CL_GUI_ALV_GRID=>MC_FC_LOCAL_APPEND, "新增

CL_GUI_ALV_GRID=>MC_FC_LOCAL_INSERT, "插入

CL_GUI_ALV_GRID=>MC_FC_LOCAL_DELETE. "删除

FORM APPEND_EXCLUDE_FUNCTIONS TABLES PT_TABLE

USING PV_VALUE.

DATA:LS_EXCLUDE TYPE UI_FUNCTION.

CLEAR LS_EXCLUDE.

LS_EXCLUDE-FUNCTION = PV_VALUE.

APPEND LS_EXCLUDE TO PT_TABLE.

ENDFORM.

ENDFORM.

Tool bar 事件

METHOD HANDLE_TOOLBAR

FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID

IMPORTING E_OBJECT.

METHOD HANDLE_TOOBAR.

PERFORM SET_TOOLBAR CHANGE E_OBJECT.

ENDMETHOD.

FORM SET_TOOLBAR CHANGE P_OBJECT TYPE REF TO CL_AV_EVENT_TOOLBAR_SET.

DATA:LS_TOOLBAR TYPE STB_BUTTON.

IF MODE = 'CHANGE'.

CLEAR LS_TOOLBAR.

MOVE '&LOCAL&APPEND' TO LS_TOOLBAR-FUNCTION.

MOVE 'Append Row' TO LS_TOOLBAR-QUICKINFO.

MOVE ICON_CREATE TO LS_TOOLBAR-ICON.

APPEND LS_TOOLBAR TO P_OBJECT->MT_TOOLBAR.

ENDIF.

ENDFORM.

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP