日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SAP ABAP开发从入门到精通——第15章 面向对象ALV

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAP ABAP开发从入门到精通——第15章 面向对象ALV 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

15.1概要

15.1.1 什么是ALV

ALV的主要功能

15.1.2 ALV的類型

?15.1.3 ALV GRID容器接口

15.1.4 ALV GRID 容器結構

15.2 SAP容器

15.2.1 創建SAP容器及容器對象

15.3 創建ALV

15.3.1 創建ALV GRID 容器

1. 創建參照變量

2.創建SAP容器

3.創建ALV GRID 控件

4.查詢數據

5.調用ALV顯示方法

6.執行程序

15.3.2 利用Docking容器創建程序

15.4 ALV方法

15.4.1 set_table_for_first_display方法

1. I_STRUCTURE_NAME 參數

2. IS_VARIANT 參數

3. I_SAVE 參數

4.I_DEFAULT 參數

5.IS_LAYOUT 參數

6.IT_OUTTAB 參數

7.IT_FIELDCATALOG 參數

8.IT_TOOLBAR_EXCLUDING 參數

9.IT_SORT 參數

15.4.2 ALV 其他方法

1. get_current_cell 方法


目錄

15.1概要

15.1.1 什么是ALV

ALV的主要功能

15.1.2 ALV的類型

?15.1.3 ALV GRID容器接口


15.1概要

15.1.1 什么是ALV

ALV是ABAP List Viewer的縮寫,是實際業務中查詢數據或修改數據是經常使用的程序。“第 12 章 報表程序”中是使用WRITE語句制作了報表程序。面向對象程序中為了追加下載數據的功能,首先要創建GUI STATUS,從而在畫面中增加按鈕,

然后實現用戶單擊按鈕時觸發事件。但是ALV已經提供了包含這些基本業務的程序包。即在Excel程序中,排序數據,計算合計,篩選信息等基本功能不用通過代碼也能自由地實現。

ALV的主要功能

  • 排序功能
  • 過濾設置
  • 變更列管
  • 變更布局
  • ABC分析
  • 下載Excel及Word文檔的保存。

ALV在SAP Release3.1版本以后開始出現在ABAP程序中,最近除報告書,成績表等有固定樣式的文檔程序基本使用ALV進行開發

15.1.2 ALV的類型

ALV分為利用函數的方法利用GRID控件的方法兩種,兩種方法內部含有相似的結構和功能,當然也存在SALV(New ALV)。這些技術出現的順序依次為Function ALV > GRID ALV > SALV。REUSE_ALV_GRID_DISPLAY函數也以類為基礎

但是SAP公司為了提供方便集合了多樣的功能使用功能函數實現。若利用函數輸出ALV程序,則不易控制畫面。就因為存在這些限制項,從SAP Release3.1版本開始導入了利用ABAP對象的ALV GRID技術。另外,Net Web 2004平臺中發布了集合

ALV功能的SALV包(SALV也稱為 New ALV)。SALV可以像使用函數生成ALV一樣不適用畫面以全屏模式輸出,也可以利用容器在畫面上顯示ALV。利用GRID的ALV不能以Batch Job登錄后再后臺運行,但SALV可正常運行。SALV與現有方法相比

為開發提供了便利,集合了詳細功能以接口方式提供。但是SALV的唯一缺點就是不支持編輯模式。

利用ALV,只要運用數據結構和內標就可以在短時間內開發報表。Function ALV在第16章進行介紹。ALV GRID是以類開發的技術,因此需要掌握“第 14 章 ABAP 對象”的知識。

下圖是用ALV查詢列表的畫面。ALV GRID 使用 SAP 公司開發的控件技術。與其他很多容器相同,ALV GRID 容器提供可以通過全局類影響屬性的方法,通過這些方法可以為程序包ALV基本功能基礎上適用追加項。另外 ALV GRID 容器定義 SAP

Context 菜單就可以使用標準程序的綜合功能。

? ? ? ? ? ? ? ? ? ? ? ? ??

?15.1.3 ALV GRID容器接口

ALV 程序中使用的接口由參照CL_GUI_ALV_GRID類的變量定義。用下列語句定義對象引用變量。

DATA : name TYPE RET TO cl_gui_alv_grid.

上面語句的name變量是參照CL_GUI_ALV_GRIDE的對象引用變量(Object Reference Variable)。

另外,用CREATE OBJECT 語句調用類的構造函數并生成ALV GRID接口

CREATE OBJECT name.

?ALV GRID 容器中擁有畫面顯示的所有信息,調用類方法可以重新定義或修改ALV畫面屬性。

下圖說明了ALV的繼承樹。在類生成器T-CODE:SE24中查詢CL_GUI_ALV_GRID可以發現Supper class字段上面存在超級類。還可以看出CL_GUI_ALV_GRID的超級類是CL_GUI_ALV_OBJECT。

15.1.4 ALV GRID 容器結構

下圖說明了ALV GRID 顯示在畫面的順序。

要利用ALV顯示數據,至少要經過下列兩個步驟。

  • 定義內表:定義顯示在畫面上的內表。在ALV上存儲數據信息的內表叫輸出表(Output Table)。
  • 數據結構(字段目錄):定義ALV GRID容器顯示在畫面上的結構。即擁有如ALV GRID容器中定義的數據結構,技術屬性,描述等信息。一般利用ABAP數據字典的表,結構體或者直接使用內表結構。
  • 只要啟動ALV GRID,則傳遞給ALV GRID容器中的輸出表一直有效。輸出表可以利用ABAP數據字典對象,但也可以只用字段目錄創建ALV結構。字段目錄(Field CataLog)是存儲要顯示在ALV畫面上的字段信息的表。例如,定義ALV字段的類型,屬性,長度等。

    字段目錄是LVC_T_FCAT類型的表。下圖顯示生成ALV畫面之前的內部結構順序。

    為了顯示ALV實例到畫面,首先要定義ALV領域,可以利用屏幕編輯器的自定義控件設置。另外,顯示ALV必須要有連接屏幕領域與ALV的SAP容器控件。ALV是與畫面的SAP控件相連后顯示在畫面上的。控件從“Containe”單詞可以看出是代表給畫面“裝什么”的意思。即容器時在畫面上顯示類似于 Textedit,Picture等控件對象時使用的上級控件。在第二節中會詳細介紹SAP容器。

    15.2 SAP容器

    15.2.1 創建SAP容器及容器對象

    若要顯示ALV畫面,必須要有連接屏幕與ALV GRID控件的SAP容器控件。即SAP容器為了充當連接器,將SAP控件包含在容器中。SAP容器類型有SAP Tree,SAP Picture,SAP Textedit,SAP Splitter控件等。SAP容器時包含其他控件的控件,也稱為父控件(Parent Control)。

    下圖中的容器控件為基礎創建ALV程序。能顯示這些SAP控件的SAP容器種類

    容 器 類 型功? ? ? ? ? ? ? ? 能
    SAP 自定控件

    在使用屏幕編輯器的一般畫面上定義領域

    類:CL_GUI_CUSTOM_CONTAINER

    SAP 對話框控件

    對話框或者在全畫面上以對話框形式顯示

    類:CL_GUI_DILGONBOX_CONTAINER

    SAP Docking 控件

    在畫面領域的各邊角可以調節其大小。是在ALV程序中經常與自定義控件一起使用的形態

    類:CL_GUI_DOCKING_CONTAINER

    SAP 拆分控件

    拆分容器時使用

    類:CL_GUI_SPLITTER_CONTAINER

    SAP 細拆分控件

    和Splitter控件功能相同,可以再拆分已被拆分的容器

    類:CL_GUI_EASY_SPLITTER_CONTAINER

    本章重點學習這5種類型中的SAP自定義控件。另外,在實際也去中也經常使用SAP Docking容器,因此先簡單了解基本結構后做實際練習。此外,容器的基本原理都相似,因此只要掌握其使用方法就不難理解。

    15.3 創建ALV

    15.3.1 創建ALV GRID 容器

    1. 創建參照變量

    創建屏幕,利用屏幕編輯器追加自定義控件CON1。然后追加創建參照ALV GRID 容器的引用變量,與此同時創建要顯示在屏幕上的內表。

    REPORT z15_02.DATA : con1_ref TYPE REF TO CL_GUI_CUSTOM_CONTAINER.DATA : G_GRID TYPE REF TO CL_GUI_ALV_GRID.DATA : GT_SFLIGHT TYPE TABLE OF SFLIGHT.

    2.創建SAP容器

    在屏幕上創建適當大小的自定義控件。另外,在PBO模塊init_con中追加下列代碼后創建SAP容器。CREATE OBJECT語句會調用類CL_GUI_CUSTOM_CONTAINER的構造函數,創建SAP容器的實例。此時,參數指定屏幕上創建的自定義控件。

    IF~is initial.語句的內容意味著已經創建容器對象不重復創建。例如,ALV GRID已經顯示在畫面上,當用戶點擊REFRESH按鈕要重新刷新畫面時沒有必要重新創建實例。

    MODULE init_con OUTPUT.IF con1_ref is initial.CREATE OBJECT con1_refEXPORTINGcontainer_name = 'CON1'.

    3.創建ALV GRID 控件

    利用CREATE OBJECT 語句創建參照CL_GUI_ALV_GRID控件實例。參數i_parent為了顯示ALV指定連接屏幕時使用的SAP容器。

    CREATE OBJECT G_GRIDEXPORTINGi_parent = con1_ref.ENDIF.ENDMODULE.

    4.查詢數據

    在主程序中追加執行事件START-OF-SELECTION來查詢數據。然后調用存在自定義控件的屏幕。

    SELECT * FROM sflightINTO TABLE gt_sflight UP TO 25 ROWS.CALL SCREEN 100.

    5.調用ALV顯示方法

    只要調用顯示ALV的G_GRID方法就可以很簡單地結束ALV畫面。此時,參數利用SFLIGHT結構體要顯示在畫面上的數據使用內表gt_sflight。在MODULE init_con最后追加下面代碼

    CALL METHOD g_grid->set_table_for_first_displayEXPORTINGI_STRUCTURE_NAME='SFLIGHT'CHANGINGit_OUTTAB=gt_sflight.

    6.執行程序

    15.3.2 利用Docking容器創建程序

    自定義容器是在畫面指定領域,于此相反Docking容器是創建實例時直接直接指定屏幕和大小。即就如Docking單詞的本意一樣,不用通過自定義容器直接指定ALV要使用的領域和屏幕編號。下圖為Docking容器的結構

    除了決定SAP容器的類不同和不指定屏幕領域這兩點之外,其他使用方法和自定義控件相似。首先,定義參照Docking容器的類型參照對象和ALV實例。

    DATA:G_DOCKING TYPE REF TO CL_GUI_DOCKING_CONTAINER,G_GRID TUPE REF TO CL_GUI_ALV_GRID.

    利用CREATE OBJECT語句調用類cl_gui_docking_container的構造函數創建g_docking實例。但是創建Docking容器組件時參數還需要指定程序編號sy-repid和屏幕編號sy-dynnr。

    CREATE OBJECT G_GOCKINGEXPROTINGREPID=SY-REPIDDYNNER=SY-DYNNREXTENSION=800."顯示寬度

    利用CREATE OBJECT語句創建參照CL_GUI_ALV_GRID的ALV GRID控件實例。然后創建ALV GRID控件實例的同時連接Docking容器。

    CREATE OBJECT G_GRIDEXPORTINGI_PARENT = G_DOCKING.

    15.4 ALV方法

    本章介紹ALV中經常用到的方法。前面已經介紹方法決定對象的行為即ALV方法管理ALV行為。

    15.4.1 set_table_for_first_display方法

    set_table_for_first_display是 ALV GRID 控件實例顯示在輸出列表時最基本,最重要的方法。調用方法時需要參照ABAP數據字典的結構或者需要定義字段目錄。前者指的是如前面實例中的EXPORTING I_STRUCTURE_NAME='SFLIGHT'所示,參照SFLIGHT表一樣的結構,后者指的是在代碼中直接構成ALV字段。另外,調用set_table_for_first_display方法時在運行程序之前可以排序或者過濾字段,如下圖語句所示

    CALL METHOD<ref.var.to CL_GUI_ALV_GRID>->set_table_for_first_displayEXPORTINGI_STRUCTURE_NAME =<string of type DD02L-TABNAME>IS_VARIANT =<structure of type DISVARIANT>I_SAVE =<var.of TYPE cHAR01>I_DEFAULT =<var.of TYPE cHAR01>IS_LAYOUT =<structure of type LVC_S_LAYO>IS_PRINT =<structure of type LVC_S_PRNT>IT_SPECIAL_GROUPS =<internal table of type LVC_T_SGRP>IT_TOOLBAR_EXCLUDING =<internal table of type UI_FUNCTIONS>CHANGINGIT_OUTTAB =<internal table>IT_FIELDCATALOG =<internal table of type LVC_T_FCAT>IT_SORT =<internal table of type LVC_T_SORT>IT_FILTER =<internal table of type LVC_T_FILT>

    下面仔細觀察一下set_table_for_first_display 方法中要使用的參數和屬性。

    1. I_STRUCTURE_NAME 參數

    為了制作輸出表的形式輸入類似于SFLIGHT的一樣的ABAP數據字典結構體名字。只要設置這個參數會自動生成符合此結構體的字段目錄。即在程序內部沒有必要重新構成字段目錄。

    DATA : g_g_grid TYPE REF TO cl_gui_alv_grid.gt_sflight TYPE TABLE OF sflight.CALL METHOD g_grid->set_table_for_first_displayEXPORTINGI_STRUCTURE_NAME = 'SFLIGHT'CHANGINGIT_OUTTAB = GT_SFLIGHT.

    2. IS_VARIANT 參數

    可以設置ALV列表變式(Variant)。列表變式把修改的畫面字段順序、排列字段等操作保存成一個變式,以便以后查詢時以同樣式顯示。首先需要在報表程序中追加用于選擇布局的參數及功能。

    3. I_SAVE 參數

    函數set_table_for_first_display的參數I_SAVE已經在前面講述,因此下面簡單整理一下相關值

    功? ? ? ? 能
    X只能保存全局布局
    U只能保存自定義布局
    A同時包含X和U
    SPACE不保存布局

    4.I_DEFAULT 參數

    決定用戶是否能保存默認變式。

    功? ? ? ? 能
    X可以設置默認變式
    SPACE不能設置默認變式

    5.IS_LAYOUT 參數

    利用IS_LAYOUT 參數可以定義ALV GRID控件的畫面屬性,如設置合計金額或者以條紋形式顯示等。布局是LVC_S_LAYO類型的結構體。此結構體可以在T-CODE:SE11中查詢

    字? ?段描? ? 述目? ? 的
    CTAB_FNAME指定字段列顏色顏色
    CWIDTH_OPT自動調整列寬GRID屬性
    DFTAILINIT決定是否在詳細畫面顯示初始值Interaction
    DFTAILTITL顯示詳細畫面的標題欄Interaction
    EXCP_CONDS顯示例外處理字段Sub TotalExeptions
    EXCP_FNAME顯示例外處理字段Exeptions
    EXCP_LED例外處理字段不用信號燈顯示,而是用LEDExeptions
    EXCP_ROLLN顯示關于例外處理字段的幫助Exeptions
    GRID_TITLE指定標題欄的描述GRID 屬性
    INFO_FNAME指定行顏色顏色
    KEYHOT指定以HOTSOPOT顯示的主鍵Interaction
    NO_HEADERS

    不顯示字段標題

    GRID 屬性
    NO_HGRIDLN不顯示GRID的水平線GRID 屬性
    NO_MERGING排序字段時防止合并相同值的列GRID 屬性
    NO_ROWMARK

    刪除GRID的行選擇按鈕

    SEL_MODE='D'時刪除行選擇按鈕

    SEL_MODE=‘A’時刪除字段/行按鈕

    GRID 屬性
    NO_TOOLBAR不顯示工具欄GRID 屬性
    NO_TOTLINE不顯示所有行Total選項
    NO_VGRIDLN不顯示Grid的垂直線GRID 屬性
    NUM_TOTAL顯示NUMC字段的合計金額Total選項
    S_DRAGDROP

    設置Drag & Drop控件

    (復制,移動行的功能)

    Interaction
    SEL_MODE

    設置選擇模式

    (A,B,C,D,SPACE)

    GRID 屬性
    SGL_CLK_HD單擊字段標題時進行排序Interaction
    SMALLTITLE決定標題大小GRID 屬性
    TOTALS_BEF合計金額顯示在最上行Total選項
    ZEBRA變換行顏色顏色

    設置幾個布局屬性后進行測試,其他的參數可以通過練習掌握功能,生成LVC_S_LAYO類型的變量。

    6.IT_OUTTAB 參數

    IT_OUTTAB 參數是定義要顯示數據的輸出表的參數。換句話說是指定包含要顯示數據的內表參數。

    7.IT_FIELDCATALOG 參數

    決定要顯示的數據類型及輸出表結構。

    8.IT_TOOLBAR_EXCLUDING 參數

    在ALV GRID控件中有需要隱藏按鈕時使用。先定義ui_funcionts 類型的內表,然后把此Function代碼插入到此表中,則相應按鈕就會隱藏

    9.IT_SORT 參數

    設置ALV數據排列順序的參數。定義參照LVC_T_SORT類型的內表后,加入要用于排序的字段到此表中杰克。LVC_T_SORT中T指的是表,LVC_S_SORT指的是結構體。排序表的選項中Subtot設置以排序字段為基準顯示合計金額和全體合計金額。

    屬? ?性說? ? 明
    SPOS數字指定排列順序
    FIELDNAME字段名指定需要排序的字段名
    UP“,‘X’升序排序
    DOWN“,‘X’降序排序

    15.4.2 ALV 其他方法

    1. get_current_cell 方法

    總結

    以上是生活随笔為你收集整理的SAP ABAP开发从入门到精通——第15章 面向对象ALV的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。