一.簡單介紹:在abap中。用到的搜索幫助個人遇到的情況例如以下,進行簡要總結進行記錄:
1.選中屏幕中的搜索幫助
(1).選擇屏幕中的搜索幫助個人理解是指選擇屏幕中的字段能夠提供用戶選擇功能。
有些字段,比如公司。日期等能夠自己主動帶出搜索幫助,這些都是基於數據元素或者數據域等的搜索幫助。如圖:
(2).有些字段我們就須要自己實現搜索幫助了,經常使用的如:在我們上傳excel等數據的時候得到文件路徑的選擇幫助,主要使用的代碼例如以下:
"選擇屏幕字段 PARAMETERS : P_FILE LIKE RLGRAP-FILENAME MODIF ID M1. "文件文件夾
*&--------------------------------------------------------*
*& 觸發選擇屏幕中自己定義事件
*&--------------------------------------------------------*
AT SELECTION-SCREEN.
*&---文件路徑搜索幫助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = '' " 輸入的路勁 IMPORTING FILE_NAME = P_FILE. " 輸出路徑
(3).非上傳路徑字段的選擇幫助。主要用到的代碼片段例如以下:
"屏幕事件中
*&--------------------------------------------------------*
*& 實現搜索幫助
*&--------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_SAKNR.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING RETFIELD = 'SAKNR' "搜索幫助內表要輸出的幫助字段名 DYNPPROG = SY-REPID DYNPNR = SY-DYNNR DYNPROFIELD = 'P_SAKNR' VALUE_ORG = 'S' TABLES VALUE_TAB = IT_SKAT. "存儲搜索幫助內容的內表 IF SY-SUBRC <> 0. MESSAGE '沒有相關搜索幫助' TYPE 'I'. ENDIF.
2.ALV中的選擇幫助(樣例使用OOALV)
(1).假設ALV中的須要搜索幫助的字段所在的表有提供搜索幫助,比如:MKAL-MATNR,當中的搜索幫助是參考MARA表的MATNR,並且還帶有自己主動檢查編碼是否合法的功能,那么我們就能夠在設置fieldecat的時候針對字段設置:
WA_FIELDCAT-REF_FIELD = 'MKAL'.
WA_FIELDCAT-REF_TABLE = 'MATNR'.
這樣就自己主動實現了搜索幫助功能。
(2).假設標准的搜索幫助滿足不了需求,並且有自己的自建表用到了這個字段,那么我們能夠自己創建一個搜索幫助提供給自己定義的數據元素,過程例如以下:
1).SE11-創建搜索幫助。如圖:
點擊創建之后,簡單的我們就創建‘基本索引搜索幫助’。‘集合搜索幫助’是用多個基本或者集合搜索幫助創建的。這里不做介紹:
接下來,在例如以下圖中輸入:描寫敘述(自己定義),選擇方法(字段參考的表名假設有文本表會自己主動帶出。就能夠在選擇幫助中使用描寫敘述等),對話類型、快捷鍵依據自己的須要選擇,搜索幫助出口是自己創建的一個function。實現搜索幫助的增強(必須參考F4IF_SHLP_EXIT_EXAMPLEH函數接口。能夠復制出來然后改動)。最后填入你要在搜索幫助中出現的字段(參數輸入輸出,輸出坐標等)
輸入好以上內容后,保存激活,就能夠在自建表中使用此搜索幫助了,例如以下圖:在相應的數據元素上加入搜索幫助:
然后在須要實現搜索幫助的alv字段的fieldcat中依舊要加入例如以下代碼:
WA_FIELDCAT-REF_FIELD = '自建表名'.
WA_FIELDCAT-REF_TABLE = '參考字段'.
(3).有的時候,SE11創建的搜索幫助也不能全然適用全部情況,比方上面的樣例中CRHD表並沒有相應的文本表,所以帶不出工作中心的描寫敘述。假設業務要求搜索幫助的時候一定要有描寫敘述出來,那么我們能夠使用以下的方法實現:為alv創建搜索幫助事件,然后注冊事件。最后實現事件,過程例如以下:
"1.定義搜索幫助展示的內表
TYPES : BEGIN OF T_CRHD, WERKS LIKE CRHD-WERKS, VERWE LIKE CRHD-VERWE, ARBPL LIKE CRHD-ARBPL, KTEXT LIKE CRTX-KTEXT, END OF T_CRHD. DATA : IT_CRHD TYPE TABLE OF T_CRHD, WA_CRHD LIKE LINE OF IT_CRHD. "2.獲得數據用於搜索幫助 "得到工作中心搜索幫助所需內表 SELECT A~WERKS A~VERWE A~ARBPL B~KTEXT INTO CORRESPONDING FIELDS OF TABLE IT_CRHD FROM CRHD AS A JOIN CRTX AS B ON B~OBJTY = A~OBJTY AND B~OBJID = A~OBJID WHERE A~ARBPL LIKE 'ZRP%' AND B~SPRAS = SY-LANGU. "3.定義響應事件 *&--------------------------------------------------------* *& CLASS LCL_EVENT_HANDLER DEFINITION *&--------------------------------------------------------* * TEXT alv事件定義 *---------------------------------------------------------* CLASS LCL_EVENT_HANDLER DEFINITION. PUBLIC SECTION. METHODS: *--工作中心搜索幫助 HANDLE_ON_F4_HELP_9000 FOR EVENT ONF4 OF CL_GUI_ALV_GRID IMPORTING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA. ENDCLASS. *&--------------------------------------------------------* *& CLASS LCL_EVENT_HANDLER IMPLEMENTATION *&--------------------------------------------------------* * TEXT ALV事件實現 *---------------------------------------------------------* CLASS LCL_EVENT_HANDLER IMPLEMENTATION. *--工作中心搜索幫助 METHOD HANDLE_ON_F4_HELP_9000. PERFORM HANDLE_ON_F4_HELP_9000 USING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA . ENDMETHOD. ENDCLASS. "4.實現詳細form *&--------------------------------------------------------* *& Form HANDLE_ON_F4_HELP *&--------------------------------------------------------* * text 工作中心搜索幫助 *---------------------------------------------------------* FORM HANDLE_ON_F4_HELP_9000 USING E_FIELDNAME ES_ROW_NO TYPE LVC_S_ROID ER_EVENT_DATA. DATA : E_INDEX TYPE I, E_MDV01 LIKE ZTPP_CONF_ITEM07-MDV01, LT_RET_TAB TYPE TABLE OF DDSHRETVAL WITH HEADER LINE. IF E_FIELDNAME = 'MDV01'. "我們自己定義搜索的字段名 E_INDEX = ES_ROW_NO-ROW_ID. READ TABLE IT_SHOW INTO WA_SHOW INDEX E_INDEX. CHECK SY-SUBRC = 0. "調用function CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING RETFIELD = 'ARBPL' "返回字段 VALUE_ORG = 'S' TABLES VALUE_TAB = IT_CRHD RETURN_TAB = LT_RET_TAB EXCEPTIONS PARAMETER_ERROR = 1 NO_VALUES_FOUND = 2 OTHERS = 3. IF SY-SUBRC = 0. "更新內表 READ TABLE LT_RET_TAB INDEX 1. IF LT_RET_TAB-FIELDVAL <> ''. "添加前導零 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = LT_RET_TAB-FIELDVAL IMPORTING OUTPUT = E_MDV01 . WA_SHOW-MDV01 = E_MDV01. ENDIF. MODIFY IT_SHOW FROM WA_SHOW INDEX E_INDEX. ENDIF. "刷新ALV PERFORM REFRESH_TABLE_DISPLAY USING PP_ALV_GRID. ENDIF. ENDFORM. " HANDLE_ON_F4_HELP "5.設置fieldcat WA_FIELDCAT-F4AVAILABL = 'X'. "6.注冊事件 "工作中心F4幫助 DATA: LT_F4 TYPE LVC_T_F4 WITH HEADER LINE. CLEAR LT_F4. LT_F4-FIELDNAME = 'MDV01'. LT_F4-REGISTER = 'X'. LT_F4-CHNGEAFTER = 'X'. * LT_F4-GETBEFORE = 'X'. * LT_F4-INTERNAL = 'X'. APPEND LT_F4. CALL METHOD PP_ALV_GRID->REGISTER_F4_FOR_FIELDS EXPORTING IT_F4 = LT_F4[]. SET HANDLER GR_EVENT_HANDLER->HANDLE_ON_F4_HELP_9000 FOR PP_ALV_GRID.