SAP-ABAP学习实例讲解part3_第1页
SAP-ABAP学习实例讲解part3_第2页
SAP-ABAP学习实例讲解part3_第3页
SAP-ABAP学习实例讲解part3_第4页
SAP-ABAP学习实例讲解part3_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八章 ALV控件的使用 ALV(SAAP Lisst Vieewer)控控件是SAPP业务中最常常用的控件之之一,本章先先用一个简单单的例子介绍绍用ALV控件显显示数据,再再以实例方式式介绍ALVV的强大功能能,示例程序序可以直接使使用。本章主要内容有有:()简单的ALLV控件实例例;()自定义输出出字段的ALLV控件实例例;()在屏幕上建建立ALV控件;()自定义ALLV控件的工工具条按钮;()处理ALVV控件双击事事件;()通过ALVV控件编辑内内表和数据库库更新;()ALV TTree的使使用。8.1 简单的的ALV控件实实例以航班表(SPPFLI)为为例,使用数数据字典定义义结构,通

2、过过ALV控件显显示数据。【例8.1】REPORT YTESST26. *定义内表DATA WAA_SPFLLI LIKKE TABBLE OFF SPFLLI WITTH HEAADER LLINE. *内表赋值SELECT * INTTO TABBLE WAA_SPFLLI FROOM SPFFLI. *通过数据字典典结构显示AALV CALL FUUNCTIOON REEUSE_AALV_LIIST_DIISPLAYY EXPORRTING I_SSTRUCTTURE_NNAME = SPFFLI TABLEES T_OOUTTABB = WA_SSPFLI EXCEPPTIONSS P

3、ROOGRAM_ERRORR = 1 OTHHERS = 2. IF SY-SSUBRC 0. * MESSAAGE IDD SY-MMSGID TYPE SY-MSSGTY NNUMBERR SY-MMSGNO * WIITH SYY-MSGVV1 SY-MSGV22 SY-MMSGV3 SY-MSSGV4. ENDIF. 输出结果如图88-1所示。图8-1 8.2 自定义义输出字段的的ALV控件实实例【例8.2】REPORT YTESST27. *ALV使用到到的类库TYPE-POOOLS: SLIS. *一列描述DATA WAA_ALV_FIELDD TYPEE SLISS_FIELLD

4、CAT_ALV. *列描述内表,列列清单DATA WAA_ALV_FIELDDCAT TTYPE SSLIS_TT_FIELLDCAT_ALV. *定义内表DATA WAA_SPFLLI LIKKE TABBLE OFF SPFLLI WITTH HEAADER LLINE. *内表赋值SELECT * INTTO TABBLE WAA_SPFLLI FROOM SPFFLI. *定义第一到第第四个字段WA_ALV_FIELDD-COL_POS = 1. WA_ALV_FIELDD-FIELLDNAMEE = CCARRIDD. WA_ALV_FIELDD-SELTTEXT_MM = 航航线承

5、运人. APPEND WA_ALLV_FIEELD TOO WA_AALV_FIIELDCAAT. WA_ALV_FIELDD-COL_POS = 2. WA_ALV_FIELDD-FIELLDNAMEE = CCONNIDD. WA_ALV_FIELDD-SELTTEXT_MM = 航航班连接. APPEND WA_ALLV_FIEELD TOO WA_AALV_FIIELDCAAT. WA_ALV_FIELDD-COL_POS = 3. WA_ALV_FIELDD-FIELLDNAMEE = CCITYFRROM. WA_ALV_FIELDD-SELTTEXT_MM = 起起飞城市. AP

6、PEND WA_ALLV_FIEELD TOO WA_AALV_FIIELDCAAT. WA_ALV_FIELDD-COL_POS = 4. WA_ALV_FIELDD-FIELLDNAMEE = CCITYTOO. WA_ALV_FIELDD-SELTTEXT_MM = 目目标城市. APPEND WA_ALLV_FIEELD TOO WA_AALV_FIIELDCAAT. *调用ALV显显示表单数据据CALL FUUNCTIOON REEUSE_AALV_LIIST_DIISPLAYY EXPORTTING * I_IINTERFFACE_CCHECK = * I_BBYPASSSING_

7、BBUFFERR = * I_BBUFFERR_ACTIIVE = * I_CCALLBAACK_PRROGRAMM = * I_CCALLBAACK_PFF_STATTUS_SEET = * I_CCALLBAACK_USSER_COOMMANDD = * I_SSTRUCTTURE_NNAME = * IS_LAYOUUT = IT_FFIELDCCAT = WA_ALLV_FIEELDCATT * IT_EXCLUUDING = * IT_SPECIIAL_GRROUPS = * IT_SORT = * IT_FILTEER = * IS_SEL_HHIDE = * I_DDEFAULL

8、T = X * I_SSAVE = * IS_VARIAANT = * IT_EVENTTS = * IT_EVENTT_EXITT = * IS_PRINTT = * IS_REPREEP_ID = * I_SSCREENN_STARRT_COLLUMN = 0 * I_SSCREENN_STARRT_LINNE = 0 * I_SSCREENN_END_COLUMMN = 0 * I_SSCREENN_END_LINE = 0 * IMPORRTING * E_EEXIT_CCAUSEDD_BY_CCALLERR = * ES_EXIT_CAUSEED_BY_USER = TABLEES

9、T_OOUTTABB = WA_SPPFLI * EXCEPPTIONSS * PROOGRAM_ERRORR = 1 * OTHHERS = 2 . IF SY-SSUBRC 0. * MESSAAGE IDD SY-MMSGID TYPE SY-MSSGTY NNUMBERR SY-MMSGNO * WIITH SYY-MSGVV1 SY-MSGV22 SY-MMSGV3 SY-MSSGV4. ENDIF. 输出结果如图88-2所示。图8-2 8.3 在屏幕幕上建立ALLV控件8.3.1 定定义SCREEEN窗口如图8-3所示示,在屏幕上上创建两个文文本元素控件件、一个退出出按钮控件、一个

10、定制控控制控件。图8-3 8.3.2 定定义逻辑流逻辑流程序:*逻辑流*PBO显示屏屏幕前的处理理PROCESSS BEFOORE OUUTPUT. MODULLE STAATUS_00100. *PAI用户输输入后的处理理PROCESSS AFTEER INPPUT. MODULLE USEER_COMMMAND_0100. 主程序:REPORT YTESST28. *功能码返回值值DATA: OOK_CODDE TYPPE SY-UCOMMM, SSAVE_OOK TYPPE SY-UCOMMM. *定义内表,变变量需要传递递,不加HEEADER LINE DATA WAA_SPFLLI

11、TYPPE TABBLE OFF SPFLLI . *内表赋值SELECT * INTTO TABBLE WAA_SPFLLI FROOM SPFFLI. * ALVDAATA 是屏屏幕100中定义义控制控件的的名称DATA: WWA_CONNTAINEER TYPPE SCRRFNAMEE VALUUE ALLVDATAA, AALV_GRRID TYYPE REEF TO CL_GUUI_ALVV_GRIDD, WWA_CUSSTOM_CCONTAIINER TTYPE RREF TOO CL_GGUI_CUUSTOM_CONTAAINER. *直接调用窗口口CALL SCCREEN 10

12、0. *&-* *& Moduule SSTATUSS_01000 OUTTPUT *&-* * textt *-* MODULE STATUUS_01000 OUTTPUT. SET PPF-STAATUS STATUUS1. *如果窗口还没没有创建ALLV对象则创创建它 IF WAA_CUSTTOM_COONTAINNER ISS INITTIAL. CREEATE OOBJECTT WA_CCUSTOMM_CONTTAINERR EEXPORTTING CONTTAINERR_NAMEE = WAA_CONTTAINERR. CREEATE OOBJECTT ALV_GRID EEXPO

13、RTTING I_PAARENT = WA_CUSTOOM_CONNTAINEER. CALLL METTHOD AALV_GRRID-SSET_TAABLE_FFOR_FIIRST_DDISPLAAY EEXPORTTING I_STTRUCTUURE_NAAME = SPFLLI CCHANGIING IT_OOUTTABB = WA_SPPFLI. ENDIFF. ENDMODUULE. STAATUS_00100 OUTPUUT *&-* *& Moduule UUSER_CCOMMANND_01000 INNPUT *&-* * textt *-* MODULE USER_COMMA

14、AND_01100 INNPUT. SAVE_OK = OK_COODE. CLEARR OK_CCODE. CASE SAVE_OK. WHEEN EXXIT. LLEAVE PROGRRAM. ENDCAASE. ENDMODUULE. USEER_COMMMAND_0100 INPUUT 输出结果如图88-4所示。图8-4 8.4 自定义义ALV控件的的工具条按钮钮在ALV的工具具条上增加一一个自定义的的按钮,单击击它弹出窗口口提示选择行行数据内容。执行结果如如图8-5所示。图8-5 单击自定义按钮钮后输出如图图8-6所示。图8-6 程序处理流程的的说明:定义ALV控件件相关事件、接口和

15、实现现方法等,主主要定义以下下事件。(1)ALV控控件的工具条条处理事件,定定义了新按钮钮和功能码;(2)ALV控控件的功能码码处理事件,定定义用户单击击按钮产生的的功能码事件件。主程序:REPORT YTESST29. INCLUDEE . CLASS LLCL_EVVENT_RRECEIVVER DEEFINITTION DDEFERRRED. DATA: OOK_CODDE TYPPE SY-UCOMMM, SSAVE_OOK TYPPE SY-UCOMMM. DATA EVVENT_RRECEIVVER TYYPE REEF TO LCL_EEVENT_RECEIIVER. DATA:

16、 WWA_SPFFLI TYYPE TAABLE OOF SPFFLI, AA_SPFLLI LIKKE SPFFLI. SELECT * INTTO TABBLE WAA_SPFLLI FROOM SPFFLI. DATA: WWA_CONNTAINEER TYPPE SCRRFNAMEE VALUUE ALLVDATAA, AALV_GRRID TYYPE REEF TO CL_GUUI_ALVV_GRIDD, WWA_CUSSTOM_CCONTAIINER TTYPE RREF TOO CL_GGUI_CUUSTOM_CONTAAINER. CALL SCCREEN 100. *-* *

17、 CLASSS lcll_evennt_recceiverr DEFIINITIOON *-* * *-* CLASS LLCL_EVVENT_RRECEIVVER DEEFINITTION. PUBLIIC SECCTION. METTHODS: HHANDLEE_TOOLLBAR FOR EVENTT TOOLLBAR OOF CL_GUI_AALV_GRRID IMPPORTINNG E_OOBJECTT E_INNTERACCTIVE, HHANDLEE_USERR_COMMMAND FOR EVENTT USERR_COMMMAND OOF CL_GUI_AALV_GRRID IMM

18、PORTIING E_UCOMMM. ENDCLASSS. lccl_eveent_reeceiveer DEFFINITIION *-* * CLASSS lcll_evennt_recceiverr IMPLLEMENTTATIONN *-* * *-* CLASS LLCL_EVVENT_RRECEIVVER IMMPLEMEENTATIION. METHOOD HANNDLE_TTOOLBAAR. DATTA: LSS_TOOLLBAR TTYPE SSTB_BUUTTON. CLEEAR LSS_TOOLLBAR-BBUTN_TTYPE. APPPEND LLS_TOOOLBAR T

19、O E_OBJECCT-MTT_TOOLLBAR. CLEEAR LSS_TOOLLBAR. MOVVE SHHOW_DEETA TTO LS_TOOLBBAR-FUUNCTIOON. MOVVE ICOON_PPEE_VNODDE TO LS_TOOOLBARR-ICONN. MOVVE 航班班明细显示 TO LLS_TOOOLBAR-QUICKKINFO. MOVVE 航班班明细显示(112) TO LLS_TOOOLBAR-TEXT. MOVVE TO LSS_TOOLLBAR-DDISABLLED. APPPEND LLS_TOOOLBAR TO E_OBJECCT-MTT_TOOLL

20、BAR. ENDMEETHOD. handdle_tooolbarr METHOOD HANNDLE_UUSER_CCOMMANND. DATTA: LTT_ROWSS TYPEE LVC_T_ROWW. CASSE E_UUCOMM. WWHEN SHOW_DETA. CALLL METHHOD ALLV_GRIID-GEET_SELLECTEDD_ROWSS IMMPORTIING ET_INNDEX_RROWS = LT_RROWS. CALLL METHHOD CLL_GUI_CFW=FLUSHH. IF SSY-SUBBRC = 0. MEESSAGEE S0055(YMESSS)

21、WIITH 已已选择行!. PEERFORMM MESSSDETA TABLEES LT_ROWS. ENDIIF. ENDDCASE. ENDMEETHOD. HANDDLE_USSER_COOMMANDD ENDCLASSS. LCCL_EVEENT_REECEIVEER IMPPLEMENNTATIOON *&-* *& Moduule SSTATUSS_01000 OUTTPUT *&-* * textt *-* MODULE STATUUS_01000 OUTTPUT. SET PPF-STAATUS STATUUS1. IF WAA_CUSTTOM_COONTAINNER ISS

22、INITTIAL. CREEATE OOBJECTT WA_CCUSTOMM_CONTTAINERR EEXPORTTING CCONTAIINER_NNAME = WA_CCONTAIINER. CREEATE OOBJECTT ALV_GRID EXPOORTINGG I_PAARENT = WA_CUSTOOM_CONNTAINEER. CALLL METTHOD AALV_GRRID-SSET_TAABLE_FFOR_FIIRST_DDISPLAAY EEXPORTTING I_STTRUCTUURE_NAAME = SPFLLI CCHANGIING IT_OOUTTABB = WA

23、_SPPFLI. CREEATE OOBJECTT EVENNT_RECCEIVERR. SETT HANDDLER EEVENT_RECEIIVER-HANDLLE_USEER_COMMMAND FOR AALV_GRRID. SETT HANDDLER EEVENT_RECEIIVER-HANDLLE_TOOOLBAR FOR AALV_GRRID. CALLL METTHOD AALV_GRRID-SSET_TOOOLBARR_INTEERACTIIVE. ENDIFF. ENDMODUULE. STAATUS_00100 OUTPUUT *&-* *& Moduule UUSER_CC

24、OMMANND_01000 INNPUT *&-* * textt *-* MODULE USER_COMMAAND_01100 INNPUT. SAVE_OK = OK_COODE. CLEARR OK_CCODE. CASE SAVE_OK. WHEEN EXXIT. LLEAVE PROGRRAM. ENDCAASE. ENDMODUULE. USEER_COMMMAND_0100 INPUUT *&-* *& Formm MESSSDETAA *&-* * textt *-* * -P_LT_ROOWS ttext *-* FORM MEESSDETTA TAABLES P_EET_I

25、NDDEX_ROOWS STTRUCTUURE LVVC_S_RROW. Inseert coorrectt namee for . DATA: LS_SSELECTTED_LIINE LIIKE LVVC_S_RROW, LF_RROW_INNDEX TTYPE LLVC_INNDEX. DATA: S1(2200) TTYPE CC, S2(33) TYPPE C. S2 = -. LOOP AT P_ET_INNDEX_RROWS IINTO LLS_SELLECTEDD_LINEE. LF_ROW_IINDEX = LS_SELECCTED_LLINE-IINDEX. REAAD TA

26、BBLE WAA_SPFLLI INDDEX LFF_ROW_INDEXX INTOO A_SPPFLI. S1 = 选择择行内容. CONNCATENNATE SS1 A_SSPFLI-CONNIID A_SSPFLI-CARRIID A_SSPFLI-CITYFFROM IINTO SS1 SEPPARATEED BY S2. MESSSAGE I005(YMESSS) WITTH S1. ENDLOOOP. ENDFORMM. MEESSDETTA 8.5 处理AALV双击事事件【例8.3】主程序:REPORT YTESST30. *功能码返回值值DATA: OOK_CODDE TYPP

27、E SY-UCOMMM, SSAVE_OOK TYPPE SY-UCOMMM. *定义内表,变变量需要传递递,不加HEEADER LINE DATA WAA_SPFLLI TYPPE TABBLE OFF SPFLLI. *内表赋值SELECT * INTTO TABBLE WAA_SPFLLI FROOM SPFFLI. *定义窗口定制制控制,定义ALV对象DATA: WWA_CONNTAINEER TYPPE SCRRFNAMEE VALUUE ALLVDATAA, AALV_GRRID TYPPE REFF TO CCL_GUII_ALV_GRID, WWA_CUSSTOM_CCONTA

28、IINER TTYPE RREF TOO CL_GGUI_CUUSTOM_CONTAAINER. *定义事件类型型CLASS LLCL_EVVENT_RRECEIVVER DEEFINITTION DDEFERRRED. *定义事件DATA EVVENT_RRECEIVVER TYYPE REEF TO LCL_EEVENT_RECEIIVER. *直接调用窗口口CALL SCCREEN 100. *-* * CLASSS lcll_evennt_recceiverr DEFIINITIOON *-* * 定义事件的的属性和方法法*-* CLASS LLCL_EVVENT_RRECEIVVER

29、 DEEFINITTION. PUBLIIC SECCTION. METTHODS: HANNDLE_DDOUBLEE_CLICCK FFOR EVVENT DDOUBLEE_CLICCK OF CL_GUUI_ALVV_GRIDD IMPOORTINGG E_ROOW E_CCOLUMNN. ENDCLASSS. lccl_eveent_reeceiveer DEFFINITIION *-* * CLASSS lcll_evennt_recceiverr IMPPLENTAATION *-* * 双击方法实实现*-* CLASS LLCL_EVVENT_RRECEIVVER IMMPLEME

30、ENTATIION. METHOOD HANNDLE_DDOUBLEE_CLICCK. DATTA: LII_SPFLLI LIKKE LINNE OF WA_SPPFLI. REAAD TABBLE WAA_SPFLLI INDDEX E_ROW-IINDEX INTO LI_SPPFLI. *将行列等信息息合并到字符符串 DATTA: S11(100) TYPEE C. CONNCATENNATE 行: E_ROW-IINDEX 列名: EE_COLUUMN-FIIELDNAAME INNTO S11. CONNCATENNATE SS1 coonnid: LI_SPFLII-CONNNI

31、D INNTO S11. CONNCATENNATE SS1 caarrid: LI_SPFLII-CARRRID INNTO S11. *在状态条显示示单击的行与与列信息 MESSSAGE S208(00) WWITH SS1. ENDMEETHOD. handdle_doouble_clickk ENDCLASSS. lccl_eveent_reeceiveer IMMPLENTTATIONN *&-* *& Moduule SSTATUSS_01000 OUTTPUT *&-* * 定义状态条条、包括菜单单、工具条按按钮、系统按按钮等*-* MODULE STATUUS_01000 OU

32、TTPUT. SET PPF-STAATUS STATUUS1. *如果窗口还没没有创建ALLV对象则创创建它 IF WAA_CUSTTOM_COONTAINNER ISS INITTIAL. CREEATE OOBJECTT WA_CCUSTOMM_CONTTAINERR EEXPORTTING CCONTAIINER_NNAME = WA_CCONTAIINER. CREEATE OOBJECTT ALV_GRID EEXPORTTING II_PAREENT = WA_CUUSTOM_CONTAAINER. CALLL METTHOD AALV_GRRID-SSET_TAABLE_FFO

33、R_FIIRST_DDISPLAAY EEXPORTTING I_STTRUCTUURE_NAAME = SPFLLI CCHANGIING IT_OOUTTABB = WA_SPPFLI. *ALV对象分分配双击事件件 CREEATE OOBJECTT EVENNT_RECCEIVERR. SETT HANDDLER EEVENT_RECEIIVER-HANDLLE_DOUUBLE_CCLICK FORR ALV_GRID. ENDIFF. ENDMODUULE. STAATUS_00100 OUTPUUT *&-* *& Moduule UUSER_CCOMMANND_01000 INNP

34、UT *&-* * 用户交互*-* MODULE USER_COMMAAND_01100 INNPUT. SAVE_OK = OK_COODE. CLEARR OK_CCODE. CASE SAVE_OK. WHEEN EXXIT. LLEAVE PROGRRAM. ENDCAASE. ENDMODUULE. USEER_COMMMAND_0100 INPUUT 输出界面如图88-7所示。双击时,注注意状态条显显示的信息:行号、选中中列名、航班班表中的COONNID和和CARRIID的值。图8-7 8.6 通过AALV控件编编辑内表和数数据库更新处理过程如下:(1)设定ALLV控件可以以编辑;

35、(2)退出屏幕幕时将数据更更新到内表;(3)捕捉ALLV控件的数数据更改信息息,将ALVV控件的删除除行信息保存存到内表中;(4)在输出时时,比较删除除行和最后的的内表,删除除重复的行;(5)将数据更更新到数据表表。【例8.4】主程序:REPORT YTESST31. DATA: OOK_CODDE TYPPE SY-UCOMMM, SSAVE_OOK TYPPE SY-UCOMMM. TABLES SPFLII. DATA LSS_SPFLLI TYPPE SPFFLI. DATA WAA_SPFLLI TYPPE TABBLE OFF SPFLLI. DATA WAADEL_SSPFLI

36、TYPE TABLEE OF SSPFLI. SELECT * INTTO TABBLE WAA_SPFLLI FROOM SPFFLI. DATA: WWA_CONNTAINEER TYPPE SCRRFNAMEE VALUUE ALLVDATAA, AALV_GRRID TYYPE REEF TO CL_GUUI_ALVV_GRIDD, WWA_CUSSTOM_CCONTAIINER TTYPE RREF TOO CL_GGUI_CUUSTOM_CONTAAINER. DATA WAA_LAYOOUT TYYPE LVVC_S_LLAYO. WA_LAYOOUT-EDDIT = X. CL

37、ASS LLCL_EVVENT_RRECEIVVER DEEFINITTION DDEFERRRED. DATA EVVENT_RRECEIVVER TYYPE REEF TO LCL_EEVENT_RECEIIVER. *-* * CLASSS lcll_evennt_recceiverr DEFIINITIOON *-* * *-* CLASS LLCL_EVVENT_RRECEIVVER DEEFINITTION. PUBLIIC SECCTION. TYPPES: DDEL_ROOWS TYYPE STTANDARRD TABBLE OFF SPFLLI. DATTA: DDDEL_R

38、OOWS TYYPE STTANDARRD TABBLE OFF SPFLLI. METTHODS: HANNDLE_DDATA_CCHANGEED FFOR EVVENT DDATA_CCHANGEED OF CL_GUUI_ALVV_GRIDD IMPOORTINGG ER_DDATA_CCHANGEED. METTHODS: UPDDATE_DDELTA_TABLEES IIMPORTTING PR_DDATA_CCHANGEED TYPPE REFF TO CCL_ALVV_CHANNGED_DDATA_PPROTOCCOL. METTHODS: GETT_DELEETED_RROWS

39、 EXPPORTINNG DDELETEED_ROWWS TYPPE DELL_ROWSS. ENDCLASSS. LCCL_EVEENT_REECEIVEER DEFFINITIION *-* * CLASSS LCLL_EVENNT_RECCEIVERR IMPLLEMENTTATIONN *-* * *-* CLASS LLCL_EVVENT_RRECEIVVER IMMPLEMEENTATIION. METHOOD HANNDLE_DDATA_CCHANGEED. CALLL METTHOD UUPDATEE_DELTTA_TABBLES( ER_DAATA_CHHANGEDD ).

40、ENDMEETHOD. HANDDLE_DAATA_CHHANGEDD METHOOD UPDDATE_DDELTA_TABLEES. DATTA: L_DEL_RROW TYYPE LVVC_S_MMOCE. LOOOP AT PR_DAATA_CHHANGEDD-MT_DELETTED_ROOWS INNTO L_DEL_RROW. RREAD TTABLE WA_SPPFLI IINTO LLS_SPFFLI INNDEX LL_DEL_ROW-RROW_IDD. IIF SY-SUBRCC NE 00. MESSSAGE EE208(000) WIITH 处处理错误. EELSE. A

41、PPEEND LSS_SPFLLI TO DDEL_ROWS. EENDIF. ENDDLOOP. ENDMEETHOD. updaate_deelta_ttabless METHOOD GETT_DELEETED_RROWS. DELLETED_ROWS = ME-DDELL_ROWSS. ENDMEETHOD. get_deletted_roows ENDCLASSS. LCCL_EVEENT_REECEIVEER DEFFINITIION START-OOF-SELLECTIOON. CALL SCREEEN 1000. WRITEE / 删删除的内表记记录. WRITEE / _. C

42、ALL METHOOD EVEENT_REECEIVEER-GEET_DELLETED_ROWS IMPPORTINNG DDELETEED_ROWWS = WWADEL_SPFLII. LOOP AT WAADEL_SSPFLI INTO SPFLII. WRIITE: / SPFLLI-CARRRID,SSPFLI-CONNIID,SPFFLI-CIITYFROOM. ENDLOOOP. WRITEE: / 更新后的内内表记录:. WRITEE: / _. LOOP AT WAA_SPFLLI INTTO SPFFLI. WRIITE : / SPFFLI-CAARRID,SPFLII-C

43、ONNNID,SPPFLI-CCITYFRROM. ENDLOOOP. *WHEN SAVE. * MODIIFY SPPFLI FFORM TTABLE WA_SPPFLI. * * IF SSY-SUBBRC NEE 0. * MEESSAGEE I0055(YMESSS) WIITH 更更新数据错误误!. * EXXIT. * ELSEE. * MEESSAGEE I0055(YMESSS) WIITH 更更新数据OKK!. * ENDIIF. * DELEETE SPPFLI FFROM TTABLE DELA_SPFLII. * IF SSY-SUBBRC NEE 0. * MEES

44、SAGEE I0055(YMESSS) WIITH 更更新数据错误误!. * ELSEE. * MEESSAGEE I0055(YMESSS) WIITH 更更新数据OKK!. * ENDIIF. END-OF-SELECCTION. *&-* *& Moduule SSTATUSS_01000 OUTTPUT *&-* * textt *-* MODULE STATUUS_01000 OUTTPUT. SET PPF-STAATUS STATUUS1. IF WAA_CUSTTOM_COONTAINNER ISS INITTIAL. CREEATE OOBJECTT WA_CCUSTOMM_

45、CONTTAINERR EXPPORTINNG CONNTAINEER_NAMME = WWA_CONNTAINEER. CREEATE OOBJECTT ALV_GRID EEXPORTTING II_PAREENT = WA_CUUSTOM_CONTAAINER. CREEATE OOBJECTT EVENNT_RECCEIVERR. SETT HANDDLER EEVENT_RECEIIVER-HANDLLE_DATTA_CHAANGED FOR AALV_GRRID. CALLL METTHOD AALV_GRRID-SSET_TAABLE_FFOR_FIIRST_DDISPLAAY

46、EEXPORTTING I_STTRUCTUURE_NAAME = SPFLLI IS_LLAYOUTT = WA_LAAYOUT CCHANGIING IT_OOUTTABB = WA_SPPFLI. ENDIFF. ENDMODUULE. STAATUS_00100 OUTPUUT *&-* *& Moduule UUSER_CCOMMANND_01000 INNPUT *&-* * textt *-* MODULE USER_COMMAAND_01100 INNPUT. SAVE_OK = OK_COODE. CLEARR OK_CCODE. CASE SAVE_OK. WHEEN EX

47、XIT. DDATA LL_RET VALUEE X. CCALL MMETHODD ALV_GRID-CHECCK_CHAANGED_DATA IMPOORTINGG E_VALIDD = L_RET. LLEAVE TO SCCREEN 0. ENDCAASE. ENDMODUULE. USEER_COMMMAND_0100 INPUUT图8-8 再删除两行后退退出,输出结结果如图8-9所示。图8-9 注:更新到数据据库程序是被被注释的。8.7 ALVV Treee的使用在SAP业务系系统中,大量量地使用到了了ALV TTree对象象,该对象在在表格基础上上对同类数据据进行归类,并并对各分

48、类能能进行数据汇汇总,如图88-10所示示。图8-10 以航班表(SPPFLI)为为例:(1)按国家、航线、航班班分类;(2)在右半屏屏对距离字段段进行数量汇汇总;(3)在右屏输输出起飞国家家、起飞城市市、目的国家家、目的城市市、距离字段段,并控制其其输出长度。处理过程:(1)建立程序序和屏幕,在在屏幕上建立立定制控制对对象,定义好好工作流;(2)建立好PPAI、PBO事件;(3)在PAII中定义建立立定制控制对对象,并建立立AVL TTree对象象;(4)建立ALLV Treee对象的标标题;(5)建立右屏屏输出字段清清单、字段长长度、汇总字字段等内容;(6)建立Trree分类字字段清单及输

49、输出先后顺序序;(7)显示ALLV Treee对象。主程序:REPORT YTESST32. DATA: OOK_CODDE TYPPE SY-UCOMMM, SSAVE_OOK TYPPE SY-UCOMMM. DATA: GGB_FIEELDCATT TYPEE LVC_T_FCAAT. DATA: GGB_SORRTFLD TYPE LVC_TT_SORTT. DATA WAA_SPFLLI TYPPE TABBLE OFF SPFLLI. SELECT * INTTO TABBLE WAA_SPFLLI FROOM SPFFLI. DATA: WWA_CONNTAINEER TYPPE

50、 SCRRFNAMEE VALUUE ALLVDATAA, AALV_GRRID TYYPE REEF TO CL_GUUI_ALVV_TREEE_SIMPPLE, WWA_CUSSTOM_CCONTAIINER TTYPE RREF TOO CL_GGUI_CUUSTOM_CONTAAINER. CALL SCCREEN 100. *&-* *& Moduule SSTATUSS_01000 OUTTPUT *&-* * textt *-* MODULE STATUUS_01000 OUTTPUT. SET PPF-STAATUS STATUUS1. IF WAA_CUSTTOM_COONT

51、AINNER ISS INITTIAL. DATTA LS_LIST_COMM TYPE SLIS_T_LISSTHEADDER. DATTA LS_ALISTT_COMMM TYPEE SLISS_LISTTHEADEER. LS_ALISTT_COMMM-TYP = H. LS_ALISTT_COMMM-INFOO = MMy ALVV TREEE Testting. APPPEND LLS_ALIIST_COOMM TOO LS_LLIST_CCOMM. PERRFORM BLDCAAT. PERRFORM BLDSOORTFLDD. CREEATE OOBJECTT WA_CCUSTO

52、MM_CONTTAINERR EEXPORTTING CCONTAIINER_NNAME = WA_CCONTAIINER. CREEATE OOBJECTT ALV_GRID EEXPORTTING II_PAREENT = WA_CUUSTOM_CONTAAINER. CALLL METTHOD AALV_GRRID-SSET_TAABLE_FFOR_FIIRST_DDISPLAAY EEXPORTTING IT_LLIST_CCOMMENNTARY = LS_LIST_COMM I_STTRUCTUURE_NAAME = SPPFLI CCHANGIING IT_SSORT = GB_S

53、ORTFFLD IT_FFIELDCCATALOOG = GB_FIELDDCAT IT_OOUTTABB = WA_SPFLII. CALLL METTHOD AALV_GRRID-EEXPANDD_TREEE EEXPORTTING I_LEEVEL = 1. ENDIFF. ENDMODUULE. STAATUS_00100 OUTPUUT *&-* *& Moduule UUSER_CCOMMANND_01000 INNPUT *&-* * textt *-* MODULE USER_COMMAAND_01100 INNPUT. SAVE_OK = OK_COODE. CLEARR O

54、K_CCODE. CASE SAVE_OK. WHEEN EXXIT. LLEAVE PROGRRAM. ENDCAASE. ENDMODUULE. USEER_COMMMAND_0100 INPUUT *&-* *& Formm BLDDCAT *&-* * textt *-* * - p1 textt * p1 textt * p1 textt * NODE_SEL_MMODE_SSINGLEE * HIIDE_SEELECTIION = * NAAME = * EXXCEPTIIONS * LIIFETIMME_ERRROR = 1 * CNNTL_SYYSTEM_ERRORR = 2

55、* CRREATE_ERRORR = 3 * FAAILED = 4 * ILLLEGALL_NOCEE_SELEECTIONN_MODEE = 5 * OTTHERS = 6 . IF SYY-SUBRRC 0. * MESSAAGE IDD SY-MMSGID TYPE SY-MSSGTY NNUMBERR SY-MMSGNO * WIITH SYY-MSGVV1 SY-MSGV22 SY-MMSGV3 SY-MSSGV4. ENDIFF. *开始建立以国国家- 城市-城区三层的树 CLEARR NODEE1. *节点关键字 NODE11-NODEE_KEY = 国家家. *第一层 CLE

56、ARR NODEE1-RELLATKEYY. CLEARR NODEE1-RELLATSHIIP. *是文件夹 NODE11-HIDDDEN = . NODE11-DISAABLED = . NODE11-ISFOOLDER = X. *不带ICONN CLEARR NODEE1-N_IIMAGE. CLEARR NODEE1-EXPP_IMAGGE. CLEARR NODEE1-EXPPANDERR. NODE11-TEXTT = 中中国. APPENND NODDE1 TOO NODEE_TABLLE. *二层节点 CLEARR NODEE1. NODE11-NODEE_KEY = 城市市

57、北京. *上层关系 NODE11-RELAATKEY = 国家家. NODE11-RELAATSHIPP = CLL_GUI_SIMPLLE_TREEE=REELAT_LLAST_CCHILD. NODE11-HIDDDEN = . NODE11-DISAABLED = . NODE11-ISFOOLDER = X. CLEARR NODEE1-N_IIMAGE. CLEARR NODEE1-EXPP_IMAGGE. CLEARR NODEE1-EXPPANDERR. NODE11-TEXTT = 北北京. APPENND NODDE1 TOO NODEE_TABLLE. CLEARR NOD

58、EE1. NODE11-NODEE_KEY = 城市市上海. NODE11-RELAATKEY = 国家家. NODE11-RELAATSHIPP = CLL_GUI_SIMPLLE_TREEE=REELAT_LLAST_CCHILD. NODE11-HIDDDEN = . NODE11-DISAABLED = . NODE11-ISFOOLDER = X. CLEARR NODEE1-N_IIMAGE. CLEARR NODEE1-EXPP_IMAGGE. CLEARR NODEE1-EXPPANDERR. NODE11-TEXTT = 上上海. APPENND NODDE1 TOO NOD

59、EE_TABLLE. CLEARR NODEE1. NODE11-NODEE_KEY = KEEY 崇文区区. NODE11-RELAATKEY = 城市市北京. NODE11-RELAATSHIPP = CLL_GUI_SIMPLLE_TREEE=REELAT_LLAST_CCHILD. NODE11-HIDDDEN = . NODE11-DISAABLED = . NODE11-ISFOOLDER = . *图标,可运行行SHOWIICON查阅阅 NODE11-N_IMMAGE = 9YY. NODE11-EXP_IMAGEE = 9Y. CLEARR NODEE1-EXPPANDERR.

60、 NODE11-TEXTT = 崇崇文区. APPENND NODDE1 TOO NODEE_TABLLE. CLEARR NODEE1. NODE11-NODEE_KEY = KEEY 西城区区. NODE11-RELAATKEY = 城市市北京. NODE11-RELAATSHIPP = CLL_GUI_SIMPLLE_TREEE=REELAT_LLAST_CCHILD. NODE11-HIDDDEN = . NODE11-DISAABLED = . NODE11-ISFOOLDER = . NODE11-N_IMMAGE = DFF. NODE11-EXP_IMAGEE = DF. CL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论