




已閱讀5頁,還剩2頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
小總結一下函數方法調用alv的過程。其實用函數調用alv非常簡單,只需要一個REUSE_ALV_GRID_DISPLAY函數即可(或者 list的方式),但是如果要做的復雜的話也可以非常復雜,如我之前的加上異常,單選框,或者加上雙擊命令,加上各種事件。過于復雜的不講了,以一個平常 項目中夠用的例子講解,還有其他需求直接可以再pack:slis中找到,或者se38中直接輸入*demo*就可以看到一堆例子。下面是使用alv的一 些必備信息。1. 類型池(Type-pools)如果使用函數調用ALV必須要用TYPE-POOLS: SLIS.這個類行池里包含了alv所有要用到的類型,當有哪些字段名稱忘記的時候可以到這個pool里查找相應的字段。2. 字段信息(SLIS_T_FIELDCAT_ALV)如果我們自己寫一個ALV的函數讓別人調用,有哪些參數必不可缺了?字段信息肯定必不可少,字段信息決定了ALV到底輸出哪些信息。通常有兩種方式一是手動,二是自動。2.1 手動生成lt_fieldcat TYPE slis_t_fieldcat_alv. “定義字段表WA_FIELDCAT-TABNAME = IT_EKKO. WA_FIELDCAT-FIELDNAME = EBELN. WA_FIELDCAT-SELTEXT_M = PO NO. APPEND WA_FIELDCAT TO I_FIELDCAT. CLEAR WA_FIELDCAT.這樣就完成了一個字段的定義,不過通常都會用一個宏來完成相應的功能。如下:DEFINE init_key. clear &1 . &1-fieldname = &2 . &1-coltext = &4. &1-outputlen = &5. &1-no_zero = X . &1-key = X . 凍結窗口 append &1 to &3 . end-OF-DEFINITION.這樣定義多個字段就會比較方便。2.2 自動生成自動生成字段信息必須要調用這個函數:CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGE * EXPORTING * I_PROGRAM_NAME = * I_INTERNAL_TABNAME = * I_STRUCTURE_NAME = * I_CLIENT_NEVER_DISPLAY = X * I_INCLNAME = * I_BYPASSING_BUFFER = * I_BUFFER_ACTIVE = CHANGING ct_fieldcat = * EXCEPTIONS * INCONSISTENT_INTERFACE = 1 * PROGRAM_ERROR = 2 * OTHERS = 3通常只需要兩個參數,一是changing參數,即輸出的字段信息。二是紅色標記的部分,如果是一個內表的話就用第一個,有自建表或者系統表的話就用第二個。二者只能填一個,注意使用內表作為參數的話,類型定義只能用like而不能用type。如果還需要增加或刪除一些字段的話只需要修改這個內表就可以了。下面是實例:*/增加選擇項 MOVE SELECTED TO ls_fieldcat-fieldname. MOVE X TO ls_fieldcat-edit. MOVE X TO ls_fieldcat-checkbox. INSERT ls_fieldcat INTO ct_fieldcat INDEX 1. */刪除不必要顯示的項 DELETE ct_fieldcat WHERE fieldname EQ INFO_TYPE_CODE OR fieldname EQ INFO_NUMBER OR fieldname EQ STATUS OR fieldname EQ GOODS_LIST_FLAG OR fieldname EQ COMPANY OR fieldname EQ COMPANY_NAME OR fieldname EQ SALES_ORG OR fieldname EQ SALES_ORG_DESC OR fieldname EQ MESSAGE. */隱藏一些字段 LOOP AT ct_fieldcat INTO ls_fieldcat WHERE fieldname EQ NOTICE_NUMBER OR fieldname EQ REVERSE_CODE OR fieldname EQ REVERSE_NUMBER. MOVE X TO ls_fieldcat-no_out. MODIFY ct_fieldcat FROM ls_fieldcat INDEX sy-tabix. ENDLOOP.3. 布局設置(SLIS_LAYOUT_ALV)布局設置參數之多絕對不是一般人能記住,只需要在使用的時候查查,平常使用的參數也比較少。估計colwidth_optimize這個用的多一些。下面一個簡單的事例完成了設置布局。DATA: ls_layout TYPE slis_layout_alv,PERFORM frm_build_layout CHANGING ls_layout.FORM frm_build_layout CHANGING cs_layout TYPE slis_layout_alv. CLEAR cs_layout.MOVE X TO cs_layout-detail_popup. MOVE X TO cs_layout-colwidth_optimize. ENDFORM. FRM_BUILD_LAYOUT這樣就完成了布局設置。4. 事件處理(SLIS_T_EVENT)ALV事件處理有點蹊蹺,SAP有一些默認的函數名作為事件函數,我們也可以修改這些函數名。不過為什么不把這些事件函數直接寫到調用函數作為參數了,SAP還有一個類型專門保存這個事件名稱,還有一些常量,暫時還不明白。在SLIS中這些常量都是事件的名稱,如下:* Events slis_ev_item_data_expand type slis_formname value ITEM_DATA_EXPAND, slis_ev_reprep_sel_modify type slis_formname value REPREP_SEL_MODIFY, slis_ev_caller_exit_at_start type slis_formname value CALLER_EXIT, slis_ev_user_command type slis_formname value USER_COMMAND, slis_ev_top_of_page type slis_formname value TOP_OF_PAGE, slis_ev_data_changed type slis_formname value DATA_CHANGED, slis_ev_top_of_coverpage type slis_formname value TOP_OF_COVERPAGE, slis_ev_end_of_coverpage type slis_formname value END_OF_COVERPAGE, slis_ev_foreign_top_of_page type slis_formname value FOREIGN_TOP_OF_PAGE, slis_ev_foreign_end_of_page type slis_formname value FOREIGN_END_OF_PAGE, slis_ev_pf_status_set type slis_formname value PF_STATUS_SET, slis_ev_list_modify type slis_formname value LIST_MODIFY, slis_ev_top_of_list type slis_formname value TOP_OF_LIST, slis_ev_end_of_page type slis_formname value END_OF_PAGE, slis_ev_end_of_list type slis_formname value END_OF_LIST, slis_ev_after_line_output type slis_formname value AFTER_LINE_OUTPUT, slis_ev_before_line_output type slis_formname value BEFORE_LINE_OUTPUT, slis_ev_subtotal_text type slis_formname value SUBTOTAL_TEXT, slis_ev_grouplevel_change type slis_formname value GROUPLEVEL_CHANGE, slis_ev_context_menu type slis_formname value CONTEXT_MENU.要讓SAP調用自己寫的事件分為兩部,一是注冊這些事件,二是調用ALV函數的時候將保存事件的內表作為參數寫入調用ALV函數的參數。4.1.注冊事件下面的代碼注冊了一個TOP_OF_PAGE,和一個GT_EVENTS TYPE SLIS_T_EVENT,PERFORM EVENTTAB_BUILD USING GT_EVENTS.FORM EVENTTAB_BUILD USING RT_EVENTS TYPE SLIS_T_EVENT. *Registration of events to happen during list display DATA: LS_EVENT TYPE SLIS_ALV_EVENT. * CALL FUNCTION REUSE_ALV_EVENTS_GET EXPORTING I_LIST_TYPE = 0 IMPORTING ET_EVENTS = RT_EVENTS. READ TABLE RT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE INTO LS_EVENT. IF SY-SUBRC = 0. MOVE TOP_OF_PAGE TO LS_EVENT-FORM. APPEND LS_EVENT TO RT_EVENTS. ENDIF.READ TABLE V_EVENTS INTO WA_EVENT WITH KEY NAME = USER_COMMAND. IF SY-SUBRC EQ 0. WA_EVENT-FORM = USER_COMMAND. MODIFY V_EVENTS FROM WA_EVENT TRANSPORTING FORM WHERE NAME = WA_EVENT-NAME. ENDFORM.接著我們只需要寫這兩個函數就好了,名字命名和上面注冊代碼部分一樣即可。4.2.處理事件處理事件根據上面的例子有兩個事件,這兩個事件需要兩個相應的form,名字就是TOP_OF_PAGE和USER_COMMAND。FORM TOP_OF_PAGE. CALL FUNCTION REUSE_ALV_COMMENTARY_WRITE EXPORTING IT_LIST_COMMENTARY = IT_LISTHEADER * i_logo = * I_END_OF_LIST_GRID = . ENDFORM. TOP_OF_PAGEFORM BUILD_LISTHEADER USING I_LISTHEADER TYPE SLIS_T_LISTHEADER. DATA HLINE TYPE SLIS_LISTHEADER. HLINE-INFO = 黃立 header. HLINE-TYP = H. APPEND HLINE TO I_LISTHEADER. ENDFORM. build_listheader上面的函數完成了在alv中顯示頁頭,效果如下:抬頭字體可以設置類型,有H,S,A其效果各有不同。方便設計出內容豐富的抬頭。用戶命令事件,用的非常多,尤其以用戶雙擊事件居多。下面的代碼是雙擊事件的例子。FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD. CASE R_UCOMM. WHEN &IC1. READ TABLE IT_EKKO INTO WA_EKKO INDEX RS_SELFIELD-TABINDEX. PERFORM BUILD_FIELDCATLOG_EKPO. PERFORM EVENT_CALL_EKPO. PERFORM POPULATE_EVENT_EKPO. PERFORM DATA_RETRIEVAL_EKPO. PERFORM BUILD_LISTHEADER_EKPO USING IT_LISTHEADER. PERFORM DISPLAY_ALV_EKPO. ENDCASE. ENDFORM. user_command其中&IC1代表用戶雙擊,很奇怪的一個字符串。雙擊事件我們可以再做一個報表的明細數據用ALV顯示。上面的例子就是這樣的,當然也可以做成用戶需要的任何形式。5. 調用函數一切完成之后就是最后一步調用function,把剛才的參數全部寫進一個函數的參數中。代碼如下:FORM DISPLAY_ALV_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論