OO ALV 的一些小功能(開發日記)

 

 

 

 

 

目錄

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.

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章