ABAP 中的搜索幫助


ABAP 中的搜索幫助

https://blog.csdn.net/u011576750/article/details/50999078

一.簡介:在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'.
  • 1
  • 2

這樣就自動實現了搜索幫助功能。 
(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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM