1. 程式人生 > 其它 >WDA基礎十二:FREE PROGRAM SH (WDA TREE)

WDA基礎十二:FREE PROGRAM SH (WDA TREE)

一個需要用TREE展示搜尋幫助的需求:

1.建立WDA程式:ZCATEGORY

 

2.Component Controller中新增節點:

(說明,此節點僅在搜尋幫助程式中使用,可以不用interface node)

3.傳入引數結構:

4.傳出引數結構:

(取tree結構中的部分欄位)

5.在Implemented Interfaces 中加入IWD_VALUE_HELP 視窗:WD_VALUE_HELP

啟用全部程式。

6.在Component Controller屬性中加入:

VALUE_HELP_LISTENER  public ref to  IF_WD_VALUE_HELP_LISTENER

方法SET_VALUE_HELP_LISTENER中實現獲取傳入引數

METHOD set_value_help_listener .
  DATA:gs_attr TYPE wdr_context_attribute_info.
  DATA:lr_attr TYPE REF TO if_wd_context_element,
       gv_name TYPE string.
  DATA lo_nd_attr TYPE REF TO if_wd_context_node.
  DATA lo_el_attr TYPE REF TO if_wd_context_element.
  DATA ls_attr TYPE wd_this->element_attr.
  DATA:lr_node   TYPE REF TO if_wd_context_node,
       lr_father TYPE REF TO if_wd_context_element.
  wd_this->value_help_listener = listener.
  gs_attr = listener->f4_attribute_info.
  lr_attr ?= listener->f4_context_element.
  CLEAR:ls_attr.

  CASE gs_attr-name.
    WHEN 'ZZSYMP_CODE'.
      ls_attr-katalogart = 'Z1'.
      gv_name = 'ZZSYMP_GROU'.
      lr_attr->get_attribute(
        EXPORTING
          name   = 'NUMBER_INT'
        IMPORTING
          value  = wd_this->flag ).
      lr_node = lr_attr->get_node( ).
      CHECK lr_node IS BOUND.
      lr_father = lr_node->get_parent_element( ).
      CHECK lr_father IS BOUND.
      lr_father->get_attribute(
        EXPORTING
          name   = 'SALES_ORG'
        IMPORTING
          value  = ls_attr-sales_org ).
    WHEN 'SYMPTOMS_CODE' .
      ls_attr-katalogart = 'Z1'.
      gv_name = 'SYMPTOMS_CODE_G'.
      lr_attr->get_attribute(
    EXPORTING
      name   = 'SALES_ORG'
    IMPORTING
      value  = ls_attr-sales_org ).
    WHEN 'ZZZSYMPTOMSCODE'.
      ls_attr-katalogart = 'Z1'.
      gv_name = 'ZZZSYMPTOMSGROUP'.

      ls_attr-sales_org = zcl_otr=>gv_sales_org.
    WHEN 'DEFECT_CODE'.
      ls_attr-katalogart = 'Z2'.
      gv_name = 'SYMPTOMS_CODE_G'.
      lr_attr->get_attribute(
    EXPORTING
      name   = 'SALES_ORG'
    IMPORTING
      value  = ls_attr-sales_org ).
    WHEN 'REPAIR_CODE'.
      ls_attr-katalogart = 'Z3'.
      gv_name = 'SYMPTOMS_CODE_G'.
      lr_attr->get_attribute(
    EXPORTING
      name   = 'SALES_ORG'
    IMPORTING
      value  = ls_attr-sales_org ).
    WHEN 'ZZSECTIONCODE'.
      ls_attr-katalogart = 'Z5'.
      gv_name = 'SYMPTOMS_CODE_G'.
      lr_attr->get_attribute(
    EXPORTING
      name   = 'SALES_ORG'
    IMPORTING
      value  = ls_attr-sales_org ).
    WHEN 'ZZAFLD00002V'.
      ls_attr-katalogart = 'Z6'.
      gv_name = 'SYMPTOMS_CODE_G'.
      lr_attr->get_attribute(
    EXPORTING
      name   = 'SALES_ORG'
    IMPORTING
      value  = ls_attr-sales_org ).
    WHEN OTHERS.
      EXIT.
  ENDCASE.

  lr_attr->get_attribute(
    EXPORTING
      name   = gv_name
    IMPORTING
      value  = ls_attr-codegr ).

  lo_nd_attr = wd_context->get_child_node( name = wd_this->wdctx_attr ).
  lo_el_attr = lo_nd_attr->get_element( ).
  lo_el_attr->set_static_attributes(
     static_attributes = ls_attr ).

ENDMETHOD.

 

READ_FOLDER

ZGRTREE Importing ZGRTREE
RESULT Returning ZGRTREET

METHOD read_folder.
  DATA lo_nd_attr TYPE REF TO if_wd_context_node.
  DATA lo_el_cate TYPE REF TO if_wd_context_element.
  DATA lt_cate TYPE wd_this->elements_cate.
  DATA ls_cate TYPE wd_this->element_cate.
  DATA:gt_zgrtext TYPE TABLE OF zgrtext,
       gw_zgrtext LIKE LINE OF gt_zgrtext.


  SELECT a~sales_org
         a~zcode_catalog
         a~zprod_category
         a~zscode_id AS code
         b~kurztext
          INTO CORRESPONDING FIELDS OF TABLE gt_zgrtext
          FROM ziriscode_config AS a
          INNER JOIN qpct AS b
          ON a~zcode_catalog = b~katalogart
          AND a~zprod_category = b~codegruppe
          AND a~zscode_id = b~code
          WHERE a~sales_org = zgrtree-sales_org
          AND   a~zcode_catalog = zgrtree-zcode_catalog
          AND   a~zprod_category = zgrtree-zprod_category
          AND   a~zfcode_id      = zgrtree-name
          AND   b~sprache = sy-langu.

  SORT gt_zgrtext.
  DELETE ADJACENT DUPLICATES FROM gt_zgrtext COMPARING ALL FIELDS.
  LOOP AT gt_zgrtext INTO gw_zgrtext.
    ls_cate-name = gw_zgrtext-code.
    ls_cate-path = zgrtree-name && '/' && gw_zgrtext-code.
    ls_cate-PARENT_PATH = zgrtree-name.
    ls_cate-text = gw_zgrtext-kurztext.
    ls_cate-is_expanded = abap_false.
    ls_cate-is_leaf = abap_true.
    ls_cate-sales_org = gw_zgrtext-sales_org.
    ls_cate-zcode_catalog = gw_zgrtext-zcode_catalog.
    ls_cate-zprod_category = gw_zgrtext-zprod_category.
    APPEND ls_cate TO lt_cate.
  ENDLOOP.

  RESULT = lt_cate.

ENDMETHOD.

BROWSER ->TREE_BY_KEY_COL.CATE

                   onSelect->SELECT

MIME_TYPE->TREE_BY_KEY_COL.CATE.TEXT

BROWSER_NAME->childrenLoaded

                             ->expanded

                             ->isLeaf

                             ->parentKey->TREE_BY_KEY_COL.CATE.PARENT_PATH

                             ->rowKey    ->TREE_BY_KEY_COL.CATE.PATH

onLoadChildren->LOAD_FOLDER

BROWSER_NAME_INPUT->TREE_BY_KEY_COL.CATE.NAME

 

WDDOINIT:

METHOD wddoinit .
  DATA lo_nd_cate TYPE REF TO if_wd_context_node.
  DATA lt_cate TYPE wd_this->elements_cate.
  DATA ls_cate TYPE wd_this->element_cate.
  DATA:gt_zgrtext TYPE TABLE OF zgrtext,
       gw_zgrtext LIKE LINE OF gt_zgrtext.
  lo_nd_cate = wd_context->get_child_node( name = wd_this->wdctx_cate ).
  DATA lo_nd_attr TYPE REF TO if_wd_context_node.
  DATA lo_el_attr TYPE REF TO if_wd_context_element.
  DATA ls_attr TYPE wd_this->element_attr.

  lo_nd_attr = wd_context->get_child_node( name = wd_this->wdctx_attr ).
  lo_el_attr = lo_nd_attr->get_element( ).
  lo_el_attr->get_static_attributes(
    IMPORTING
      static_attributes = ls_attr ).

  SELECT a~zfcode_id AS codegr
             a~sales_org
             a~zcode_catalog
             a~zprod_category
             b~kurztext AS kurztext
         INTO CORRESPONDING FIELDS OF TABLE gt_zgrtext
         FROM ziriscode_config AS a
        INNER JOIN qpct AS b
        ON a~zcode_catalog = b~katalogart
        AND a~zprod_category = b~codegruppe
        AND a~zfcode_id = b~code
        WHERE a~sales_org = ls_attr-sales_org
        AND   a~zcode_catalog = ls_attr-katalogart
        AND   a~zprod_category = ls_attr-codegr
        AND   b~sprache = sy-langu.
  SORT gt_zgrtext.
  DELETE ADJACENT DUPLICATES FROM gt_zgrtext COMPARING ALL FIELDS.
  LOOP AT gt_zgrtext INTO gw_zgrtext.
    ls_cate-name = gw_zgrtext-codegr.
    ls_cate-path = gw_zgrtext-codegr.
    ls_cate-text = gw_zgrtext-kurztext.
    ls_cate-is_expanded = abap_false.
    ls_cate-is_leaf = abap_false.
    ls_cate-sales_org = gw_zgrtext-sales_org.
    ls_cate-zcode_catalog = gw_zgrtext-zcode_catalog.
    ls_cate-zprod_category = gw_zgrtext-zprod_category.
    APPEND ls_cate TO lt_cate.
  ENDLOOP.
  lo_nd_cate->bind_table( new_items = lt_cate set_initial_elements = abap_true ).


ENDMETHOD.
METHOD onactionselect .
  DATA:lr_context TYPE REF TO if_wd_context_element.
  DATA lo_nd_grcode TYPE REF TO if_wd_context_node.
  DATA lo_el_grcode TYPE REF TO if_wd_context_element.
  DATA ls_grcode TYPE wd_this->element_grcode.
  DATA:gw_code TYPE zgrtree.

  CLEAR:ls_grcode,gw_code.

  lr_context = wdevent->get_context_element( name = 'NEW_LEAD_SELECTION' ).
  lr_context->get_static_attributes(
    IMPORTING
      static_attributes = gw_code ).

  lo_nd_grcode = wd_context->get_child_node( name = wd_this->wdctx_grcode ).
  lo_el_grcode = lo_nd_grcode->get_element( ).
  ls_grcode-sales_org = gw_code-sales_org.
  ls_grcode-zcode_catalog = gw_code-zcode_catalog.
  ls_grcode-zprod_category = gw_code-zprod_category.
  ls_grcode-code = gw_code-name.
  ls_grcode-kurztext = gw_code-text.

  IF wd_comp_controller->flag <> ''.
    ls_grcode-kurztext = wd_comp_controller->flag.
    ls_grcode-zcode_catalog = '11'.
  ENDIF.

  lo_el_grcode->set_static_attributes(
     static_attributes = ls_grcode ).


  wd_comp_controller->fire_vh_data_selected_evt( ).
  wd_comp_controller->value_help_listener->close_window( ).
ENDMETHOD.

 

 

METHOD onactionload_folder.
  DATA componentcontroller_ref TYPE REF TO ig_componentcontroller.
*  data folder_entries          type wdr_example_mime_entry_tab.
  DATA folder_entries          TYPE TABLE OF zgrtree.
  DATA url_path                TYPE string.
  DATA element                 TYPE REF TO if_wd_context_element.
  DATA context_node            TYPE REF TO if_wd_context_node.
  DATA:gs_node TYPE zgrtree.

* Get URL Path of folder to read
  element = wd_context->path_get_element( path ).
  element->get_attribute( EXPORTING name = 'PATH'
                          IMPORTING value = url_path ).
  element->set_attribute( EXPORTING name = 'CHILDREN_LOADED'
                                    value = abap_true ).

  element->get_static_attributes(
    IMPORTING
      static_attributes = gs_node ).


* Read folder by calling method of the component controller
  context_node = wd_context->get_child_node( 'CATE' ).
  componentcontroller_ref = wd_this->get_componentcontroller_ctr( ).

  folder_entries = componentcontroller_ref->read_folder( gs_node ).

* Append new lines
  context_node->bind_table( new_items = folder_entries
                            set_initial_elements = abap_false ).

ENDMETHOD.

 

 

在使用元件的程式中,新增元件:CODE ZCATEGORY Table with Tree

在Component Controller中新增程式的元件引用

定義屬性:

VALUE_HELP_LISTENER   ref to IF_WD_VALUE_HELP_LISTENER

新建方法:

CODE 1 Event Handler                                                             VH_DATA_SELECTED INTERFACECONTROLLER CODE   

方法中對傳出引數處理:

METHOD code .
  DATA lo_nd_grcode TYPE REF TO if_wd_context_node.
  DATA lo_el_grcode TYPE REF TO if_wd_context_element.
  DATA ls_grcode TYPE wd_this->element_grcode.
  DATA lo_nd_l_so_header_n TYPE REF TO if_wd_context_node.
  DATA lo_el_l_so_header_n TYPE REF TO if_wd_context_element.
  DATA ls_l_so_header_n TYPE wd_this->element_l_so_header_n.
  DATA lv_symptoms_code TYPE wd_this->element_l_so_header_n-symptoms_code.
  DATA lo_nd_t_so_item_n TYPE REF TO if_wd_context_node.
  DATA lt_t_so_item_n TYPE wd_this->elements_t_so_item_n.
  DATA ls_t_so_item_n TYPE wd_this->element_t_so_item_n.
  DATA:lv_name TYPE string,
       lv_no   TYPE I.

*   navigate from <CONTEXT> to <GRCODE> via lead selection
  lo_nd_grcode = wd_context->get_child_node( name = wd_this->wdctx_grcode ).
  lo_el_grcode = lo_nd_grcode->get_element( ).

  lo_el_grcode->get_static_attributes(
    IMPORTING
      static_attributes = ls_grcode ).

  "動態確定返回引數賦值
  CASE ls_grcode-zcode_catalog.
    WHEN 'Z1'.
      lv_name = `SYMPTOMS_CODE`.
    WHEN 'Z2'.
      lv_name = `DEFECT_CODE`.
    WHEN 'Z3'.
      lv_name = `REPAIR_CODE`.
    WHEN 'Z5'.
      lv_name = `ZZSECTIONCODE`.
    WHEN 'Z6'.
      lv_name = `ZZAFLD00002V`.
    WHEN '11'."專案
      SHIFT ls_grcode-kurztext LEFT DELETING LEADING '0'.
      lv_no = ls_grcode-kurztext.
    WHEN OTHERS.
  ENDCASE.

  IF ls_grcode-zcode_catalog <> '11'.
    lo_nd_l_so_header_n = wd_context->get_child_node( name = wd_this->wdctx_l_so_header_n ).
    lo_el_l_so_header_n = lo_nd_l_so_header_n->get_element( ).
    lo_el_l_so_header_n->set_attribute(
      name =  lv_name"`SYMPTOMS_CODE`
      value = ls_grcode-code ).
  ELSE.
    lo_nd_t_so_item_n = wd_context->path_get_node( path = `L_SO_HEADER_N.T_SO_ITEM_N` ).
    lo_nd_t_so_item_n->get_static_attributes_table( IMPORTING table = lt_t_so_item_n ).
    LOOP AT lt_t_so_item_n INTO ls_t_so_item_n WHERE number_int = lv_no.
      ls_t_so_item_n-zzsymp_code = ls_grcode-code.
      MODIFY lt_t_so_item_n FROM ls_t_so_item_n.
    ENDLOOP.

    lo_nd_t_so_item_n->bind_table( new_items = lt_t_so_item_n set_initial_elements = abap_true ).

  ENDIF.


ENDMETHOD.

給節點確定搜尋幫助

 

如果是select option:

DATA lo_so_api        TYPE REF TO if_wd_controller.
  DATA lo_so_cmp        TYPE REF TO if_wd_component.
  DATA lo_so_cmp_usg_tc TYPE REF TO if_wd_component_usage_group.
  DATA lo_so_cmp_usg_emp TYPE REF TO if_wd_component_usage_group.
lo_so_api = wd_this->m_wd_select_options->wd_get_api( ).
    lo_so_cmp = lo_so_api->get_component( ).
    "門店搜尋幫助
    lo_so_cmp->remove_cmp_usage_group( 'GROUP' ).
    lo_so_cmp_usg_tc = lo_so_cmp->create_cmp_usage_group(
        name           = 'GROUP'
        used_component = 'ZGROUP' ).
    lt_range_table =
    wd_this->m_handler->create_range_table(
    i_typename = 'ZSO_SYMPTOMS_CODE' ).
* add a new field to the selection
    wd_this->m_handler->add_selection_field(
                            i_id = 'SYMPTOMS_CODE'
                            i_description = zcl_otr=>get_text( 'ZCRM/SYMCODE' )"lv_value
                            i_value_help_type = 'APPLDEV'
                            i_value_help_id = 'GROUP'
*                          i_within_block = 'SELS'
                            it_result = lt_range_table
                            i_read_only = read_only ).

 

GROUP是程式新增的元件

 

效果:

 

1.建立WDA程式:ZCATEGORY

 

2.Component Controller中新增節點:

(說明,此節點僅在搜尋幫助程式中使用,可以不用interface node)

3.傳入引數結構:

4.傳出引數結構:

(取tree結構中的部分欄位)

5.在Implemented Interfaces 中加入IWD_VALUE_HELP 視窗:WD_VALUE_HELP

啟用全部程式。

6.在Component Controller屬性中加入:

VALUE_HELP_LISTENER  public ref to  IF_WD_VALUE_HELP_LISTENER

方法SET_VALUE_HELP_LISTENER中實現獲取傳入引數

METHOD set_value_help_listener .
  DATA:gs_attr TYPE wdr_context_attribute_info.
  DATA:lr_attr TYPE REF TO if_wd_context_element,
       gv_name TYPE string.
  DATA lo_nd_attr TYPE REF TO if_wd_context_node.
  DATA lo_el_attr TYPE REF TO if_wd_context_element.
  DATA ls_attr TYPE wd_this->element_attr.
  DATA:lr_node   TYPE REF TO if_wd_context_node,
       lr_father TYPE REF TO if_wd_context_element.
  wd_this->value_help_listener = listener.
  gs_attr = listener->f4_attribute_info.
  lr_attr ?= listener->f4_context_element.
  CLEAR:ls_attr.

  CASE gs_attr-name.
    WHEN 'ZZSYMP_CODE'.
      ls_attr-katalogart = 'Z1'.
      gv_name = 'ZZSYMP_GROU'.
      lr_attr->get_attribute(
        EXPORTING
          name   = 'NUMBER_INT'
        IMPORTING
          value  = wd_this->flag ).
      lr_node = lr_attr->get_node( ).
      CHECK lr_node IS BOUND.
      lr_father = lr_node->get_parent_element( ).
      CHECK lr_father IS BOUND.
      lr_father->get_attribute(
        EXPORTING
          name   = 'SALES_ORG'
        IMPORTING
          value  = ls_attr-sales_org ).
    WHEN 'SYMPTOMS_CODE' .
      ls_attr-katalogart = 'Z1'.
      gv_name = 'SYMPTOMS_CODE_G'.
      lr_attr->get_attribute(
    EXPORTING
      name   = 'SALES_ORG'
    IMPORTING
      value  = ls_attr-sales_org ).
    WHEN 'ZZZSYMPTOMSCODE'.
      ls_attr-katalogart = 'Z1'.
      gv_name = 'ZZZSYMPTOMSGROUP'.

      ls_attr-sales_org = zcl_otr=>gv_sales_org.
    WHEN 'DEFECT_CODE'.
      ls_attr-katalogart = 'Z2'.
      gv_name = 'SYMPTOMS_CODE_G'.
      lr_attr->get_attribute(
    EXPORTING
      name   = 'SALES_ORG'
    IMPORTING
      value  = ls_attr-sales_org ).
    WHEN 'REPAIR_CODE'.
      ls_attr-katalogart = 'Z3'.
      gv_name = 'SYMPTOMS_CODE_G'.
      lr_attr->get_attribute(
    EXPORTING
      name   = 'SALES_ORG'
    IMPORTING
      value  = ls_attr-sales_org ).
    WHEN 'ZZSECTIONCODE'.
      ls_attr-katalogart = 'Z5'.
      gv_name = 'SYMPTOMS_CODE_G'.
      lr_attr->get_attribute(
    EXPORTING
      name   = 'SALES_ORG'
    IMPORTING
      value  = ls_attr-sales_org ).
    WHEN 'ZZAFLD00002V'.
      ls_attr-katalogart = 'Z6'.
      gv_name = 'SYMPTOMS_CODE_G'.
      lr_attr->get_attribute(
    EXPORTING
      name   = 'SALES_ORG'
    IMPORTING
      value  = ls_attr-sales_org ).
    WHEN OTHERS.
      EXIT.
  ENDCASE.

  lr_attr->get_attribute(
    EXPORTING
      name   = gv_name
    IMPORTING
      value  = ls_attr-codegr ).

  lo_nd_attr = wd_context->get_child_node( name = wd_this->wdctx_attr ).
  lo_el_attr = lo_nd_attr->get_element( ).
  lo_el_attr->set_static_attributes(
     static_attributes = ls_attr ).

ENDMETHOD.

 

READ_FOLDER

ZGRTREE Importing ZGRTREE
RESULT Returning ZGRTREET

METHOD read_folder.
  DATA lo_nd_attr TYPE REF TO if_wd_context_node.
  DATA lo_el_cate TYPE REF TO if_wd_context_element.
  DATA lt_cate TYPE wd_this->elements_cate.
  DATA ls_cate TYPE wd_this->element_cate.
  DATA:gt_zgrtext TYPE TABLE OF zgrtext,
       gw_zgrtext LIKE LINE OF gt_zgrtext.


  SELECT a~sales_org
         a~zcode_catalog
         a~zprod_category
         a~zscode_id AS code
         b~kurztext
          INTO CORRESPONDING FIELDS OF TABLE gt_zgrtext
          FROM ziriscode_config AS a
          INNER JOIN qpct AS b
          ON a~zcode_catalog = b~katalogart
          AND a~zprod_category = b~codegruppe
          AND a~zscode_id = b~code
          WHERE a~sales_org = zgrtree-sales_org
          AND   a~zcode_catalog = zgrtree-zcode_catalog
          AND   a~zprod_category = zgrtree-zprod_category
          AND   a~zfcode_id      = zgrtree-name
          AND   b~sprache = sy-langu.

  SORT gt_zgrtext.
  DELETE ADJACENT DUPLICATES FROM gt_zgrtext COMPARING ALL FIELDS.
  LOOP AT gt_zgrtext INTO gw_zgrtext.
    ls_cate-name = gw_zgrtext-code.
    ls_cate-path = zgrtree-name && '/' && gw_zgrtext-code.
    ls_cate-PARENT_PATH = zgrtree-name.
    ls_cate-text = gw_zgrtext-kurztext.
    ls_cate-is_expanded = abap_false.
    ls_cate-is_leaf = abap_true.
    ls_cate-sales_org = gw_zgrtext-sales_org.
    ls_cate-zcode_catalog = gw_zgrtext-zcode_catalog.
    ls_cate-zprod_category = gw_zgrtext-zprod_category.
    APPEND ls_cate TO lt_cate.
  ENDLOOP.

  RESULT = lt_cate.

ENDMETHOD.

BROWSER ->TREE_BY_KEY_COL.CATE

                   onSelect->SELECT

MIME_TYPE->TREE_BY_KEY_COL.CATE.TEXT

BROWSER_NAME->childrenLoaded

                             ->expanded

                             ->isLeaf

                             ->parentKey->TREE_BY_KEY_COL.CATE.PARENT_PATH

                             ->rowKey    ->TREE_BY_KEY_COL.CATE.PATH

onLoadChildren->LOAD_FOLDER

BROWSER_NAME_INPUT->TREE_BY_KEY_COL.CATE.NAME

 

WDDOINIT:

METHOD wddoinit .
  DATA lo_nd_cate TYPE REF TO if_wd_context_node.
  DATA lt_cate TYPE wd_this->elements_cate.
  DATA ls_cate TYPE wd_this->element_cate.
  DATA:gt_zgrtext TYPE TABLE OF zgrtext,
       gw_zgrtext LIKE LINE OF gt_zgrtext.
  lo_nd_cate = wd_context->get_child_node( name = wd_this->wdctx_cate ).
  DATA lo_nd_attr TYPE REF TO if_wd_context_node.
  DATA lo_el_attr TYPE REF TO if_wd_context_element.
  DATA ls_attr TYPE wd_this->element_attr.

  lo_nd_attr = wd_context->get_child_node( name = wd_this->wdctx_attr ).
  lo_el_attr = lo_nd_attr->get_element( ).
  lo_el_attr->get_static_attributes(
    IMPORTING
      static_attributes = ls_attr ).

  SELECT a~zfcode_id AS codegr
             a~sales_org
             a~zcode_catalog
             a~zprod_category
             b~kurztext AS kurztext
         INTO CORRESPONDING FIELDS OF TABLE gt_zgrtext
         FROM ziriscode_config AS a
        INNER JOIN qpct AS b
        ON a~zcode_catalog = b~katalogart
        AND a~zprod_category = b~codegruppe
        AND a~zfcode_id = b~code
        WHERE a~sales_org = ls_attr-sales_org
        AND   a~zcode_catalog = ls_attr-katalogart
        AND   a~zprod_category = ls_attr-codegr
        AND   b~sprache = sy-langu.
  SORT gt_zgrtext.
  DELETE ADJACENT DUPLICATES FROM gt_zgrtext COMPARING ALL FIELDS.
  LOOP AT gt_zgrtext INTO gw_zgrtext.
    ls_cate-name = gw_zgrtext-codegr.
    ls_cate-path = gw_zgrtext-codegr.
    ls_cate-text = gw_zgrtext-kurztext.
    ls_cate-is_expanded = abap_false.
    ls_cate-is_leaf = abap_false.
    ls_cate-sales_org = gw_zgrtext-sales_org.
    ls_cate-zcode_catalog = gw_zgrtext-zcode_catalog.
    ls_cate-zprod_category = gw_zgrtext-zprod_category.
    APPEND ls_cate TO lt_cate.
  ENDLOOP.
  lo_nd_cate->bind_table( new_items = lt_cate set_initial_elements = abap_true ).


ENDMETHOD.
METHOD onactionselect .
  DATA:lr_context TYPE REF TO if_wd_context_element.
  DATA lo_nd_grcode TYPE REF TO if_wd_context_node.
  DATA lo_el_grcode TYPE REF TO if_wd_context_element.
  DATA ls_grcode TYPE wd_this->element_grcode.
  DATA:gw_code TYPE zgrtree.

  CLEAR:ls_grcode,gw_code.

  lr_context = wdevent->get_context_element( name = 'NEW_LEAD_SELECTION' ).
  lr_context->get_static_attributes(
    IMPORTING
      static_attributes = gw_code ).

  lo_nd_grcode = wd_context->get_child_node( name = wd_this->wdctx_grcode ).
  lo_el_grcode = lo_nd_grcode->get_element( ).
  ls_grcode-sales_org = gw_code-sales_org.
  ls_grcode-zcode_catalog = gw_code-zcode_catalog.
  ls_grcode-zprod_category = gw_code-zprod_category.
  ls_grcode-code = gw_code-name.
  ls_grcode-kurztext = gw_code-text.

  IF wd_comp_controller->flag <> ''.
    ls_grcode-kurztext = wd_comp_controller->flag.
    ls_grcode-zcode_catalog = '11'.
  ENDIF.

  lo_el_grcode->set_static_attributes(
     static_attributes = ls_grcode ).


  wd_comp_controller->fire_vh_data_selected_evt( ).
  wd_comp_controller->value_help_listener->close_window( ).
ENDMETHOD.

 

 

METHOD onactionload_folder.
  DATA componentcontroller_ref TYPE REF TO ig_componentcontroller.
*  data folder_entries          type wdr_example_mime_entry_tab.
  DATA folder_entries          TYPE TABLE OF zgrtree.
  DATA url_path                TYPE string.
  DATA element                 TYPE REF TO if_wd_context_element.
  DATA context_node            TYPE REF TO if_wd_context_node.
  DATA:gs_node TYPE zgrtree.

* Get URL Path of folder to read
  element = wd_context->path_get_element( path ).
  element->get_attribute( EXPORTING name = 'PATH'
                          IMPORTING value = url_path ).
  element->set_attribute( EXPORTING name = 'CHILDREN_LOADED'
                                    value = abap_true ).

  element->get_static_attributes(
    IMPORTING
      static_attributes = gs_node ).


* Read folder by calling method of the component controller
  context_node = wd_context->get_child_node( 'CATE' ).
  componentcontroller_ref = wd_this->get_componentcontroller_ctr( ).

  folder_entries = componentcontroller_ref->read_folder( gs_node ).

* Append new lines
  context_node->bind_table( new_items = folder_entries
                            set_initial_elements = abap_false ).

ENDMETHOD.

 

 

在使用元件的程式中,新增元件:CODE ZCATEGORY Table with Tree

在Component Controller中新增程式的元件引用

定義屬性:

VALUE_HELP_LISTENER   ref to IF_WD_VALUE_HELP_LISTENER

新建方法:

CODE 1 Event Handler                                                             VH_DATA_SELECTED INTERFACECONTROLLER CODE   

方法中對傳出引數處理:

METHOD code .
  DATA lo_nd_grcode TYPE REF TO if_wd_context_node.
  DATA lo_el_grcode TYPE REF TO if_wd_context_element.
  DATA ls_grcode TYPE wd_this->element_grcode.
  DATA lo_nd_l_so_header_n TYPE REF TO if_wd_context_node.
  DATA lo_el_l_so_header_n TYPE REF TO if_wd_context_element.
  DATA ls_l_so_header_n TYPE wd_this->element_l_so_header_n.
  DATA lv_symptoms_code TYPE wd_this->element_l_so_header_n-symptoms_code.
  DATA lo_nd_t_so_item_n TYPE REF TO if_wd_context_node.
  DATA lt_t_so_item_n TYPE wd_this->elements_t_so_item_n.
  DATA ls_t_so_item_n TYPE wd_this->element_t_so_item_n.
  DATA:lv_name TYPE string,
       lv_no   TYPE I.

*   navigate from <CONTEXT> to <GRCODE> via lead selection
  lo_nd_grcode = wd_context->get_child_node( name = wd_this->wdctx_grcode ).
  lo_el_grcode = lo_nd_grcode->get_element( ).

  lo_el_grcode->get_static_attributes(
    IMPORTING
      static_attributes = ls_grcode ).

  "動態確定返回引數賦值
  CASE ls_grcode-zcode_catalog.
    WHEN 'Z1'.
      lv_name = `SYMPTOMS_CODE`.
    WHEN 'Z2'.
      lv_name = `DEFECT_CODE`.
    WHEN 'Z3'.
      lv_name = `REPAIR_CODE`.
    WHEN 'Z5'.
      lv_name = `ZZSECTIONCODE`.
    WHEN 'Z6'.
      lv_name = `ZZAFLD00002V`.
    WHEN '11'."專案
      SHIFT ls_grcode-kurztext LEFT DELETING LEADING '0'.
      lv_no = ls_grcode-kurztext.
    WHEN OTHERS.
  ENDCASE.

  IF ls_grcode-zcode_catalog <> '11'.
    lo_nd_l_so_header_n = wd_context->get_child_node( name = wd_this->wdctx_l_so_header_n ).
    lo_el_l_so_header_n = lo_nd_l_so_header_n->get_element( ).
    lo_el_l_so_header_n->set_attribute(
      name =  lv_name"`SYMPTOMS_CODE`
      value = ls_grcode-code ).
  ELSE.
    lo_nd_t_so_item_n = wd_context->path_get_node( path = `L_SO_HEADER_N.T_SO_ITEM_N` ).
    lo_nd_t_so_item_n->get_static_attributes_table( IMPORTING table = lt_t_so_item_n ).
    LOOP AT lt_t_so_item_n INTO ls_t_so_item_n WHERE number_int = lv_no.
      ls_t_so_item_n-zzsymp_code = ls_grcode-code.
      MODIFY lt_t_so_item_n FROM ls_t_so_item_n.
    ENDLOOP.

    lo_nd_t_so_item_n->bind_table( new_items = lt_t_so_item_n set_initial_elements = abap_true ).

  ENDIF.


ENDMETHOD.

給節點確定搜尋幫助

 

如果是select option:

DATA lo_so_api        TYPE REF TO if_wd_controller.
  DATA lo_so_cmp        TYPE REF TO if_wd_component.
  DATA lo_so_cmp_usg_tc TYPE REF TO if_wd_component_usage_group.
  DATA lo_so_cmp_usg_emp TYPE REF TO if_wd_component_usage_group.
lo_so_api = wd_this->m_wd_select_options->wd_get_api( ).
    lo_so_cmp = lo_so_api->get_component( ).
    "門店搜尋幫助
    lo_so_cmp->remove_cmp_usage_group( 'GROUP' ).
    lo_so_cmp_usg_tc = lo_so_cmp->create_cmp_usage_group(
        name           = 'GROUP'
        used_component = 'ZGROUP' ).
    lt_range_table =
    wd_this->m_handler->create_range_table(
    i_typename = 'ZSO_SYMPTOMS_CODE' ).
* add a new field to the selection
    wd_this->m_handler->add_selection_field(
                            i_id = 'SYMPTOMS_CODE'
                            i_description = zcl_otr=>get_text( 'ZCRM/SYMCODE' )"lv_value
                            i_value_help_type = 'APPLDEV'
                            i_value_help_id = 'GROUP'
*                          i_within_block = 'SELS'
                            it_result = lt_range_table
                            i_read_only = read_only ).

 

GROUP是程式新增的元件

 

效果:

 

搜尋

複製