說明,因為ALV的功能比TABLE強大,所以在很多時候都習慣性的選擇ALV顯示。
ALV是WDA的組件,封裝好的,和SELECT OPTION一樣。所以使用的方法一般就是:引入組件,初始化組件,數據綁定,數據顯示。。。
1.
1.1程序組件引入ALV組件:
在程序組件中引入ALV組件,命名為ALV。
1.2視圖引入組件中集成的ALV對象
視圖Properties頁簽中引入ALV對象
2.初始化ALV
視圖method頁簽中新建方法
將INIT_ALV方法加入到WDDOINIT
INIT_ALV( ).
INIT_ALV添加初始化代碼:
METHOD INIT_ALV . DATA: LR_SALV_WD_TABLE_USAGE TYPE REF TO IF_WD_COMPONENT_USAGE. DATA: LR_TABLE_SETTINGS TYPE REF TO IF_SALV_WD_TABLE_SETTINGS. DATA: LR_SALV_WD_TABLE TYPE REF TO IWCI_SALV_WD_TABLE. LR_SALV_WD_TABLE_USAGE = WD_THIS->WD_CPUSE_ALV( ). IF LR_SALV_WD_TABLE_USAGE->HAS_ACTIVE_COMPONENT( ) IS INITIAL. LR_SALV_WD_TABLE_USAGE->CREATE_COMPONENT( ). ENDIF. LR_SALV_WD_TABLE = WD_THIS->WD_CPIFC_ALV( ). WD_THIS->ALV_CONFIG_TABLE = LR_SALV_WD_TABLE->GET_MODEL( ). LR_TABLE_SETTINGS ?= WD_THIS->ALV_CONFIG_TABLE. LR_TABLE_SETTINGS->SET_VISIBLE_ROW_COUNT( '10' )."設置可見行 LR_TABLE_SETTINGS->SET_ROW_SELECTABLE( ABAP_TRUE )."設置行選擇 LR_TABLE_SETTINGS->SET_WIDTH( '50%' )."設置ALV寬度 LR_TABLE_SETTINGS->SET_EDIT_MODE( IF_SALV_WD_C_TABLE_SETTINGS=>EDIT_MODE )."設置編輯模式 * LR_TABLE_SETTINGS->SET_EDIT_MODE( IF_SALV_WD_C_TABLE_SETTINGS=>EDIT_MODE_STANDARD )."設置不可編輯模式 LR_TABLE_SETTINGS->SET_READ_ONLY( ABAP_FALSE )."設置ALV整體不可編輯 LR_TABLE_SETTINGS->SET_SCROLLABLE_COL_COUNT( '10' )."設置滾動條 LR_TABLE_SETTINGS->SET_ENABLED( ABAP_TRUE ) ."可處理的 LR_TABLE_SETTINGS->SET_EMPTY_TABLE_TEXT( 'Empty' ) ."設置空表時顯示的文本 LR_TABLE_SETTINGS->SET_FIXED_TABLE_LAYOUT( ABAP_FALSE ). "使列寬可自動調節 LR_TABLE_SETTINGS->SET_DISPLAY_EMPTY_ROWS( ABAP_FALSE ). "不展示空表 *---->ALV COLUMN CONFIGURE DATA: LR_COLUMN_SETTINGS TYPE REF TO IF_SALV_WD_COLUMN_SETTINGS, LR_COLUMN TYPE REF TO CL_SALV_WD_COLUMN, LR_COLUMN_HEADER TYPE REF TO CL_SALV_WD_COLUMN_HEADER. LR_COLUMN_SETTINGS ?= WD_THIS->ALV_CONFIG_TABLE. "排除不顯示的字段 * LR_COLUMN = LR_COLUMN_SETTINGS->GET_COLUMN( 'PROCESS_TYPE' ). * LR_COLUMN->SET_VISIBLE( IF_WDL_CORE=>VISIBILITY_NONE ). * * LR_COLUMN = LR_COLUMN_SETTINGS->GET_COLUMN( 'RETAILER_PARTNER' ). * LR_COLUMN->SET_VISIBLE( IF_WDL_CORE=>VISIBILITY_NONE ). "設置字段屬性(下拉,按鈕等) LR_COLUMN = LR_COLUMN_SETTINGS->GET_COLUMN( 'ZRENO' ). LR_COLUMN_HEADER = LR_COLUMN->GET_HEADER( ). LR_COLUMN_HEADER = LR_COLUMN->DELETE_HEADER( ). LR_COLUMN_HEADER = LR_COLUMN->CREATE_HEADER( ). * LR_COLUMN_HEADER->SET_TEXT( CL_WD_UTILITIES=>GET_OTR_TEXT_BY_ALIAS( 'ZCRM/SORG' ) ). LR_COLUMN_HEADER->SET_TEXT( 'TEST NO.' ). "此處使用INPUT_FIELD 是為了展示前面設置的可編輯屬性(默認都是text,不可編輯,所以有要編輯的列,需要這里設置一下) DATA: LR_INPUT_FIELD TYPE REF TO CL_SALV_WD_UIE_INPUT_FIELD. CREATE OBJECT LR_INPUT_FIELD EXPORTING VALUE_FIELDNAME = 'ZRENO'."此ID要與COLUMN對應,或者用GET_COLUMNS,然后循環處理列屬性 LR_COLUMN->SET_CELL_EDITOR( LR_INPUT_FIELD ). "設置ALV按鈕排除 WD_THIS->ALV_CONFIG_TABLE->IF_SALV_WD_FUNCTION_SETTINGS~DELETE_FUNCTION( ID = 'SALV_WD_PDF' ). WD_THIS->ALV_CONFIG_TABLE->IF_SALV_WD_FUNCTION_SETTINGS~DELETE_FUNCTION( ID = 'SALV_WD_VIEW_LOAD' ). WD_THIS->ALV_CONFIG_TABLE->IF_SALV_WD_FUNCTION_SETTINGS~DELETE_FUNCTION( ID = 'SALV_WD_INPUT_APPEND_ROW' ). WD_THIS->ALV_CONFIG_TABLE->IF_SALV_WD_FUNCTION_SETTINGS~DELETE_FUNCTION( ID = 'SALV_WD_INPUT_INSERT_ROW' ). WD_THIS->ALV_CONFIG_TABLE->IF_SALV_WD_FUNCTION_SETTINGS~DELETE_FUNCTION( ID = 'SALV_WD_INPUT_DELETE' ). WD_THIS->ALV_CONFIG_TABLE->IF_SALV_WD_FUNCTION_SETTINGS~DELETE_FUNCTION( ID = 'SALV_WD_INPUT_CHECK' ). ENDMETHOD.
3.COMPONENTCONTROLLER中創建全局節點(之前創建的節點是在視圖中,現在ALV需要綁定數據)
與前面的創建相同
在ALV組件中綁定數據到ALV
綁定成功后,DATA變成雙向箭頭
在視圖中,綁定ITEM節點到COMPONENTCONTROLLER的節點,同上
(注,如果ALV數據只在單個VIEW里使用可以在VIEW中,將ITEM節點綁定到ALV的DATA節點)
4.ALV控制器創建,並在窗口中添加
為了程序效果,這里會將原有的TABLE保留,並將ALV放到TABLE下面
在LAYOUT中創建ViewContainerUIElement容器,放在TABLE后面
此時窗口顯示
在窗口的ALV上,右鍵->嵌套視圖 如下:
待嵌套的視圖,F4:如下圖
選擇ALV table
激活所有對象。右鍵程序測試