函數(shù)調(diào)用ALV方法.doc_第1頁(yè)
函數(shù)調(diào)用ALV方法.doc_第2頁(yè)
函數(shù)調(diào)用ALV方法.doc_第3頁(yè)
函數(shù)調(diào)用ALV方法.doc_第4頁(yè)
函數(shù)調(diào)用ALV方法.doc_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

小總結(jié)一下函數(shù)方法調(diào)用alv的過(guò)程。其實(shí)用函數(shù)調(diào)用alv非常簡(jiǎn)單,只需要一個(gè)REUSE_ALV_GRID_DISPLAY函數(shù)即可(或者 list的方式),但是如果要做的復(fù)雜的話(huà)也可以非常復(fù)雜,如我之前的加上異常,單選框,或者加上雙擊命令,加上各種事件。過(guò)于復(fù)雜的不講了,以一個(gè)平常 項(xiàng)目中夠用的例子講解,還有其他需求直接可以再pack:slis中找到,或者se38中直接輸入*demo*就可以看到一堆例子。下面是使用alv的一 些必備信息。1. 類(lèi)型池(Type-pools)如果使用函數(shù)調(diào)用ALV必須要用TYPE-POOLS: SLIS.這個(gè)類(lèi)行池里包含了alv所有要用到的類(lèi)型,當(dāng)有哪些字段名稱(chēng)忘記的時(shí)候可以到這個(gè)pool里查找相應(yīng)的字段。2. 字段信息(SLIS_T_FIELDCAT_ALV)如果我們自己寫(xiě)一個(gè)ALV的函數(shù)讓別人調(diào)用,有哪些參數(shù)必不可缺了?字段信息肯定必不可少,字段信息決定了ALV到底輸出哪些信息。通常有兩種方式一是手動(dòng),二是自動(dòng)。2.1 手動(dòng)生成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.這樣就完成了一個(gè)字段的定義,不過(guò)通常都會(huì)用一個(gè)宏來(lái)完成相應(yīng)的功能。如下:DEFINE init_key. clear &1 . &1-fieldname = &2 . &1-coltext = &4. &1-outputlen = &5. &1-no_zero = X . &1-key = X . 凍結(jié)窗口 append &1 to &3 . end-OF-DEFINITION.這樣定義多個(gè)字段就會(huì)比較方便。2.2 自動(dòng)生成自動(dòng)生成字段信息必須要調(diào)用這個(gè)函數(shù):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通常只需要兩個(gè)參數(shù),一是changing參數(shù),即輸出的字段信息。二是紅色標(biāo)記的部分,如果是一個(gè)內(nèi)表的話(huà)就用第一個(gè),有自建表或者系統(tǒng)表的話(huà)就用第二個(gè)。二者只能填一個(gè),注意使用內(nèi)表作為參數(shù)的話(huà),類(lèi)型定義只能用like而不能用type。如果還需要增加或刪除一些字段的話(huà)只需要修改這個(gè)內(nèi)表就可以了。下面是實(shí)例:*/增加選擇項(xiàng) 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. */刪除不必要顯示的項(xiàng) 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. 布局設(shè)置(SLIS_LAYOUT_ALV)布局設(shè)置參數(shù)之多絕對(duì)不是一般人能記住,只需要在使用的時(shí)候查查,平常使用的參數(shù)也比較少。估計(jì)colwidth_optimize這個(gè)用的多一些。下面一個(gè)簡(jiǎn)單的事例完成了設(shè)置布局。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這樣就完成了布局設(shè)置。4. 事件處理(SLIS_T_EVENT)ALV事件處理有點(diǎn)蹊蹺,SAP有一些默認(rèn)的函數(shù)名作為事件函數(shù),我們也可以修改這些函數(shù)名。不過(guò)為什么不把這些事件函數(shù)直接寫(xiě)到調(diào)用函數(shù)作為參數(shù)了,SAP還有一個(gè)類(lèi)型專(zhuān)門(mén)保存這個(gè)事件名稱(chēng),還有一些常量,暫時(shí)還不明白。在SLIS中這些常量都是事件的名稱(chēng),如下:* 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調(diào)用自己寫(xiě)的事件分為兩部,一是注冊(cè)這些事件,二是調(diào)用ALV函數(shù)的時(shí)候?qū)⒈4媸录膬?nèi)表作為參數(shù)寫(xiě)入調(diào)用ALV函數(shù)的參數(shù)。4.1.注冊(cè)事件下面的代碼注冊(cè)了一個(gè)TOP_OF_PAGE,和一個(gè)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.接著我們只需要寫(xiě)這兩個(gè)函數(shù)就好了,名字命名和上面注冊(cè)代碼部分一樣即可。4.2.處理事件處理事件根據(jù)上面的例子有兩個(gè)事件,這兩個(gè)事件需要兩個(gè)相應(yīng)的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上面的函數(shù)完成了在alv中顯示頁(yè)頭,效果如下:抬頭字體可以設(shè)置類(lèi)型,有H,S,A其效果各有不同。方便設(shè)計(jì)出內(nèi)容豐富的抬頭。用戶(hù)命令事件,用的非常多,尤其以用戶(hù)雙擊事件居多。下面的代碼是雙擊事件的例子。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代表用戶(hù)雙擊,很奇怪的一個(gè)字符串。雙擊事件我們可以再做一個(gè)報(bào)表的明細(xì)數(shù)據(jù)用ALV顯示。上面的例子就是這樣的,當(dāng)然也可以做成用戶(hù)需要的任何形式。5. 調(diào)用函數(shù)一切完成之后就是最后一步調(diào)用function,把剛才的參數(shù)全部寫(xiě)進(jìn)一個(gè)函數(shù)的參數(shù)中。代碼如下:FORM DISPLAY_ALV_

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論