ABAP Control Framework
ABAP屏幕组件示例Tcode:GUIT,Program: SAPM_GUITEST_PORTABLE。ABAP Control Framework可以显示GRID ALV,Picture,TextEdit, HTML,Calendar,Tree,Toolbar等。这些组件通过类实现,命名:CL_GUI_XXXX。
1.Container
Container容器父类:CL_GUI_CONTAINER;
SAP Custom Container: CL_GUI_CUSTOM_CONTAINER;
SAP Dialogbox Container: CL_GUI_DIALOGBOX_CONTAINER;
SAP Docking Container: CL_GUI_DOCKING_CONTAINER;
SAP Splitter Container: CL_GUI_SPLITTER_CONTAINER;
SAP Easy Splitter Container: CL_GUI_EASY_SPLITTER_CONTAINER;
示例:
创建各种容器,需要创建screen 100
CLASS c4_event_handler DEFINITION. PUBLIC SECTION. CLASS-METHODS:m_dialog_close FOR EVENT close OF cl_gui_dialogbox_container IMPORTING sender. ENDCLASS. CLASS c4_event_handler IMPLEMENTATION. METHOD m_dialog_close. sender->free( ). ENDMETHOD. ENDCLASS. CLASS c4 DEFINITION. PUBLIC SECTION. DATA:lo_custom_container TYPE REF TO cl_gui_custom_container. DATA:lo_dialog_container TYPE REF TO cl_gui_dialogbox_container. DATA:lo_docking_container TYPE REF TO cl_gui_docking_container. DATA:lo_splitter_container TYPE REF TO cl_gui_splitter_container. DATA:lo_easy_splitter_container TYPE REF TO cl_gui_easy_splitter_container. METHODS:init_custom_container. METHODS:init_dialog_container. METHODS:init_docking_container. METHODS:init_splitter_container. METHODS:init_easy_splitter_container. ENDCLASS. CLASS c4 IMPLEMENTATION. METHOD:init_custom_container. DATA:lv_parent TYPE REF TO cl_gui_container. DATA:lv_container_name TYPE C LENGTH 30 VALUE 'CUSTOM_CONTROL'. "控制外观和动作,cl_gui_control中ws_*定义 DATA:lv_style TYPE I VALUE cl_gui_control=>ws_sysmenu. "cl_gui_container=>LIFETIME_DEFAULT,, "LIFETIME_IMODE:leave program,leave transaction,销毁 "LIFETIME_DYNPRO:和screen保持一致,call screen,call transaction,不会销毁 DATA:lv_lifetime TYPE I VALUE cl_gui_container=>lifetime_dynpro. CREATE OBJECT lo_custom_container EXPORTING "parent container "parent = lv_parent "screen painer定义的cutom control name,必须参数 container_name = lv_container_name style = lv_style lifetime = lv_lifetime "repid = sy-repid "container所在screen "dynnr = '100' "是否关闭自动program id,dynnr no_autodef_progid_dynnr = '' EXCEPTIONS cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5. ENDMETHOD. METHOD:init_dialog_container. DATA:lv_parent TYPE REF TO cl_gui_container. DATA:lv_width TYPE I VALUE 200. DATA:lv_height TYPE I VALUE 100. DATA:lv_style TYPE I VALUE cl_gui_control=>ws_sysmenu. DATA:lv_lifetime TYPE I. DATA:lv_caption TYPE C LENGTH 30 VALUE 'title'. "METRIC_MM:millimeter;METRIC_PIXEL:pixel metric;METRIC_DEFAULT; DATA:lv_metric TYPE I VALUE cl_gui_dialogbox_container=>metric_default. "method:set_caption,设置title DATA:lv_name TYPE string VALUE 'dialog1'. "创建dialog CREATE OBJECT lo_dialog_container EXPORTING "parent = lv_parent width = lv_width height = lv_height style = lv_style repid = sy-repid dynnr = '100' lifetime = lv_lifetime "顶部距离 top = 100 "左边距离 left = 100 "标题 caption = lv_caption no_autodef_progid_dynnr = '' metric = lv_metric "dialog name name = lv_name. "设置事件 SET HANDLER c4_event_handler=>m_dialog_close FOR lo_dialog_container. "设置dialog title lo_dialog_container->set_caption( 'change title' ). ENDMETHOD. METHOD:init_docking_container. DATA:lv_parent TYPE REF TO cl_gui_container. "DOCK_AT_LEFT;DOCK_AT_TOP;DOCK_AT_BOTTOM;DOCK_AT_RIGHT DATA:lv_side TYPE I VALUE cl_gui_docking_container=>dock_at_left. "扩展,宽度高度 DATA:lv_extension TYPE I VALUE '100'. DATA:lv_style TYPE I. DATA:lv_lifetime TYPE I. "title DATA:lv_caption TYPE C LENGTH 30 VALUE 'title'. DATA:lv_metric TYPE I. "屏幕百分比,优先于extension DATA:lv_ratio TYPE I. DATA:lv_name TYPE string. "创建docking容器 CREATE OBJECT lo_docking_container EXPORTING "parent = lv_parent dynnr = '100' repid = sy-repid side = lv_side extension = lv_extension style = lv_style lifetime = lv_lifetime caption = lv_caption metric = lv_metric ratio = lv_ratio no_autodef_progid_dynnr = '' name = lv_name. "设置docking dock at lo_docking_container->dock_at( cl_gui_docking_container=>dock_at_right ). "设置docking float "PROPERTY_DOCKING;PROPERTY_FLOATING lo_docking_container->float( cl_gui_docking_container=>property_docking ). "设置extension lo_docking_container->set_extension( 100 ). "设置caption lo_docking_container->set_caption( 'change title' ). ENDMETHOD. METHOD:init_splitter_container. DATA:lv_parent TYPE REF TO cl_gui_container. DATA:lv_shell TYPE I. DATA:lv_width TYPE I VALUE 400. DATA:lv_height TYPE I VALUE 400. DATA:lv_metric TYPE C LENGTH 4. "ALIGN_AT_BOTTOM;ALIGN_AT_LEFT;ALIGN_AT_RIGHT;ALIGN_AT_TOP DATA:lv_align TYPE I VALUE cl_gui_splitter_container=>align_at_left. DATA:lv_name TYPE string. DATA:lo_control TYPE REF TO cl_gui_control. DATA:lv_result TYPE I. DATA:lo_container TYPE REF TO cl_gui_container. "生成一个两行两列的容器 CREATE OBJECT lo_splitter_container EXPORTING link_dynnr = '100' link_repid = sy-repid shellstyle = lv_shell left = 0 top = 0 width = lv_width height = lv_height metric = lv_metric align = lv_align parent = lv_parent "行,列格子 rows = 2 columns = 2 no_autodef_progid_dynnr = '' name = lv_name. "指定cell,添加control控件 lo_splitter_container->add_control( EXPORTING row = 1 column = 1 control = lo_control IMPORTING result = lv_result ). "指定cell,移除control控件 lo_splitter_container->remove_control( EXPORTING row = 1 column = 1 IMPORTING result = lv_result ). "获取指定cell,作为容器 lo_splitter_container->get_container( EXPORTING row = 1 column = 1 ). "设置border lo_splitter_container->set_border( abap_true ). "获取行,列数 lo_splitter_container->get_columns( IMPORTING result = lv_result ). lo_splitter_container->get_rows( IMPORTING result = lv_result ). "设置行列 "MODE_DESIGN;MODE_RUN "lo_splitter_container->set_column_mode( ). "lo_splitter_container->set_column_width( ). "lo_splitter_container->set_column_sash( ). "lo_splitter_container->set_row_mode( ). "lo_splitter_container->set_row_height( ). "lo_splitter_container->set_row_sash( ). ENDMETHOD. METHOD:init_easy_splitter_container. DATA:lv_metric TYPE C LENGTH 4. DATA:lv_parent TYPE REF TO cl_gui_container. DATA:lv_name TYPE string . "创建两个格子容器 CREATE OBJECT lo_easy_splitter_container EXPORTING link_dynnr = '100' link_repid = sy-repid metric = lv_metric "parent = lv_parent "0:vertical,1:horizontal orientation = 0 sash_position = 50 "1:with border,0:without with_border = 1 name = lv_name. "设置splitter bar位置 lo_easy_splitter_container->set_sash_position( 30 ). ENDMETHOD. ENDCLASS.