abap 單元格級別的操作ALV.
單元格級別的操作ALV.
帶表頭的ALV使用結構如下:
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = I_EVENTS.
READ TABLE I_EVENTS
WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
INTO W_EVENTS.
IF SY-SUBRC = 0.
MOVE 'ALV_TOP_OF_PAGE' TO W_EVENTS-FORM.
MODIFY I_EVENTS FROM W_EVENTS INDEX SY-TABIX.
ENDIF.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'SET_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT_LVC = GD_LAYOUT
IT_FIELDCAT_LVC = IT_FIELDCAT
IT_EVENTS = I_EVENTS
I_SAVE = 'X'
IT_SORT_LVC = IT_SORT
TABLES
T_OUTTAB = GT_ALV
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
一,定義部分。
TYPE-POOLS: SLIS.
1. 定義顯示字段宏
DATA: IT_FIELDCAT TYPE LVC_T_FCAT, "slis_t_fieldcat_alv WITH HEADER LINE,
WA_FIELDCAT TYPE LVC_S_FCAT.
DEFINE ALV_INIT.
WA_FIELDCAT-FIELDNAME = &1.
WA_FIELDCAT-SCRTEXT_M = &2.
WA_FIELDCAT-EDIT = &3.
WA_FIELDCAT-OUTPUTLEN = &4.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
END-OF-DEFINITION.
2.定義排序定義
DATA: IT_SORT TYPE LVC_T_SORT.
DATA: WA_SORT TYPE LVC_S_SORT.
3.定義顯示參數
DATA GD_LAYOUT TYPE LVC_S_LAYO.
4.表頭定義
DATA I_EVENTS TYPE SLIS_T_EVENT,
W_EVENTS LIKE LINE OF I_EVENTS.
DATA I_LIST_COMMENTS TYPE SLIS_T_LISTHEADER,
W_LIST_COMMENTS LIKE LINE OF I_LIST_COMMENTS .
5.單元格可編輯狀態設置
在定義的輸出結構中添加
TYPES: BEGIN OF TYP_SAMPLE.
.......
TYPES: 測試字段名稱 TYPE 測試類型.
TYPES: SEL TYPE C. "爲設置多選狀態預留
TYPES: FIELD_STYLE TYPE LVC_T_STYL. "爲設置單元格狀態預留
TYPES: ROWCOLOR TYPE CHAR30. "爲添加某行數據整體顏色預留
TYPES: END OF TYP_SAMPLE.
二、ALV FM 動態程序出口格式:
1.ALV PAI事件出口格式:
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
1).使用整體設置,只要有OK_CODE就會刷新
RS_SELFIELD-REFRESH = 'X'.
2).不同按鈕條件下的刷新
CASE RF_UCOMM.
WHEN 'SAVE'."SAVE爲狀態欄按鈕
"只在點擊SAVE(按鈕名稱)按鈕時候纔會自動刷新
RS_SELFIELD-REFRESH = 'X'.
WHEN OTHERS.
ENDCASE.
ENDFORM.
2.表頭出口實例:
FORM ALV_TOP_OF_PAGE.
CLEAR: I_LIST_COMMENTS[].
W_LIST_COMMENTS-TYP = 'H'. "H=Header, S=Selection, A=Action
W_LIST_COMMENTS-KEY = ''.
CONCATENATE ' ' '直髮銷售訂單取消審批流程' INTO W_LIST_COMMENTS-INFO.
APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.
**組織機構
CLEAR W_LIST_COMMENTS.
W_LIST_COMMENTS-TYP = 'S'. "H=Header, S=Selection, A=Action
W_LIST_COMMENTS-KEY = ''.
CONCATENATE '雙擊報表中的銷售訂單那列可以進入顯示銷售訂單界面,查看銷售訂單詳細情況。'
W_LIST_COMMENTS-INFO INTO W_LIST_COMMENTS-INFO.
APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.
** 時間範圍
CLEAR W_LIST_COMMENTS.
W_LIST_COMMENTS-TYP = 'S'. "H=Header, S=Selection, A=Action
W_LIST_COMMENTS-KEY = ''.
CONCATENATE '統計日期:' SY-DATUM INTO W_LIST_COMMENTS-INFO.
APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.
CLEAR W_LIST_COMMENTS.
*調撥ALV的功能
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = I_LIST_COMMENTS.
ENDFORM. "alv_top_of_page
3.狀態欄出口實例
FORM SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
ENDFORM.
三 ALV整體設置以及相關功能。
1). GD_LAYOUT-BOX_FNAME = 'SEL'. “設置多選按鈕名稱 (定義字段)
GD_LAYOUT-STYLEFNAME = 'FIELD_STYLE'. ”設置單元格選擇名稱 (定義字段)
GD_LAYOUT-INFO_FNAME = 'ROWCOLOR'. “設置顏色名稱 (定義字段)
單元格設置爲不可編輯狀態設置:(WA_FIELDCAT-EDIT = 'X' 要操作的列 必須設爲可編輯狀態 )
LS_STYLEROW-FIELDNAME = '測試字段名稱' .
LS_STYLEROW-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. "set field to disabled
CLEAR GT_ALV-FIELD_STYLE.
APPEND LS_STYLEROW TO GT_ALV-FIELD_STYLE.
注:通過LOOP ALV要顯示的內表 可以根據SEL的‘X’或者其他字段的狀態值,動態設置可編輯還是不可編輯狀態
單元格設置爲可編輯狀態設置:
LS_STYLEROW-FIELDNAME = '測試字段名稱' .
LS_STYLEROW-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. "set field to disabled
CLEAR GT_ALV-FIELD_STYLE.
APPEND LS_STYLEROW TO GT_ALV-FIELD_STYLE.
注:通過LOOP ALV要顯示的內表 可以根據SEL的‘X’或者其他字段的狀態值,動態設置可編輯還是不可編輯狀態
實例備忘代碼:
LOOP AT GT_ALV WHERE SQYY NE ''. "SQYY 申請原因 STAT 申請狀態
IF GT_ALV-STAT IS NOT INITIAL.
LS_STYLEROW-FIELDNAME = 'SQYY' .
LS_STYLEROW-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. "set field to disabled
CLEAR GT_ALV-FIELD_STYLE.
APPEND LS_STYLEROW TO GT_ALV-FIELD_STYLE.
MODIFY GT_ALV.
CLEAR LS_STYLEROW.
CLEAR GT_ALV.
ELSE.
LS_STYLEROW-FIELDNAME = 'SQYY' .
LS_STYLEROW-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. "set field to disabled
CLEAR GT_ALV-FIELD_STYLE.
APPEND LS_STYLEROW TO GT_ALV-FIELD_STYLE.
MODIFY GT_ALV.
CLEAR LS_STYLEROW.
CLEAR GT_ALV.
ENDIF.
2). 設置排序字段代碼示例
WA_SORT-SPOS = '01'.
WA_SORT-FIELDNAME = '測試字段名稱'.
WA_SORT-UP = 'X'. "升序排列 WA_SORT-DOWN = ‘X’降序排列
APPEND WA_SORT TO IT_SORT.
CLEAR WA_SORT.
四 ALV中 PAI事件塊的操作。
1).由於單元格可編輯狀態,故要讓後臺獲取前臺(顯示層)所操作的數據,需要調用一個函數。
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = ALV_GRID.
分析:調用這個函數的其實是獲取 調用標準FM ALV的屏幕號已經屏幕上的CONTROL(C)控件名稱,並將所有的屬性賦值給定義好的實例ALV_GRID,然後通過ALV_GRID 調用相關的方法。
CALL METHOD ALV_GRID->CHECK_CHANGED_DATA. 在裏面的最重要的一句代碼就是
CALL METHOD CL_GUI_CFW=>FLUSH.這句代碼是將前臺屏幕所輸入的信息 同步到後臺CFW 服務器,然後使用ABAP代碼獲取所需要的操作信息。 CFW : CONTROL FRAMEWORK 控件架構 在SAP 的前臺中有個SAP GUI SERVICES (AUTOMATION HANDLER) 應用層的是 (CONTROL FRAMEWORK SERVICES) 就是使用該語句進行同步刷新的 。
代碼示例如下:
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
RS_SELFIELD TYPE SLIS_SELFIELD.
RS_SELFIELD-REFRESH = 'X'. "防止雙擊刷新
CASE RF_UCOMM .
WHEN 'APPROVE'.“審批
DATA ALV_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA LT_ZHGXS_ZFSP TYPE TABLE OF ZHGXS_ZFSP.
DATA LS_ZHGXS_ZFSP TYPE ZHGXS_ZFSP.
DATA L_SIGN TYPE C.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = ALV_GRID.
CALL METHOD ALV_GRID->CHECK_CHANGED_DATA.
”僞代碼如下:
LOOP ALV輸出內表 WHRER SEL = 'X' 被選中的行
IF 測試定義字段 IS INITIAL.
ELSE.
結構賦值.
添加內表.
ENDIF.
使用更新內表更新數據庫。
IF 返回值 = 0.
COMMIT WORK .提交數據庫,數據將不能被回滾.(數據層執行UPDATE隊列。調用相關FM寫入數據庫。)
ELSE.
ROLLBACK WORK . 數據庫回滾,只要有一條數據出錯,所有的數據將不能被寫入數據庫
ENDLOOP
......
WHEN OTHERS.
ENDCASE.
ENDFORM.
2) 單行添加顏色。
已設置好的字段
TYPES: BEGIN OF TYP_SAMPLE.
.......
TYPES: ROWCOLOR TYPE CHAR30. "爲添加某行數據整體顏色預留
TYPES: END OF TYP_SAMPLE.
GD_LAYOUT-INFO_FNAME = 'ROWCOLOR'. “設置顏色名稱 (定義字段)
PAI 出口中
如果遇到特定的提示情況,將值 C100 C200 .... C600 等等值付給ROWCOLOR. ALV自動就會輸出顏色行。
五、雙擊單元格控制。
在ALV函數的PAI出口中。
雙擊 是OKCODE爲空時候 默認響應事件。
所以實例代碼如下:
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
RS_SELFIELD-REFRESH = 'X'. "防止雙擊刷新
CASE RF_UCOMM .
WHEN 'APPROVE'.
PERFORM SUB_APPROVE_DATA TABLES GT_ALV. "提交申
WHEN 'REFRESH'.
PERFORM SUB_GET_DATA.
PERFORM SUB_SET_ALV.
WHEN OTHERS.
"雙擊
IF RS_SELFIELD-SEL_TAB_FIELD EQ '1-VBELN'.
READ TABLE GT_ALV INTO GS_ALV INDEX RS_SELFIELD-TABINDEX.
SET PARAMETER ID 'AUN' FIELD GS_ALV-VBELN.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ELSEIF RS_SELFIELD-SEL_TAB_FIELD EQ '1-SQYY'.
READ TABLE GT_ALV INTO GS_ALV INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC EQ 0.
CALL SCREEN 9000 STARTING AT 60 6
ENDING AT 102 19 .
MODIFY GT_ALV FROM GS_ALV INDEX RS_SELFIELD-TABINDEX.
ENDIF.
ENDIF.
ENDCASE.
CLEAR SY-UCOMM.
ENDFORM.
其中 RS_SELFIELD-SEL_TAB_FIELD EQ '1-測試字段名稱'
解釋如下:1 就是數字1. - 連接符- 後面就是VBELN.
1可以理解爲 列的意思,雙擊哪一列的哪個格。
RS_SELFIELD-TABINDEX 是系統結構的內表INDEX.
六。自定義輸入 輸入編輯文本框。自己畫好屏幕(憑感覺畫)然後畫一個控件CONTROL 命名爲G_CONTAINER
9000屏幕流 9000屏幕屬性 :方式對話框
PROCESS BEFORE OUTPUT.
MODULE STATUS_9000.
*
PROCESS AFTER INPUT.
MODULE USER_COMMAND_9000.
屏幕代碼:
MODULE STATUS_9000 OUTPUT.
SET PF-STATUS 'S9000'.
CLEAR GT_SQYY[].
APPEND GS_ALV-SQYY TO GT_SQYY.
DATA L_SIGN TYPE C.
IF GS_ALV-STAT NE ''.
L_SIGN = 'X'.
ENDIF.
CALL FUNCTION 'RH_EDITOR_SET'
EXPORTING
REPID = SY-REPID
DYNNR = '9000'
CONTROLNAME = 'G_CONTAINER'
MAX_COLS = 43
SHOW_STATUS = 'X'
DISPLAY_MODE = L_SIGN
TABLES
LINES = GT_SQYY[]
EXCEPTIONS
CREATE_ERROR = 1
INTERNAL_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CLEAR L_SIGN.
ENDMODULE. " STATUS_9000 OUTPUT
MODULE USER_COMMAND_9000 INPUT.
DATA L_SQYY TYPE CHAR200.
CASE SY-UCOMM.
WHEN 'EXIT' OR 'BACK' OR 'CANCLE'.
LEAVE TO SCREEN 0.
WHEN 'SAVE'.
CLEAR GT_SQYY[].
CALL FUNCTION 'RH_EDITOR_GET'
EXPORTING
CONTROLNAME = 'G_CONTAINER'
TABLES
LINES = GT_SQYY[]
EXCEPTIONS
INTERNAL_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT GT_SQYY.
CONCATENATE L_SQYY GT_SQYY INTO L_SQYY .
CONDENSE L_SQYY NO-GAPS .
CLEAR GT_SQYY.
ENDLOOP.
GS_ALV-SQYY = L_SQYY.
CLEAR L_SQYY.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_9000 INPUT
這樣效果就是雙擊可編輯單元格就會出現一個可編輯文本框,定義一個對話框屬性的狀態欄 定義兩個按鈕 SAVE 和 BACK。
帶表頭的ALV使用結構如下:
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = I_EVENTS.
READ TABLE I_EVENTS
WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
INTO W_EVENTS.
IF SY-SUBRC = 0.
MOVE 'ALV_TOP_OF_PAGE' TO W_EVENTS-FORM.
MODIFY I_EVENTS FROM W_EVENTS INDEX SY-TABIX.
ENDIF.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'SET_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT_LVC = GD_LAYOUT
IT_FIELDCAT_LVC = IT_FIELDCAT
IT_EVENTS = I_EVENTS
I_SAVE = 'X'
IT_SORT_LVC = IT_SORT
TABLES
T_OUTTAB = GT_ALV
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
一,定義部分。
TYPE-POOLS: SLIS.
1. 定義顯示字段宏
DATA: IT_FIELDCAT TYPE LVC_T_FCAT, "slis_t_fieldcat_alv WITH HEADER LINE,
WA_FIELDCAT TYPE LVC_S_FCAT.
DEFINE ALV_INIT.
WA_FIELDCAT-FIELDNAME = &1.
WA_FIELDCAT-SCRTEXT_M = &2.
WA_FIELDCAT-EDIT = &3.
WA_FIELDCAT-OUTPUTLEN = &4.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
END-OF-DEFINITION.
2.定義排序定義
DATA: IT_SORT TYPE LVC_T_SORT.
DATA: WA_SORT TYPE LVC_S_SORT.
3.定義顯示參數
DATA GD_LAYOUT TYPE LVC_S_LAYO.
4.表頭定義
DATA I_EVENTS TYPE SLIS_T_EVENT,
W_EVENTS LIKE LINE OF I_EVENTS.
DATA I_LIST_COMMENTS TYPE SLIS_T_LISTHEADER,
W_LIST_COMMENTS LIKE LINE OF I_LIST_COMMENTS .
5.單元格可編輯狀態設置
在定義的輸出結構中添加
TYPES: BEGIN OF TYP_SAMPLE.
.......
TYPES: 測試字段名稱 TYPE 測試類型.
TYPES: SEL TYPE C. "爲設置多選狀態預留
TYPES: FIELD_STYLE TYPE LVC_T_STYL. "爲設置單元格狀態預留
TYPES: ROWCOLOR TYPE CHAR30. "爲添加某行數據整體顏色預留
TYPES: END OF TYP_SAMPLE.
二、ALV FM 動態程序出口格式:
1.ALV PAI事件出口格式:
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
1).使用整體設置,只要有OK_CODE就會刷新
RS_SELFIELD-REFRESH = 'X'.
2).不同按鈕條件下的刷新
CASE RF_UCOMM.
WHEN 'SAVE'."SAVE爲狀態欄按鈕
"只在點擊SAVE(按鈕名稱)按鈕時候纔會自動刷新
RS_SELFIELD-REFRESH = 'X'.
WHEN OTHERS.
ENDCASE.
ENDFORM.
2.表頭出口實例:
FORM ALV_TOP_OF_PAGE.
CLEAR: I_LIST_COMMENTS[].
W_LIST_COMMENTS-TYP = 'H'. "H=Header, S=Selection, A=Action
W_LIST_COMMENTS-KEY = ''.
CONCATENATE ' ' '直髮銷售訂單取消審批流程' INTO W_LIST_COMMENTS-INFO.
APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.
**組織機構
CLEAR W_LIST_COMMENTS.
W_LIST_COMMENTS-TYP = 'S'. "H=Header, S=Selection, A=Action
W_LIST_COMMENTS-KEY = ''.
CONCATENATE '雙擊報表中的銷售訂單那列可以進入顯示銷售訂單界面,查看銷售訂單詳細情況。'
W_LIST_COMMENTS-INFO INTO W_LIST_COMMENTS-INFO.
APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.
** 時間範圍
CLEAR W_LIST_COMMENTS.
W_LIST_COMMENTS-TYP = 'S'. "H=Header, S=Selection, A=Action
W_LIST_COMMENTS-KEY = ''.
CONCATENATE '統計日期:' SY-DATUM INTO W_LIST_COMMENTS-INFO.
APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.
CLEAR W_LIST_COMMENTS.
*調撥ALV的功能
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = I_LIST_COMMENTS.
ENDFORM. "alv_top_of_page
3.狀態欄出口實例
FORM SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
ENDFORM.
三 ALV整體設置以及相關功能。
1). GD_LAYOUT-BOX_FNAME = 'SEL'. “設置多選按鈕名稱 (定義字段)
GD_LAYOUT-STYLEFNAME = 'FIELD_STYLE'. ”設置單元格選擇名稱 (定義字段)
GD_LAYOUT-INFO_FNAME = 'ROWCOLOR'. “設置顏色名稱 (定義字段)
單元格設置爲不可編輯狀態設置:(WA_FIELDCAT-EDIT = 'X' 要操作的列 必須設爲可編輯狀態 )
LS_STYLEROW-FIELDNAME = '測試字段名稱' .
LS_STYLEROW-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. "set field to disabled
CLEAR GT_ALV-FIELD_STYLE.
APPEND LS_STYLEROW TO GT_ALV-FIELD_STYLE.
注:通過LOOP ALV要顯示的內表 可以根據SEL的‘X’或者其他字段的狀態值,動態設置可編輯還是不可編輯狀態
單元格設置爲可編輯狀態設置:
LS_STYLEROW-FIELDNAME = '測試字段名稱' .
LS_STYLEROW-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. "set field to disabled
CLEAR GT_ALV-FIELD_STYLE.
APPEND LS_STYLEROW TO GT_ALV-FIELD_STYLE.
注:通過LOOP ALV要顯示的內表 可以根據SEL的‘X’或者其他字段的狀態值,動態設置可編輯還是不可編輯狀態
實例備忘代碼:
LOOP AT GT_ALV WHERE SQYY NE ''. "SQYY 申請原因 STAT 申請狀態
IF GT_ALV-STAT IS NOT INITIAL.
LS_STYLEROW-FIELDNAME = 'SQYY' .
LS_STYLEROW-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. "set field to disabled
CLEAR GT_ALV-FIELD_STYLE.
APPEND LS_STYLEROW TO GT_ALV-FIELD_STYLE.
MODIFY GT_ALV.
CLEAR LS_STYLEROW.
CLEAR GT_ALV.
ELSE.
LS_STYLEROW-FIELDNAME = 'SQYY' .
LS_STYLEROW-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. "set field to disabled
CLEAR GT_ALV-FIELD_STYLE.
APPEND LS_STYLEROW TO GT_ALV-FIELD_STYLE.
MODIFY GT_ALV.
CLEAR LS_STYLEROW.
CLEAR GT_ALV.
ENDIF.
2). 設置排序字段代碼示例
WA_SORT-SPOS = '01'.
WA_SORT-FIELDNAME = '測試字段名稱'.
WA_SORT-UP = 'X'. "升序排列 WA_SORT-DOWN = ‘X’降序排列
APPEND WA_SORT TO IT_SORT.
CLEAR WA_SORT.
四 ALV中 PAI事件塊的操作。
1).由於單元格可編輯狀態,故要讓後臺獲取前臺(顯示層)所操作的數據,需要調用一個函數。
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = ALV_GRID.
分析:調用這個函數的其實是獲取 調用標準FM ALV的屏幕號已經屏幕上的CONTROL(C)控件名稱,並將所有的屬性賦值給定義好的實例ALV_GRID,然後通過ALV_GRID 調用相關的方法。
CALL METHOD ALV_GRID->CHECK_CHANGED_DATA. 在裏面的最重要的一句代碼就是
CALL METHOD CL_GUI_CFW=>FLUSH.這句代碼是將前臺屏幕所輸入的信息 同步到後臺CFW 服務器,然後使用ABAP代碼獲取所需要的操作信息。 CFW : CONTROL FRAMEWORK 控件架構 在SAP 的前臺中有個SAP GUI SERVICES (AUTOMATION HANDLER) 應用層的是 (CONTROL FRAMEWORK SERVICES) 就是使用該語句進行同步刷新的 。
代碼示例如下:
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
RS_SELFIELD TYPE SLIS_SELFIELD.
RS_SELFIELD-REFRESH = 'X'. "防止雙擊刷新
CASE RF_UCOMM .
WHEN 'APPROVE'.“審批
DATA ALV_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA LT_ZHGXS_ZFSP TYPE TABLE OF ZHGXS_ZFSP.
DATA LS_ZHGXS_ZFSP TYPE ZHGXS_ZFSP.
DATA L_SIGN TYPE C.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = ALV_GRID.
CALL METHOD ALV_GRID->CHECK_CHANGED_DATA.
”僞代碼如下:
LOOP ALV輸出內表 WHRER SEL = 'X' 被選中的行
IF 測試定義字段 IS INITIAL.
ELSE.
結構賦值.
添加內表.
ENDIF.
使用更新內表更新數據庫。
IF 返回值 = 0.
COMMIT WORK .提交數據庫,數據將不能被回滾.(數據層執行UPDATE隊列。調用相關FM寫入數據庫。)
ELSE.
ROLLBACK WORK . 數據庫回滾,只要有一條數據出錯,所有的數據將不能被寫入數據庫
ENDLOOP
......
WHEN OTHERS.
ENDCASE.
ENDFORM.
2) 單行添加顏色。
已設置好的字段
TYPES: BEGIN OF TYP_SAMPLE.
.......
TYPES: ROWCOLOR TYPE CHAR30. "爲添加某行數據整體顏色預留
TYPES: END OF TYP_SAMPLE.
GD_LAYOUT-INFO_FNAME = 'ROWCOLOR'. “設置顏色名稱 (定義字段)
PAI 出口中
如果遇到特定的提示情況,將值 C100 C200 .... C600 等等值付給ROWCOLOR. ALV自動就會輸出顏色行。
五、雙擊單元格控制。
在ALV函數的PAI出口中。
雙擊 是OKCODE爲空時候 默認響應事件。
所以實例代碼如下:
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
RS_SELFIELD-REFRESH = 'X'. "防止雙擊刷新
CASE RF_UCOMM .
WHEN 'APPROVE'.
PERFORM SUB_APPROVE_DATA TABLES GT_ALV. "提交申
WHEN 'REFRESH'.
PERFORM SUB_GET_DATA.
PERFORM SUB_SET_ALV.
WHEN OTHERS.
"雙擊
IF RS_SELFIELD-SEL_TAB_FIELD EQ '1-VBELN'.
READ TABLE GT_ALV INTO GS_ALV INDEX RS_SELFIELD-TABINDEX.
SET PARAMETER ID 'AUN' FIELD GS_ALV-VBELN.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ELSEIF RS_SELFIELD-SEL_TAB_FIELD EQ '1-SQYY'.
READ TABLE GT_ALV INTO GS_ALV INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC EQ 0.
CALL SCREEN 9000 STARTING AT 60 6
ENDING AT 102 19 .
MODIFY GT_ALV FROM GS_ALV INDEX RS_SELFIELD-TABINDEX.
ENDIF.
ENDIF.
ENDCASE.
CLEAR SY-UCOMM.
ENDFORM.
其中 RS_SELFIELD-SEL_TAB_FIELD EQ '1-測試字段名稱'
解釋如下:1 就是數字1. - 連接符- 後面就是VBELN.
1可以理解爲 列的意思,雙擊哪一列的哪個格。
RS_SELFIELD-TABINDEX 是系統結構的內表INDEX.
六。自定義輸入 輸入編輯文本框。自己畫好屏幕(憑感覺畫)然後畫一個控件CONTROL 命名爲G_CONTAINER
9000屏幕流 9000屏幕屬性 :方式對話框
PROCESS BEFORE OUTPUT.
MODULE STATUS_9000.
*
PROCESS AFTER INPUT.
MODULE USER_COMMAND_9000.
屏幕代碼:
MODULE STATUS_9000 OUTPUT.
SET PF-STATUS 'S9000'.
CLEAR GT_SQYY[].
APPEND GS_ALV-SQYY TO GT_SQYY.
DATA L_SIGN TYPE C.
IF GS_ALV-STAT NE ''.
L_SIGN = 'X'.
ENDIF.
CALL FUNCTION 'RH_EDITOR_SET'
EXPORTING
REPID = SY-REPID
DYNNR = '9000'
CONTROLNAME = 'G_CONTAINER'
MAX_COLS = 43
SHOW_STATUS = 'X'
DISPLAY_MODE = L_SIGN
TABLES
LINES = GT_SQYY[]
EXCEPTIONS
CREATE_ERROR = 1
INTERNAL_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CLEAR L_SIGN.
ENDMODULE. " STATUS_9000 OUTPUT
MODULE USER_COMMAND_9000 INPUT.
DATA L_SQYY TYPE CHAR200.
CASE SY-UCOMM.
WHEN 'EXIT' OR 'BACK' OR 'CANCLE'.
LEAVE TO SCREEN 0.
WHEN 'SAVE'.
CLEAR GT_SQYY[].
CALL FUNCTION 'RH_EDITOR_GET'
EXPORTING
CONTROLNAME = 'G_CONTAINER'
TABLES
LINES = GT_SQYY[]
EXCEPTIONS
INTERNAL_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT GT_SQYY.
CONCATENATE L_SQYY GT_SQYY INTO L_SQYY .
CONDENSE L_SQYY NO-GAPS .
CLEAR GT_SQYY.
ENDLOOP.
GS_ALV-SQYY = L_SQYY.
CLEAR L_SQYY.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_9000 INPUT
這樣效果就是雙擊可編輯單元格就會出現一個可編輯文本框,定義一個對話框屬性的狀態欄 定義兩個按鈕 SAVE 和 BACK。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.