1

我需要显示一个弹出窗口,其中包含来自我的数据库表字段 ( 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 ).
4

2 回答 2

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.
...
于 2019-07-29T07:43:26.843 回答
0
  • 创建 Z-UI 组件。
  • 通过向导创建视图(类型:表)(在创建视图时选择必要的表和字段)。
  • 将您的视图绑定到窗口。
  • 为您的 Z 窗口创建组件接口。
  • INDO_PREPARE_OUTPUT方法写下这段代码:
   TYPES: BEGIN OF ltype_attr_struct,
            camp_type   TYPE crm_mktpl_camptype,
            description TYPE crm_mktpl_camptypetx, "Added by wizard
          END OF ltype_attr_struct.

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

         lt_tabledata TYPE TABLE OF ltype_attr_struct,
         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
     A~camp_type,
     B~description
   FROM TabA AS A INNER JOIN
        TabB AS B ON A~camp_type = B~camp_type AND B~langu = 'EN'
   INTO 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( NEW cl_bsp_wd_value_node( iv_data_ref = REF ltype_attr_struct( ls_tabledata ) ) ).

   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->set_collection( lr_col ).
   me->typed_context->camptype->build_table( ).
  • 在标准组件(从您要调用弹出窗口的位置)中,为您的 InterfaceView 创建组件用法并在您的按钮事件中放置代码:
gr_popup = me->comp_controller->window_manager->create_popup( iv_interface_view_name = 'ZUIC_CAMP_TYPES/MainWindow'
                                                                    iv_usage_name =  'ZCUTypes'
                                                                    iv_title = 'Title' ).

      gr_popup->set_window_width( iv_width = 400 ).
      gr_popup->set_window_height( iv_height = 600 ).

      gr_popup->set_on_close_event( iv_event_name = 'PP_CTYPE_CLOSED'
                                    iv_view = me ).

      gr_popup->set_display_mode( if_bsp_wd_popup=>c_display_mode_surrounded ).
      gr_popup->open( ).

PS: GR_POPUP Instance Attribute Public Type Ref To IF_BSP_WD_POPUP。gr_popup 它是类的属性。

于 2019-07-30T06:51:01.027 回答