WDA学习(7):OVS Help in WDA

1.8.OVS Help in WDA

       OVS(Object Value Selector)对象值选择器,通过Component Usage使用。对应Web Dynpro Component:WDR_OVS。

1.创建Web Dynpro Component。

 

Component Usage:WDR_OVS

 

2.设置MAIN视图组件。

Context页签,创建上下文

 

设置Context的CARRID字段使用OVS

Input Help Mode设置为Object Value Selector;

OVS Component Usage:设置为OVS;

 

Layout页签:

创建Table视图控件,Create Binding,绑定上下文;

 

Properties页签

设置MAIN视图组件Used Contorller/Components

 

Methods页签

创建ON_OVS方法,类型为Event Handler,事件回调函数,Event栏位点击帮助小方块,选择Event:OVS

 

默认生成Method:ON_OVS代码,但是需要修改:

method ON_OVS .
* declare data structures for the fields to be displayed and
* for the table columns of the selection list, if necessary
  types:
    begin of lty_stru_input,
      "自定义查询字段search input
      carrid type SFLIGHT-CARRID,
      connid TYPE SFLIGHT-CONNID,
      fldate TYPE SFLIGHT-FLDATE,
    end of lty_stru_input.
  types:
    begin of lty_stru_list,
      "自定义显示查询结果selection list
      carrid type SFLIGHT-CARRID,
      connid TYPE SFLIGHT-CONNID,
      fldate TYPE SFLIGHT-FLDATE,
      currency TYPE SFLIGHT-CURRENCY,
    end of lty_stru_list.

  data: ls_search_input  type lty_stru_input,
        lt_select_list   type standard table of lty_stru_list,
        ls_text          type wdr_name_value,
        lt_label_texts   type wdr_name_value_list,
        lt_column_texts  type wdr_name_value_list,
        lv_window_title  type string,
        lv_table_header  type string.

  DATA: gs_where TYPE C LENGTH 72.
  DATA: gt_where LIKE TABLE OF gs_where.
  DATA: l_line TYPE I.

  field-symbols: <ls_query_params> type lty_stru_input,
                 <ls_selection>    type lty_stru_list.

  case ovs_callback_object->phase_indicator.

      "阶段0:配置ovs组件.
      "M_OVS_CALLBACK_OBJECT是IF_WD_OVS接口对象
      "提供SET_CONFIGURATION方法
      "TABLE_MULTI_SELECT:设置是否多行选择,abap_boolean
      "WINDOW_TITLE:设置窗口标题
      "LABEL_TEXTS:查询字段表,WDR_NAME_VALUE_LIST
      "COLUMN_TEXTS:结果字段表,WDR_NAME_VALUE_LIST
      "TABLE_HEADER:结果表头
    when if_wd_ovs=>co_phase_0.  "configuration phase, may be omitted
*   in this phase you have the possibility to define the texts,
*   if you do not want to use the defaults (DDIC-texts)

      ls_text-name = `CARRID`.  "must match a field name of search
      ls_text-value = `Airline Code`.
      insert ls_text into table lt_label_texts.
      ls_text-name = `CONNID`.  "must match a field name of search
      ls_text-value = `Flight Number`.
      insert ls_text into table lt_label_texts.
      ls_text-name = `FLDATE`.  "must match a field name of search
      ls_text-value = `Flight Date`.
      insert ls_text into table lt_label_texts.

      ls_text-name = `CARRID`.  "must match a field in list structure
      ls_text-value = `Airline Code`.
      insert ls_text into table lt_column_texts.
      ls_text-name = `CONNID`.  "must match a field in list structure
      ls_text-value = `Flight Number`.
      insert ls_text into table lt_column_texts.
      ls_text-name = `FLDATE`.  "must match a field in list structure
      ls_text-value = `Flight Date`.
      insert ls_text into table lt_column_texts.
      ls_text-name = `CURRENCY`.  "must match a field in list structure
      ls_text-value = `Currency of Flight`.
      insert ls_text into table lt_column_texts.

      lv_window_title = 'window title'.
      lv_table_header = 'table header'.

      ovs_callback_object->set_configuration(
                label_texts  = lt_label_texts
                column_texts = lt_column_texts
                window_title = lv_window_title
                table_header = lv_table_header
                table_multi_select = abap_false ).


    when if_wd_ovs=>co_phase_1.  "set search structure and defaults
*   In this phase you can set the structure and default values
*   of the search structure. If this phase is omitted, the search
*   fields will not be displayed, but the selection table is
*   displayed directly.
*   Read values of the original context (not necessary, but you
*   may set these as the defaults). A reference to the context
*   element is available in the callback object.

      ovs_callback_object->context_element->get_static_attributes(
          importing static_attributes = ls_search_input ).
*     pass the values to the OVS component
      ovs_callback_object->set_input_structure(
          input = ls_search_input ).


    when if_wd_ovs=>co_phase_2.
*   If phase 1 is implemented, use the field input for the
*   selection of the table.
*   If phase 1 is omitted, use values from your own context.

      if ovs_callback_object->query_parameters is not bound.
******** TODO exception handling
      endif.
      assign ovs_callback_object->query_parameters->* to <ls_query_params>.
      if not <ls_query_params> is assigned.
******** TODO exception handling
      endif.
*     call business logic for a table of possible values
      "根据用户筛选条件,筛选结果
      IF <ls_query_params>-carrid IS NOT INITIAL.
        gs_where = 'CARRID = ' && ' ''' && <ls_query_params>-carrid && ''''.
        APPEND gs_where TO gt_where.
        gs_where = ' AND'.
        APPEND gs_where TO gt_where.
      ENDIF.
      IF <ls_query_params>-connid IS NOT INITIAL.
        gs_where = 'CONNID = ' && ' ''' && <ls_query_params>-connid && ''''.
        APPEND gs_where TO gt_where.
        gs_where = ' AND'.
        APPEND gs_where TO gt_where.
      ENDIF.
      IF <ls_query_params>-fldate IS NOT INITIAL.
        gs_where = 'CONNID = ' && ' ''' && <ls_query_params>-fldate && ''''.
        APPEND gs_where TO gt_where.
        gs_where = ' AND'.
        APPEND gs_where TO gt_where.
      ENDIF.

      "去掉最后一条and记录
      DESCRIBE TABLE gt_where LINES l_line.
      LOOP AT gt_where INTO gs_where.
        IF sy-tabix = l_line AND gs_where = ' AND'.
          DELETE gt_where INDEX l_line.
        ENDIF.
      ENDLOOP.

      "根据条件动态查询
      SELECT * FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLE lt_select_list WHERE (gt_where).
      "设置查询到数据
      ovs_callback_object->set_output_table( output = lt_select_list ).

    when if_wd_ovs=>co_phase_3.
*   apply result
      if ovs_callback_object->selection is not bound.
******** TODO exception handling
      endif.

      assign ovs_callback_object->selection->* to <ls_selection>.
      if <ls_selection> is assigned.
        ovs_callback_object->context_element->set_attribute(
                               name  = `CARRID`
                               value = <ls_selection>-carrid ).
*        ovs_callback_object->context_element->set_static_attributes(
*                               static_attributes = <ls_selection> ).
      endif.
  endcase.

endmethod.
View Code

OVS组件回调会有四个阶段:

第一阶段:设置OVS帮助组件弹出框的标题,帮助的查询筛选字段,设置结果表栏位等;

第二阶段:设置OVS帮助组件弹出框,初始化输入筛选条件;

第三阶段:根据用户输入条件,筛选出结果;

第四阶段:用户选择筛选出的记录,将所需栏位设置到帮助触发页面;

3.创建Web Dynpro Application,运行应用。

 

输入筛选条件

 

选择筛选出来的数据

 

 将所选记录所需栏位值设置到触发帮助的栏位

 

posted @ 2020-05-06 19:15  渔歌晚唱  阅读(450)  评论(0编辑  收藏  举报