其他分享
首页 > 其他分享> > WDA学习(6):Component Usage(Select Options)

WDA学习(6):Component Usage(Select Options)

作者:互联网

1.6 Component Usage(Select Options)

       本实例如何使用Component组件SELECT_OPTIONS。在实际应用都是多个Web Dynpro Component组成的。可以直接在之前基础上操作,也可以新建一个项目。

1.Web Dynpro Component:Z_TEST_WDA2创建Component Use。

 

选择FLIGHTLISTVIEW视图组件,点击Create Controller Usage

 

选择Component Use为SELECT_OPTIONS的

 

 

 修改Context页签

创建FLIGHT上下文节点,

 

 修改Attributes页签

创建变量M_HANDLER,类型:IF_WD_SELECT_OPTIONS;

创建变量M_WD_SELECT_OPTIONS,类型:IWCI_WDR_SELECT_OPTIONS;

 

修改Layout页签

创建GROUP类型视图控件GROUP3;

创建ViewContianerUIElement类型视图控件,这个控件可以用来显示Compnent组件的视图View。这里用来显示SELECTION_OPTION。

 

  创建BUTTON按钮类型视图控件BTN1,点击按钮获取SELECTION_OPTION值,根据条件查询flight。Action:FIND,自动生成Method:ONACTIONFIND方法。

 

创建TABLE类型视图控件TABLE1,显示查询出来的flight信息。

右键TABLE1控件->Creat Binding

 

修改Methods页签,

重写WDDOINIT方法,初始化SELECT_OPTIONS。

method WDDOINIT .
  data:lt_range_table type ref to data,
        rt_range_table type ref to data,
        read_only      type abap_bool,
        typename       type string.

  data:lr_componentcontroller type ref to ig_componentcontroller,
       l_ref_cmp_usage type ref to if_wd_component_usage.

* create the used component
 l_ref_cmp_usage = wd_this->wd_cpuse_select_options( ).
 if l_ref_cmp_usage->has_active_component( ) is initial.
   l_ref_cmp_usage->create_component( ).
 endif.

* get a pointer to the interface controller of the select options *component
 wd_this->m_wd_select_options = wd_this->wd_cpifc_select_options( ).

* init the select screen
 wd_this->m_handler =  wd_this->m_wd_select_options->init_selection_screen( ).

* create a range table that consists of this new data element
 lt_range_table = wd_this->m_handler->create_range_table( i_typename = 'S_CARR_ID' ).

* add a new field to the selection
 wd_this->m_handler->add_selection_field(
  i_id = 'S_CARR_ID'
  it_result = lt_range_table
  i_read_only = read_only ).

* create a range table that consists of this new data element
 lt_range_table = wd_this->m_handler->create_range_table( i_typename = 'S_CONN_ID' ).

* add a new field to the selection
 wd_this->m_handler->add_selection_field( i_id = 'S_CONN_ID'
  it_result = lt_range_table
  i_read_only = read_only ).
endmethod.
View Code

重写ONACTIONFIND方法,通过获取SELECT_OPTIONS值,作为条件查询flight信息。

method ONACTIONFIND .
  data: node_flights   type ref to if_wd_context_node.
  data: rt_carrid type ref to data.
  data: rt_connid type ref to data.
  data: t_flight type table of sflight.
  field-symbols: <fs_carrid> type table,
                 <fs_connid> type table.

* Retrieve the data from the select option
  rt_carrid = wd_this->m_handler->get_range_table_of_sel_field(  i_id = 'S_CARR_ID' ).
* Assign it to a field symbol
  assign rt_carrid->* to <fs_carrid>.

* Retrieve the data from the select option
  rt_connid = wd_this->m_handler->get_range_table_of_sel_field( i_id = 'S_CONN_ID' ).
* Assign it to a field symbol
  assign rt_connid->* to <fs_connid>.

* Retrieve that data from the database.  Normally it is suggested to
* encapsulate the data retrieval in a separate class.
* For simplicity, the SELECT statement has been implemented here.
  select * into corresponding fields of table t_flight from sflight
    where carrid in <fs_carrid>
    and connid in <fs_connid>.

* Bind the data to the context
  node_flights = wd_context->get_child_node( name = `FLIGHT` ).
  node_flights->bind_elements( t_flight ).

endmethod.
View Code

2.设置Window,将SELECTION_OPTION组件视图放入VIEW1

 

选择点击F4帮助小方块,找到SELECT_OPTIONS的VIEW屏幕

 

 

3.运行Web Dynpro Application,使用Selection options,点击find按钮。

 

 

Select Options组件详解

       Select Options对应接口IF_WD_SELECT_OPTIONS对象select_handler,通过这个对象配置操作Select Options。

1.获取IF_WD_SELECT_OPTIONS接口对应对象;

初始化component组件

data:lr_componentcontroller type ref to ig_componentcontroller,
       l_ref_cmp_usage type ref to if_wd_component_usage.

* create the used component
 l_ref_cmp_usage = wd_this->wd_cpuse_select_options( ).
 if l_ref_cmp_usage->has_active_component( ) is initial.
   l_ref_cmp_usage->create_component( ).
 endif.

获取IF_WD_SELECT_OPTIONS接口对应对象wd_this->m_handler;

* get a pointer to the interface controller of the select options *component
 wd_this->m_wd_select_options = wd_this->wd_cpifc_select_options( ).
* init the select screen
 wd_this->m_handler =  wd_this->m_wd_select_options->init_selection_screen( ).

2. IF_WD_SELECT_OPTIONS接口方法;

ADD_SELECTION_FIELD方法:添加select参数;

ADD_SELECTION_FIELDS方法:添加多个select参数;

GET_SELECTION_FIELD方法:获取select参数;

GET_SELECTION_FIELDS方法:获取select参数;

UPD_SELECTION_FIELD方法:更新select;

RESET_ALL_SELECTION_FIELDS方法:重置所有select参数;

RESET_SELECTION_FIELD方法:重置指定id的select参数;

CHECK_ALL_SELECTION_FIELDS方法:check所有select参数;

参数:

I_ID:select参数唯一识别标志;

I_DESCRIPTION:select参数描述;

I_WITHIN_BLOCK:ID of Enclosing Block;

I_IS_AUTO_DESCRIPTION:是否自动描述,默认为True;

IT_RESULT:结果内表,用来保存用户选择值,这个参数必须有;

I_OBLIGATORY:是否必输,默认为False;

 

I_VALUE_HELP_TYPE:指定help类型,

IF_WD_VALUE_HELP_HANDLER=>CO_PREFIX_SEARCHHELP;

IF_WD_VALUE_HELP_HANDLER=>CO_PREFIX_OVS,OVS帮助类型;

IF_WD_VALUE_HELP_HANDLER=>CO_PREFIX_APPLDEV;

IF_WD_VALUE_HELP_HANDLER=>CO_PREFIX_AUTO;

IF_WD_VALUE_HELP_HANDLER=>CO_PREFIX_NONE;

IF_WD_VALUE_HELP_HANDLER=>CO_VH_TYPE_NO_HELP,no input help;

IF_WD_VALUE_HELP_HANDLER=>CO_VH_TYPE_BACKEND,类型DDIC、QVS;

IF_WD_VALUE_HELP_HANDLER=>CO_VH_TYPE_CLOCK,类型时钟;

IF_WD_VALUE_HELP_HANDLER=>CO_VH_TYPE_CALENDAR,类型日历;

IF_WD_VALUE_HELP_HANDLER=>CO_VH_TYPE_VALUESET,值集;

 

I_VALUE_HELP_ID:help帮助唯一标识;

I_VALUE_HELP_MODE:help帮助模式,

I_VALUE_HELP_STRUCTURE:f4 help帮助对应table;

I_VALUE_HELP_STRUCTURE_FIELD:f4 help帮助对应字段;

I_HELP_REQUEST_HANDLER:handler for f4 help;

I_LOWER_CASE:是否允许小写;

I_MEMORY_ID:Memory ID for Default Value;

I_NO_EXTENSION:No Multiple Selection,默认为False;

I_NO_INTERVALS: No Intervals (Single Values Only),默认为False;

I_AS_CHECKBOX:显示为check box;

I_AS_DROPDOWN:显示为下拉选择;

IT_VALUE_SET:下拉选择值内表,类型WDY_KEY_VALUE_TABLE,注意这是一个有序且key值唯一的内表;

I_READ_ONLY:是否只读,默认False;

I_DONT_CARE_VALUE:忽略的初始值表;

I_EXPLANATION: Explanation;

I_TOOLTIP: Quick Info;

I_IS_NULLABLE:是否允许空值;

I_FORMAT_PROPERTIES:参数格式;

 

CREATE_RANGE_TABLE方法:创建Range Table

GET_RANGE_TABLE_OF_SEL_FIELD方法: 返回结果Range Table,选择的select值内表;

SET_RANGE_TABLE_OF_SEL_FIELD:设置结果Range Table,select内表,可以用来重置结果表;

 

ADD_PARAMETER_FIELD方法:添加Parameter;

ADD_PARAMETER_FIELDS方法:添加多个Parameter;

GET_PARAMETER_FIELD方法:获取Parameter;

GET_PARAMETER_FIELDS方法:获取Parameter;

SET_VALUE_OF_PARAMETER_FIELD方法:设置parameter值;

GET_VALUE_OF_PARAMETER_FIELD方法:获取parameter值;

RESET_PARAMETER_FIELD方法:重置Parameter值;

RESET_ALL_PARAMETER_FIELDS方法:重置所有Parameter值;

CHECK_ALL_PARAMETER_FIELD方法:Check所有Parameter值;

参数:

I_VALUE:Parameter值;

 

ADD_HORIZONTAL_DIVIDER方法:添加水平线;

ADD_HORIZONTAL_DIVIDERS方法:添加多个水平线;

GET_HORIZONTAL_DIVIDER方法:获取水平线;

GET_HORIZONTAL_DIVIDERS方法:获取水平线;

参数:

I_ID:唯一标识;

I_WITHIN_BLOCK:ID of Enclosing Block;

 

ADD_TEXT_LINE方法:添加文本线;

ADD_TEXT_LINES方法:添加多个文本线;

GET_TEXT_LINE方法;

GET_TEXT_LINES方法;

I_ID:唯一标识

I_WITHIN_BLOCK:ID of Enclosing Block;

I_TEXT:文本;

I_DESIGN:默认CL_WD_TEXT_VIEW=>E_DESIGN-STANDARD

IT_TEXT_LINES方法:添加多个文本线;

 

ADD_BLOCK方法:添加块;

ADD_BLOCKS方法:添加多个块;

GET_BLOCK方法;

GET_BLOCKS方法;

I_ID:唯一标识;

I_WITHIN_BLOCK:ID of Enclosing Block;

I_BLOCK_TYPE:默认MC_BLOCK_TYPE_GROUP;

I_TITLE:Block标题;

I_HIDE_IF_EMPTY:是否隐藏,如果block为空,默认False;

I_WIDTH:默认’100%’;

I_STRETCHED_HORIZONTALLY:默认为True;

 

ADD_SELECTION_SCREEN_ITEM方法:添加slection screen;

ADD_SELECTION_SCREEN_ITEMS方法;

GET_SELECTION_SCREEN_ITEM方法;

GET_SELECTION_SCREEN_ITEMS方法;

REMOVE_SELECTION_SCREEN_ITEM方法;

REMOVE_ALL_SEL_SCREEN_ITEMS方法;

CHECK_SELECTION_SCREEN方法;

                          

SET_GLOBAL_OPTIONS方法:设置全局功能;

参数:

I_DISPLAY_BTN_CANCEL:是否显示Cancel按钮;

I_DISPLAY_BTN_CHECK:是否显示Check按钮;

I_DISPLAY_BTN_RESET:是否显示Reset按钮;

I_DISPLAY_BTN_EXECUTE:是否显示Execute按钮;

 

3.创建Select option,下拉选择框,Parameter,Checkbox等;

示例代码:

DATA:lt_range_table type ref to data.
 "创建range table
 lt_range_table = wd_this->m_handler->create_range_table( i_typename = 'S_CARR_ID' ).
 "创建select option
 wd_this->m_handler->add_selection_field(
  i_id = 'ID_CARR_ID'       "id
  i_description = '航班ID' "描述
  it_result = lt_range_table "结果内表
  i_obligatory = abap_true "是否必输
  i_value_help_structure = 'SFLIGHT' "help表结构
  i_value_help_structure_field = 'CARRID' "help航班字段
  ).

 "下拉选择内表
 DATA:lt_value_set TYPE wdy_key_value_table.
 DATA:ls_value_set LIKE LINE OF lt_value_set.
 "下拉值
 ls_value_set-key = '0002'.
 ls_value_set-value = '0002'.
 APPEND ls_value_set TO lt_value_set.
 ls_value_set-key = '0005'.
 ls_value_set-value = '0005'.
 APPEND ls_value_set TO lt_value_set.
 ls_value_set-key = '0017'.
 ls_value_set-value = '0017'.
 APPEND ls_value_set TO lt_value_set.
 ls_value_set-key = '0555'.
 ls_value_set-value = '0555'.
 APPEND ls_value_set TO lt_value_set.
 "创建range table
 lt_range_table = wd_this->m_handler->create_range_table( i_typename = 'S_CONN_ID' ).
 "创建dropdown
 wd_this->m_handler->add_selection_field(
  i_id = 'ID_CONN_ID'
  i_description = 'Conn. ID'
  it_result = lt_range_table
  i_as_dropdown = abap_true
  it_value_set = lt_value_set
  i_read_only = abap_false ).

  "设置默认下拉默认值
  TYPES:BEGIN OF s_range_default,
          sign TYPE char1,
          option TYPE char2,
          low TYPE S_CONN_ID,
          high TYPE S_CONN_ID,
        END OF s_range_default.
  FIELD-SYMBOLS:<fs_default> TYPE TABLE.
  DATA:lt_default TYPE REF TO DATA.
  DATA:wa_default TYPE s_range_default.
  "设置默认值
  CREATE DATA lt_default TYPE TABLE OF s_range_default.
  ASSIGN lt_default->* TO <fs_default>.
  wa_default-low = '0002'.
  wa_default-option = 'EQ'.
  wa_default-sign = 'I'.
  APPEND wa_default TO <fs_default>.
  wd_this->m_handler->SET_RANGE_TABLE_OF_SEL_FIELD( I_ID = 'ID_CONN_ID' IT_RANGE_TABLE = lt_default ).

  "创建select option,no interval,no extension
  "PLANETYPE
  lt_range_table = wd_this->m_handler->create_range_table( i_typename = 'S_PLANETYE' ).
  wd_this->m_handler->add_selection_field(
    i_id = 'ID_PLANETYE'
    i_description = 'Plane type'
    it_result = lt_range_table
    i_read_only = abap_false
    i_no_extension = abap_true  "是否多值输入
    i_no_intervals = abap_true "是否范围输入
    i_value_help_structure = 'SFLIGHT' "help表结构
    i_value_help_structure_field = 'PLANETYPE' "help字段
  ).

  "创建range table
  lt_range_table = wd_this->m_handler->create_range_table( i_typename = 'CHAR1' ).
  "创建checkbox
  wd_this->m_handler->add_selection_field(
    i_id = 'ID_CHECK'
    i_description = 'YES/NO'
    it_result = lt_range_table
    i_as_checkbox = abap_true ).

   DATA:lr_value TYPE REF TO DATA.
   CREATE DATA lr_value TYPE SFLIGHT-FLDATE.
   lt_range_table = wd_this->m_handler->create_range_table( i_typename = 'S_DATE' ).
  "创建Parameter,日期
   wd_this->m_handler->add_parameter_field(
    i_id = 'ID_FLDATE'
    i_description = 'Flight Date'
    i_value_help_structure = 'SFLIGHT'
    i_value_help_structure_field = 'FLDATE'
    i_value = lr_value ).

   "创建横线
   wd_this->m_handler->add_horizontal_divider(
    i_id = 'ID_DIV1'
   ).

   "创建text line
   wd_this->m_handler->add_text_line(
    i_id = 'ID_TEXT_L1'
    i_text = 'text text text text text text text text'
    i_design = CL_WD_TEXT_VIEW=>E_DESIGN-HEADER1
   ).

   "创建block
   "type:mc_block_type_group;mc_block_type_tray;mc_block_type_transp_container
   wd_this->m_handler->add_block(
    i_id = 'ID_BLK1'
    i_block_type = if_wd_select_options=>mc_block_type_group
    i_title = 'BLOCK1'
    i_hide_if_empty = abap_false
    i_width = '100%'
    i_stretched_horizontally = abap_true
   ).

  "Set the Global options
  "是否显示cancel,check,reset,execute按钮
  wd_this->m_handler->set_global_options(
   I_DISPLAY_BTN_CANCEL = abap_false
   I_DISPLAY_BTN_CHECK   = abap_false
   I_DISPLAY_BTN_RESET   = abap_false
   I_DISPLAY_BTN_EXECUTE = abap_false ).
View Code

4.点击find按钮时,onactionfind方法,获取选择值;

示例代码:

  data: node_flights   type ref to if_wd_context_node.
  data: rt_table type ref to data.
  data: lv_fldate TYPE REF TO data.
  data: t_flight TYPE TABLE OF sflight.
  field-symbols: <fs_carrid> type table,
                 <fs_connid> type table,
                 <fs_planetype> TYPE table,
                 <fs_fldate> TYPE SFLIGHT-FLDATE,
                 <fs_value> TYPE table.

  "获取carrid
  rt_table = wd_this->m_handler->get_range_table_of_sel_field(  i_id = 'ID_CARR_ID' ).
  assign rt_table->* to <fs_carrid>.
  "获取connid
  rt_table = wd_this->m_handler->get_range_table_of_sel_field( i_id = 'ID_CONN_ID' ).
  assign rt_table->* to <fs_connid>.
  "获取planetype
  rt_table = wd_this->m_handler->get_range_table_of_sel_field( i_id = 'ID_PLANETYE' ).
  assign rt_table->* to <fs_planetype>.

  "获取fldate,paramter获取方式
  lv_fldate = wd_this->m_handler->get_value_of_parameter_field( i_id = 'ID_FLDATE').
  IF lv_fldate IS INITIAL.
    DATA:lv_date TYPE D.
    lv_date = sy-datum.
    GET REFERENCE OF lv_date INTO lv_fldate.
    assign lv_fldate->* to <fs_fldate>.
  ELSE.
    assign lv_fldate->* to <fs_fldate>.
  ENDIF.

  "获取check box值
  rt_table = wd_this->m_handler->get_range_table_of_sel_field( i_id = 'ID_CHECK' ).
  assign rt_table->* to <fs_value>.

  "根据选择值作为条件,筛选数据
  select * into corresponding fields of table t_flight from sflight
    where carrid in <fs_carrid>
    and connid in <fs_connid>
    and planetype in <fs_planetype>
    and fldate = <fs_fldate>.
  "context上下文绑定数据
  node_flights = wd_context->get_child_node( name = `FLIGHT` ).
  node_flights->bind_elements( t_flight ).
View Code

5.点击reset按钮时,onactionreset方法,重置选择值;

实例代码:

"重置方法
  "重置所有select
  "wd_this->m_handler->RESET_ALL_SELECTION_FIELDS( ).
  "重置单个select
  wd_this->m_handler->RESET_SELECTION_FIELD( i_id = 'ID_CARR_ID' ).
  "select,重新设置结果表
  DATA:lt_range_table TYPE REF TO data.
  lt_range_table = wd_this->m_handler->create_range_table( i_typename = 'S_CARR_ID' ).
  wd_this->m_handler->set_range_table_of_sel_field(
    i_id = 'ID_CARR_ID'
    it_range_table = lt_range_table ).

  "重置所有Parameter
  "wd_this->m_handler->RESET_ALL_PARAMETER_FIELDS( ).
  "重置单个Parameter
  "wd_this->m_handler->RESET_PARAMETER_FIELD( i_id = 'ID_FLDATE' ).
  DATA:lr_fldate TYPE REF TO data.
  CREATE DATA lr_fldate TYPE SFLIGHT-FLDATE.
  wd_this->m_handler->set_value_of_parameter_field( i_id = 'ID_FLDATE' i_value = lr_fldate ).
View Code

 

标签:WDA,wd,Component,value,range,handler,Usage,table,ID
来源: https://www.cnblogs.com/tangToms/p/12838262.html