• WDA基础十八:Select option配置


    为了省代码。。。为了方便管理WDA的查询条件。。。

    首先建配置表:

    说明:

    上面的KEY基本都是维护的维度,可以根据销售组织,根据用户组,根据组件,根据SELECT OPTION的不同。。。等等,可以根据情况而定。

    COMPONENT_NAME:wda组件名,不同的组件配置不同。

    SELOPTION:SELECT OPTION名,不同的SELECT不同配置。

    ATTRIBUTE:字段名,这里按照表字段名来处理的,方便后面做动态SQL。

    TABNAME:表名,需要查的字段对应的数据库表,也是方便后面动态SQL。

    DATAELEMENT:数据元素,创建OPTION的对象。

    TEXT:字段标签,可以是OTR翻译文本,也可以是固定文本。

    DISP_INDEX:SELECT条件的位置。

    VISIABLE:查询条件是否可见。

    MANDATORY:查询条件是否必填。

    NO_EXTENSION:没有扩展选项
    NO_INTERVALS:没有范围选择
    AS_CHECKBOX:查询条件是CHECK BOX
    AS_DROPDOWN:查询条件是下拉

    SELECT OPTION初始化:

    METHOD init_select_options .
      DATA:
        lt_range_table TYPE REF TO data,
        read_only      TYPE abap_bool.
      DATA:
        lr_componentcontroller TYPE REF TO ig_componentcontroller,
        l_ref_cmp_usage        TYPE REF TO if_wd_component_usage.
      DATA:
        display_btn_cancel  TYPE abap_bool,
        display_btn_check   TYPE abap_bool,
        display_btn_reset   TYPE abap_bool,
        display_btn_execute TYPE abap_bool.
      DATA:gt_value_set TYPE wdy_key_value_table,
           gw_value_set TYPE wdy_key_value,
           gt_type      TYPE TABLE OF crmc_proc_type_t,
           gw_type      LIKE LINE OF gt_type.
    DATA:gt_zcrmt0888 TYPE TABLE OF zcrmt0888,
           gw_zcrmt0888 LIKE LINE OF gt_zcrmt0888.
      FIELD-SYMBOLS:<tab> TYPE table.
    * create the used component
      l_ref_cmp_usage = wd_this->wd_cpuse_select_option( ).
      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_option( ).
    
    * init the select screen
      wd_this->m_handler = wd_this->m_wd_select_options->init_selection_screen( ).
    
      SELECT * INTO TABLE gt_zcrmt0888 FROM zcrmt0888.
      SORT gt_zcrmt0888 BY disp_index ASCENDING.
      LOOP AT gt_zcrmt0888 INTO gw_zcrmt0888.
        DATA:v_type TYPE string,
             v_id   TYPE string,
             v_text TYPE string.
        REFRESH:gt_value_set.
        v_type = gw_zcrmt0888-dataelement."赋值数据元素类型
        v_id = gw_zcrmt0888-attribute."赋值字段ID
        v_text = gw_zcrmt0888-text.
        IF gw_zcrmt0888-text CS 'ZCRM'."处理描述
          v_text = zcl_otr=>get_text( v_text ).
        ENDIF.
    
        lt_range_table = wd_this->m_handler->create_range_table( i_typename = v_type ).
    
        IF gw_zcrmt0888-attribute = 'PROCESS_TYPE'.
          IF wd_comp_controller->bp_current_sales_org = 'O 50000005'.
            SELECT * INTO TABLE gt_type FROM crmc_proc_type_t
              WHERE process_type IN ('ZSO2','ZSO5')
              AND   langu        = sy-langu.
          ELSE.
            SELECT * INTO TABLE gt_type FROM crmc_proc_type_t
              WHERE process_type IN ('ZSO2','ZSO3','ZSO5')
              AND   langu        = sy-langu.
          ENDIF.
          LOOP AT gt_type INTO gw_type.
            gw_value_set-key = gw_type-process_type.
            gw_value_set-value = gw_type-p_description.
            APPEND gw_value_set TO gt_value_set.
          ENDLOOP.
        ELSEIF gw_zcrmt0888-attribute = 'DELIVERD'.
          ASSIGN lt_range_table->* TO <tab>.
          ls_stat-low = 'A'.
          ls_stat-high = 'B'.
          ls_stat-sign = 'I'.
          ls_stat-option = 'BT'.
          APPEND ls_stat TO <tab>.
        ENDIF.
    
        wd_this->m_handler->add_selection_field(
                              i_id = v_id
                              i_obligatory = gw_zcrmt0888-mandatory
                              i_no_extension = gw_zcrmt0888-no_extension
                              i_no_intervals = gw_zcrmt0888-no_intervals
                              i_as_checkbox = gw_zcrmt0888-as_checkbox
                              i_as_dropdown = gw_zcrmt0888-as_dropdown
                              i_description = v_text
                              it_result = lt_range_table
                              it_value_set = gt_value_set
                              i_read_only = read_only ).
      ENDLOOP.
    
      REFRESH:gt_zcrmt0888.
    
    * adjust the global options
      wd_this->m_handler->set_global_options(
          i_display_btn_cancel  = display_btn_cancel
          i_display_btn_check   = display_btn_check
          i_display_btn_reset   = display_btn_reset
          i_display_btn_execute = display_btn_execute ).
    
    
    ENDMETHOD.

    SEARCH里处理:(部分)

    DATA: rt_object_id TYPE REF TO data.
      FIELD-SYMBOLS: <table>              TYPE table,
                     <any>                TYPE any.
    
    DATA:
           gt_zcrmt0888       TYPE TABLE OF zcrmt0888,
           gw_zcrmt0888       LIKE LINE OF gt_zcrmt0888,
           lv_id              TYPE string.
      lo_api_controller ?= wd_this->wd_get_api( ).
      lo_message_manager = lo_api_controller->get_message_manager( ).
      lo_nd_so_search = wd_context->get_child_node( name = wd_this->wdctx_so_search ).
    
      DATA:gt_range TYPE rsds_trange,
           gw_range LIKE LINE OF gt_range,
           gt_field TYPE TABLE OF zsfrange,
           gw_field LIKE LINE OF gt_field,
           gw_selec TYPE  rsdsselopt,
           gt_where TYPE TABLE OF crmt_where.
      SELECT * INTO TABLE gt_zcrmt0888 FROM zcrmt0888 WHERE visiable = 'X'.
    
      LOOP AT gt_zcrmt0888 INTO gw_zcrmt0888.
        lv_id = gw_zcrmt0888-attribute.
        rt_object_id = wd_this->m_handler->get_range_table_of_sel_field( i_id = lv_id ).
        ASSIGN rt_object_id->* TO <table>.
        LOOP AT <table> ASSIGNING <any>.
          MOVE-CORRESPONDING <any> TO gw_selec.
          APPEND gw_selec TO gw_field-selopt_t.
        ENDLOOP.
        UNASSIGN:<any>,<sales_org>.
        gw_field-fieldname = gw_zcrmt0888-attribute.
        APPEND gw_field TO gw_range-frange_t.
        CLEAR:gw_field.
      ENDLOOP.
      APPEND gw_range TO gt_range.
      CLEAR:gw_range.
    
      CALL FUNCTION 'FREE_SELECTIONS_RANGE_2_WHERE'
        EXPORTING
          field_ranges  = gt_range
        IMPORTING
          where_clauses = gt_where.

    。。。

    看看效果:

    输入查询条件,看处理结果:

    这里没配TABLENAME,都是默认的:

     

     可以根据TABLENAME分到不同的动态SQL里,然后加到常规SQL中。

  • 相关阅读:
    软件产品案例分析(团队)
    Beta 冲刺 (2/7)
    Beta 冲刺 (1/7)
    机器学习笔记
    第一次作业
    机器学习第一个次个人作业
    软工实践个人总结
    第10组 Beta版本演示
    第10组 Beta冲刺(5/5)
    第10组 Beta冲刺(4/5)
  • 原文地址:https://www.cnblogs.com/sapSB/p/11990157.html
Copyright © 2020-2023  润新知