使用数据库表中的数据进行自定义弹出

时间:2019-07-29 06:46:08

标签: abap sap-crm

我需要从数据库表字段(Tab1-camp_type)创建弹出窗口,并提供数据。 此刻,我创建了UI组件(ZUIC_TYPES),表视图(VWTYPES)并添加了必要表字段。 在我的上下文节点的DO_PREPARE_OUTPUT方法中,我编写了代码,该代码应该给我Camp_type字段中的所有值,但我只能得到一个重复37次的值(表中有37行)。 如何获取所有数据并将其放入弹出窗口? 这是我的代码:

 DATA:lr_table     TYPE REF TO crmc_mktpl_ctype,
         lr_struct    TYPE crmc_mktpl_ctype,

         lt_tabledata TYPE TABLE OF crmc_mktpl_ctype,
         ls_tabledata LIKE LINE OF lt_tabledata,

         lr_camptype  TYPE REF TO cl_bsp_wd_value_node,
         lr_col       TYPE REF TO cl_crm_bol_bo_col.

    "fetch the data.
    SELECT DISTINCT camp_type FROM crmc_mktpl_ctype INTO CORRESPONDING FIELDS OF TABLE lt_tabledata.
    CHECK sy-subrc = 0.

    "create collection object.
    CREATE OBJECT lr_col.

    CREATE DATA lr_table.
    "create one empty value node with the required structure.
    CREATE OBJECT lr_camptype
      EXPORTING
        iv_data_ref = lr_table.

    "create value node for each record foound.
    LOOP AT lt_tabledata INTO ls_tabledata.
      "set the data into the value node.
      lr_camptype->if_bol_bo_property_access~set_properties( is_attributes = ls_tabledata ).
      "add node to the collection.
      lr_col->if_bol_bo_col~add( lr_camptype ).
    ENDLOOP.

    "all records are processed. set the collection to the collection wrapper of context node to make it visible on web ui
    me->typed_context->camptype->collection_wrapper->set_collection( lr_col ).

1 个答案:

答案 0 :(得分:2)

在循环之前,您仅创建了一个节点(lr_camptype),因此您要多次添加同一节点。请记住,在每个循环中,您都向同一个对象添加了一个引用,因此在以后对其进行处理时,该对象将仅包含最新值。

您应该通过在LOOP内移动节点的创建来每行创建一个节点,如下所示:

...
"create collection object.
CREATE OBJECT lr_col.

CREATE DATA lr_table.

"create value node for each record found.
LOOP AT lt_tabledata INTO ls_tabledata.

  "create one empty value node with the required structure.
  CREATE OBJECT lr_camptype                                 " <=== must be inside the loop !
  EXPORTING
    iv_data_ref = lr_table.

  "set the data into the value node.
  lr_camptype->if_bol_bo_property_access~set_properties( is_attributes = ls_tabledata ).

  "add node to the collection.
  lr_col->if_bol_bo_col~add( lr_camptype ).

ENDLOOP.
...