|
目录
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.
调用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.
|