閑的時候 做一個屏幕 分割器 、 tablecontrol 、tablestrip 、 alv oo 還有什麽? 類似于PA30 的效果吧

 

主要學習的博客轉自:http://www.abaptech.com/2008/07/alv-grid-demo/ 

 

先記錄下爲何要用繁體吧。

 

oh 前兒去學guitar 遇見了個外國人,在中國3、4年, 一口流利的普通話,自愧不如,人家外語怎麽就這麽好。

 

了解到原是教中國厤史的老師,我對於祖國的歷史局限于初高中那點底子,唉。

 

留下個聯係方式,居然是繁體的中文名字,我,慚愧,所以,開始用繁體,希望潛移默化的起到些作用吧。

 

 

言歸正傳!!!!!!!!!!!!

 

大概框架:

左邊是2個tree,

 

涉及到的幾個類,不分先後順序:

    cl_gui_docking_container

    cl_gui_container

    cl_gui_splitter_manager

    cl_gui_alv_tree

    cl_gui_alv_grid

    cl_gui_column_tree

 

事件流:

  •  先為分割器第一行顯示内表數據加值
  • call screen 9000
  • call method lcl_splitter_manager=>create
  • 註冊事件
  • 執行吧 
  • 出發按鈕,轉換子屏幕

 

 

1: 先創建個分割器類定義

 

CLASS lcl_splitter_manager DEFINITION. PUBLIC SECTION. "静态方法 CLASS-METHODS: create IMPORTING progname TYPE progname dynnr TYPE sy-dynnr. "全局方法 METHODS: init IMPORTING progname TYPE progname dynnr TYPE sy-dynnr. "创建分离器 METHODS: create_splitter_control IMPORTING parent TYPE REF TO cl_gui_docking_container EXPORTING launchpad_container TYPE REF TO cl_gui_container displaytool_container TYPE REF TO cl_gui_container. CLASS-DATA self TYPE REF TO lcl_splitter_manager. DATA launchpad_height TYPE i VALUE 240."分割条的高度 DATA splitter_control TYPE REF TO cl_gui_splitter_container. DATA docking_container TYPE REF TO cl_gui_docking_container. DATA launchpad_container TYPE REF TO cl_gui_container."左边据上面TREE DATA launchpad_manager TYPE REF TO lcl_launchpad_manager. DATA displaytool_container TYPE REF TO cl_gui_container."左边据下面ALV DATA displaytl_manager TYPE REF TO lcl_displaytl_manager. ENDCLASS. "LCL_SPLITTER_MANAGER DEFINITION

 涉及了兩個類:lcl_launchpad_manager / lcl_displaytl_manager.

 

2: 分割器的實現

CLASS lcl_splitter_manager IMPLEMENTATION. METHOD : create. CREATE OBJECT self. CALL METHOD self->init EXPORTING progname = progname dynnr = sy-dynnr. ENDMETHOD. METHOD init. CREATE OBJECT me->docking_container EXPORTING repid = progname dynnr = dynnr extension = 300 EXCEPTIONS cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5 OTHERS = 6. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CALL METHOD me->create_splitter_control EXPORTING parent = me->docking_container IMPORTING launchpad_container = me->launchpad_container displaytool_container = me->displaytool_container. CREATE OBJECT launchpad_manager EXPORTING parent = me->launchpad_container. CREATE OBJECT displaytl_manager EXPORTING parent = me->displaytool_container. ENDMETHOD. "INIT METHOD create_splitter_control. DATA alignment TYPE i. alignment = cl_gui_splitter_container=>align_at_left + cl_gui_splitter_container=>align_at_right + cl_gui_splitter_container=>align_at_top + cl_gui_splitter_container=>align_at_bottom. CREATE OBJECT splitter_control EXPORTING metric = space align = alignment parent = parent rows = 2 columns = 1 EXCEPTIONS cntl_error = 1 cntl_system_error = 2 OTHERS = 3. CALL METHOD splitter_control->set_row_sash EXPORTING id = 1 type = cl_gui_splitter_container=>type_movable"可移动的分隔条 value = cl_gui_splitter_container=>true. "1 CALL METHOD splitter_control->set_row_mode"设置行模式 EXPORTING mode = cl_gui_splitter_container=>mode_absolute."绝对模式 CALL METHOD me->splitter_control->set_row_height "用来设置行的高度 EXPORTING id = 1 height = me->launchpad_height. CALL METHOD splitter_control->get_container"launchpad_container是第一行 EXPORTING row = 1 column = 1 RECEIVING container = launchpad_container. CALL METHOD splitter_control->get_container "displaytool_container是第二行 EXPORTING row = 2 column = 1 RECEIVING container = displaytool_container. CALL METHOD cl_gui_cfw=>flush. ENDMETHOD. "CREATE_SPLITTER_CONTROL ENDCLASS. "LCL_SPLITTER_MANAGER IMPLEMENTATION

 

 這個還蠻重要的,裏面很多方法、屬性神馬的,挺有用的。其實,有的我也不明白,記一個最不解的

 

問題1:

 

閑的時候 做一個屏幕 分割器 、 tablecontrol 、tablestrip 、 alv oo 還有什麽? 類似于PA30 的效果吧_第1张图片

 

    DATA alignment  TYPE i.
    alignment cl_gui_splitter_container=>align_at_left +
           cl_gui_splitter_container=>align_at_right +
           cl_gui_splitter_container=>align_at_top +
           cl_gui_splitter_container=>align_at_bottom
.

    CREATE OBJECT splitter_control
      EXPORTING
        metric            space
        align             alignment
        parent            parent
        rows              2
        columns           1
      EXCEPTIONS
        cntl_error        1
        cntl_system_error 2
        OTHERS            3.

 

嗯 这段,什麽意思那?

 

 

3: 分割器,上下兩區域的類方法,定義

CLASS lcl_launchpad_manager DEFINITION. PUBLIC SECTION. METHODS : constructor IMPORTING parent TYPE REF TO cl_gui_container. METHODS: build_hierarchy_header EXPORTING hierarchy_header TYPE treev_hhdr."树控制:层次结构表头的属性 METHODS: build_fieldcatalog EXPORTING it_fieldcat TYPE lvc_t_fcat."定义字段 DATA l_layout_node TYPE lvc_s_layn. DATA p_node_image TYPE tv_image. ENDCLASS. "LCL_SPLITTER_MANAGER IMPLEMENTATION

 

實現:

CLASS lcl_launchpad_manager IMPLEMENTATION. METHOD constructor. DATA hierarchy_header TYPE treev_hhdr. DATA it_fieldcat TYPE lvc_t_fcat. DATA lt_events TYPE cntl_simple_events. DATA l_event TYPE cntl_simple_event. CALL METHOD me->build_hierarchy_header IMPORTING hierarchy_header = hierarchy_header. CREATE OBJECT alv_tree_control EXPORTING parent = parent node_selection_mode = cl_gui_column_tree=>node_sel_mode_single " item_selection = 'X' no_toolbar = ' ' no_html_header = 'X' EXCEPTIONS cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 illegal_node_selection_mode = 5 failed = 6 illegal_column_name = 7 OTHERS = 8 . IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CALL METHOD me->build_fieldcatalog IMPORTING it_fieldcat = it_fieldcat. CALL METHOD alv_tree_control->set_table_for_first_display EXPORTING is_hierarchy_header = hierarchy_header CHANGING it_outtab = it_ss[] it_fieldcatalog = it_fieldcat. p_node_image = '@AV@'. l_layout_node-isfolder = 'X'. l_layout_node-n_image = p_node_image. CALL METHOD alv_tree_control->add_node EXPORTING i_relat_node_key = '' i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = '顯示什麽信息那' IMPORTING e_new_node_key = l_top_key. "[表裏面一定要有 TYPE lvc_nkey 字段] LOOP AT it_order INTO wa_order. l_node_text = wa_order-carrid. CALL METHOD alv_tree_control->add_node EXPORTING i_relat_node_key = l_top_key i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = l_node_text is_node_layout = l_layout_node IMPORTING e_new_node_key = l_first_key. wa_order-l_key = l_first_key. MODIFY it_order FROM wa_order. CLEAR wa_order. ENDLOOP. "註冊一個事件,也用類型去定義和實現 CALL METHOD alv_tree_control->get_registered_events IMPORTING events = lt_events. l_event-eventid = cl_gui_column_tree=>eventid_node_double_click. APPEND l_event TO lt_events. CALL METHOD alv_tree_control->set_registered_events EXPORTING events = lt_events EXCEPTIONS cntl_error = 1 cntl_system_error = 2 illegal_event_combination = 3. IF sy-subrc <> 0. MESSAGE x208(00) WITH 'ERROR'. ENDIF. CALL METHOD alv_tree_control->frontend_update. CALL METHOD cl_gui_cfw=>flush. ENDMETHOD . "CONSTRUCTOR METHOD build_hierarchy_header. hierarchy_header-heading = '查询'(001). hierarchy_header-tooltip = 'TOOLTIP'(001). hierarchy_header-width = 200. hierarchy_header-width_pix = ' '. ENDMETHOD. "BUILD_HIERARCHY_HEADER METHOD build_fieldcatalog. DEFINE hout. wa_fieldcat-fieldname = &1. wa_fieldcat-coltext = &2. wa_fieldcat-outputlen = &3. append wa_fieldcat to it_fieldcat. clear wa_fieldcat. END-OF-DEFINITION. hout 'CARRID' 'ID' '10' . ENDMETHOD. "BUILD_FIELDCATALOG ENDCLASS. "LCL_LAUNCHPAD_MANAGER

 

結構還蠻清楚的

 

4:實現分割器下面,類定義和實現

 

CLASS lcl_displaytl_manager DEFINITION. PUBLIC SECTION. METHODS : constructor IMPORTING parent TYPE REF TO cl_gui_container. METHODS: build_fieldcatalog EXPORTING it_fieldcat TYPE lvc_t_fcat. ENDCLASS. "lcl_displaytl_manager DEFINITION

 

實現:

 

CLASS lcl_displaytl_manager IMPLEMENTATION. METHOD constructor. CREATE OBJECT alv_grid EXPORTING i_parent = parent EXCEPTIONS error_cntl_create = 1 error_cntl_init = 2 error_cntl_link = 3 error_dp_create = 4 OTHERS = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CALL METHOD me->build_fieldcatalog IMPORTING it_fieldcat = it_fieldcat1. CALL METHOD alv_grid->set_table_for_first_display EXPORTING is_layout = gs_layout CHANGING it_outtab = it_main[] it_fieldcatalog = it_fieldcat1. "註冊一個事件 CREATE OBJECT event_receiver1. SET HANDLER event_receiver1->handle_double_click FOR alv_grid. ENDMETHOD. "constructor METHOD build_fieldcatalog. DEFINE hout. wa_fieldcat1-fieldname = &1. wa_fieldcat1-coltext = &2. wa_fieldcat1-outputlen = &3. append wa_fieldcat1 to it_fieldcat1. clear wa_fieldcat1. END-OF-DEFINITION. hout 'CONNID' 'ID' '6' . hout 'CARRNAME' '名称' '14' . hout 'FLDATE' '起飞时间' '10'. ENDMETHOD. "BUILD_FIELDCATALOG ENDCLASS. "lcl_displaytl_manager IMPLEMENTATION

 

嗯 這部分超級點單的

 

5: 實現tree/alv 的雙擊事件

CLASS lcl_tree_event_receiver DEFINITION. PUBLIC SECTION. METHODS handle_node_double_click "alv tree的双击节点 FOR EVENT node_double_click OF cl_gui_alv_tree IMPORTING node_key sender. METHODS handle_double_click "alv 双击 FOR EVENT double_click OF cl_gui_alv_grid IMPORTING e_row e_column. ENDCLASS. "lcl_tree_event_receiver DEFINITION

實現:

最主要的代碼:

read table it_order with key key = node_key into ...

之後就是數據的導入 之類的。

 

在alv 雙擊后觸發事件裏面有:leave to screen 9000  . [9000就是這個主屏幕] 

 

 

 

6. 屏幕流

主屏幕9000 包含一個tabstrip, 默認的子屏幕是0301, 第二個標簽包含alv 所在子屏幕是0400,

 

9000:

PBO: CALL SUBSCREEN subscr_menu INCLUDING sy-repid number.

PAI: CALL SUBSCREEN subscr_menu.

 

0301:

PBO:LOOP AT it_sbook WITH CONTROL tc_s CURSOR tc_s-top_line.
    MODULE sub_dispay_sbook.
    ENDLOOP.

    DESCRIBE TABLE it_sbook LINES fill"竖滚动条
    tc_s-lines fill.

PAI:LOOP AT it_sbook.
    MODULE sub_set_line_count.
    ENDLOOP.

    line_count sy-loopc.
    MODIFY it_sbook FROM wa_sbook INDEX tc_s-current_line"竖滚动条

 

0400:

PBO:

 

注:要在程序裏聲明:

CONTROLS menu_tabstrip TYPE TABSTRIP.
DATA number TYPE sy-dynnr.
menu_tabstrip-activetab 'TAB01'.
number '0300'.
"---------------------------------------------
CONTROLS tc_s TYPE TABLEVIEW USING SCREEN 0301.
DATA line_count TYPE i.

 

 

附加結果圖片:

閑的時候 做一個屏幕 分割器 、 tablecontrol 、tablestrip 、 alv oo 還有什麽? 類似于PA30 的效果吧_第2张图片

 

閑的時候 做一個屏幕 分割器 、 tablecontrol 、tablestrip 、 alv oo 還有什麽? 類似于PA30 的效果吧_第3张图片

 

 

其實還有很多交互 沒有完成,懶啦 有時間做一下吧

 

你可能感兴趣的:(閑的時候 做一個屏幕 分割器 、 tablecontrol 、tablestrip 、 alv oo 還有什麽? 類似于PA30 的效果吧)