找回密码
 立即注册
首页 业界区 业界 用配置表给WEB DYNPRO做配置报表(限十个查询条件) ...

用配置表给WEB DYNPRO做配置报表(限十个查询条件)

二艰糖 2025-9-25 10:42:51
因为用户不用GUI客户端,不能用SQVI和query,有时候需要查询某些关联表的时候就有点麻烦。
所以就想着做一个可以配置的报表,把查询字段和结果字段已经关联条件全部配置起来,这样用户要是突发奇想要查点东西,只要简单配置下就可以了。
1,新建配置表:可根据用户配置对应的组件(用户,组件,组件描述,查询from表和关联关系配置)
1.png

 2,组件配置表:根据组件,查询/结果条件,字段,字段类型,描述,表字段,查询的表,位置(可以根据S/R区分查询条件和结果字段,根据字段类型动态创建查询和结果结构和表,根据表字段,动态构建查询结果字段)
2.png

 两个配置表可以动态分配程序到用户,动态构建查询和结果,动态展示
 
3,新建WEB DYNPRO程序:ZCRM_DYNAMIC_REPORT
组件里添加ALV和SELECTION的组件
3.png

 4,组件控制器Component Controller中做动态ALV初始化(也可以在用户选择下拉报表的时候初始化)
  1. METHOD wddoinit .
  2.   DATA lo_cmp_usage TYPE REF TO if_wd_component_usage.
  3.   lo_cmp_usage =   wd_this->wd_cpuse_dynmaic_alv( ).
  4.   IF lo_cmp_usage->has_active_component( ) IS INITIAL.
  5.     lo_cmp_usage->create_component( ).
  6.   ENDIF.
  7. ENDMETHOD.
复制代码
3,1 在MAIN视图中,我们新建一个node节点,做拉下用,下拉列表里展示当前登录用户可以选择的报表
    参照上面的配置表1就可以了
4.png

 
      2添加一个查询 ViewContainerUIElement (SELECT)
      3添加一个结果展示的 ViewContainerUIElement  (ALV)
4,init中初始化拉下程序列表(init_drop 根据用户取配置表报表)
  1. METHOD wddoinit .
  2.   init_drop( ).
  3.   init_select( ).
  4. ENDMETHOD.
复制代码
  1. METHOD init_drop .
  2.   DATA: lt_value_set TYPE TABLE OF wdy_key_value,
  3.         ls_value_set TYPE wdy_key_value.
  4.   DATA:lr_node_info TYPE REF TO if_wd_context_node_info.
  5.   lr_node_info = wd_context->get_node_info( ).
  6.   lr_node_info = lr_node_info->get_child_node( `ZCRMT0209` ).
  7.   SELECT component_name AS key text AS value INTO TABLE lt_value_set FROM zcrmt0209 WHERE uname = sy-uname.
  8.   lr_node_info->set_attribute_value_set(
  9.           name = `COMPONENT_NAME`
  10.           value_set = lt_value_set ).
  11. ENDMETHOD.
复制代码
  1. METHOD init_select .
  2. **初始化select option组件
  3.   DATA:
  4.     lr_componentcontroller TYPE REF TO ig_componentcontroller,
  5.     l_ref_cmp_usage        TYPE REF TO if_wd_component_usage.
  6.   DATA:
  7.     display_btn_cancel  TYPE abap_bool,
  8.     display_btn_check   TYPE abap_bool,
  9.     display_btn_reset   TYPE abap_bool,
  10.     display_btn_execute TYPE abap_bool.
  11. * create the used component
  12.   l_ref_cmp_usage = wd_this->wd_cpuse_selection( ).
  13.   IF l_ref_cmp_usage->has_active_component( ) IS INITIAL.
  14.     l_ref_cmp_usage->create_component( ).
  15.   ENDIF.
  16. * get a pointer to the interface controller of the select options
  17. *component
  18.   wd_this->m_wd_select_options = wd_this->wd_cpifc_selection( ).
  19. * init the select screen
  20.   wd_this->m_handler =
  21.   wd_this->m_wd_select_options->init_selection_screen( ).
  22. * adjust the global options
  23.   wd_this->m_handler->set_global_options(
  24.       i_display_btn_cancel  = display_btn_cancel
  25.       i_display_btn_check   = display_btn_check
  26.       i_display_btn_reset   = display_btn_reset
  27.       i_display_btn_execute = display_btn_execute ).
  28. ENDMETHOD.
复制代码
5,根据下拉列表初始化选择条件和alv
  1. METHOD onactionselect_comp .
  2.   DATA lo_nd_zcrmt0209 TYPE REF TO if_wd_context_node.
  3.   DATA lo_el_zcrmt0209 TYPE REF TO if_wd_context_element.
  4.   DATA ls_zcrmt0209 TYPE wd_this->element_zcrmt0209.
  5. *   navigate from <CONTEXT> to <ZCRMT0209> via lead selection
  6.   lo_nd_zcrmt0209 = wd_context->get_child_node( name = wd_this->wdctx_zcrmt0209 ).
  7. *   get element via lead selection
  8.   lo_el_zcrmt0209 = lo_nd_zcrmt0209->get_element( ).
  9. *   get all declared attributes
  10.   lo_el_zcrmt0209->get_static_attributes(
  11.     IMPORTING
  12.       static_attributes = ls_zcrmt0209 ).
  13.   CHECK ls_zcrmt0209-component_name IS NOT INITIAL.
  14. **初始化select和alv
  15.   add_select( ls_zcrmt0209-component_name ).
  16.   init_alv( ls_zcrmt0209-component_name ).
  17. **控制查询清空按钮显示
  18.   DATA lo_el_context TYPE REF TO if_wd_context_element.
  19.   DATA ls_context TYPE wd_this->element_context.
  20.   DATA lv_bt_vis TYPE wd_this->element_context-bt_vis.
  21. *   get element via lead selection
  22.   lo_el_context = wd_context->get_element( ).
  23. *   @TODO fill attribute
  24.   lv_bt_vis = 'X'.
  25. *   set single attribute
  26.   lo_el_context->set_attribute(
  27.     name =  `BT_VIS`
  28.     value = lv_bt_vis ).
  29. ENDMETHOD.
复制代码
  1. METHOD add_select .
  2.   DATA:gt_zcrmt0209s TYPE TABLE OF zcrmt0209s,
  3.        gw_zcrmt0209s LIKE LINE OF gt_zcrmt0209s.
  4.   DATA:
  5.     lt_range_table TYPE REF TO data,
  6.     rt_range_table TYPE REF TO data,
  7.     read_only      TYPE abap_bool,
  8.     typename       TYPE string,
  9.     id             TYPE string,
  10.     desc           TYPE string.
  11.   wd_this->m_handler->remove_all_sel_screen_items( ).
  12. **根据选择的组件从配置表中带出查询条件并添加到select option中
  13.   SELECT * INTO TABLE gt_zcrmt0209s FROM zcrmt0209s WHERE component_name = component_name AND zusage = 'S'.
  14.   CHECK gt_zcrmt0209s[] IS NOT INITIAL.
  15.   LOOP AT gt_zcrmt0209s INTO gw_zcrmt0209s.
  16.     typename = gw_zcrmt0209s-field_type.
  17.     id = gw_zcrmt0209s-field.
  18.     desc = gw_zcrmt0209s-text.
  19. * create a range table that consists of this new data element
  20.     lt_range_table = wd_this->m_handler->create_range_table( i_typename = typename ).
  21. * add a new field to the selection
  22.     wd_this->m_handler->add_selection_field(
  23.                             i_id = id
  24.                             i_description = desc
  25.                             it_result = lt_range_table
  26.                             i_read_only = read_only ).
  27.   ENDLOOP.
  28. ENDMETHOD.
复制代码
根据配置表初始化alv字段结构并绑定到alv
  1. METHOD init_alv .
  2.   DATA:lt_child_node TYPE wdr_context_child_info_map,
  3.        ls_child_node TYPE wdr_context_child_info.
  4.   DATA:lv_name TYPE string.
  5.   DATA:gt_zcrmt0209s TYPE TABLE OF zcrmt0209s,
  6.        gw_zcrmt0209s LIKE LINE OF gt_zcrmt0209s.
  7.   DATA: ls_comp     TYPE LINE OF cl_abap_structdescr=>component_table,
  8.         lt_comp     TYPE cl_abap_structdescr=>component_table,
  9.         ls_fieldcat TYPE LINE OF lvc_t_fcat,
  10.         struct_type TYPE REF TO cl_abap_structdescr.
  11.   lt_child_node = wd_context->get_node_info( )->get_child_nodes( ).
  12. **取配置表的结果R字段,构建动态的节点,节点名就用报表名
  13.   SELECT * INTO TABLE gt_zcrmt0209s FROM zcrmt0209s WHERE component_name = component_name AND zusage = 'R'.
  14.   LOOP AT gt_zcrmt0209s INTO gw_zcrmt0209s.
  15.     ls_comp-name = gw_zcrmt0209s-field.
  16.     ls_comp-type ?= cl_abap_typedescr=>describe_by_name( gw_zcrmt0209s-field_type ).
  17.     APPEND ls_comp TO lt_comp.
  18.   ENDLOOP.
  19. * Create structure defined in lt_comp
  20.   struct_type = cl_abap_structdescr=>create( lt_comp ).
  21.   lv_name = component_name.
  22.   READ TABLE lt_child_node INTO ls_child_node WITH KEY name = lv_name.
  23.   IF sy-subrc = 0.
  24.   ELSE.
  25. * Append dynamic node with name (  )
  26.     wd_context->get_node_info( )->add_new_child_node(
  27.                             name                = lv_name
  28.                             is_mandatory        = abap_true
  29.                             is_multiple         = abap_true
  30.                             static_element_rtti = struct_type
  31.                             is_static           = abap_false ).
  32.   ENDIF.
  33. **Step 4: Assign this context to ALV
  34.   DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table .
  35.   lo_interfacecontroller =   wd_this->wd_cpifc_dynmaic_alv( ).
  36.   lo_interfacecontroller->set_data(
  37. *   only_if_new_descr =                 " wdy_boolean
  38.   r_node_data = wd_context->get_child_node( lv_name )   " ref to if_wd_context_node
  39.   ).
  40. **以下是根据配置表控制alv显示的,暂时用默认也可以,先不用
  41. *  DATA:gt_zcrmt0209s TYPE TABLE OF zcrmt0209s,
  42. *       gw_zcrmt0209s LIKE LINE OF gt_zcrmt0209s.
  43. *  DATA: lr_comp_alv    TYPE REF TO if_wd_component_usage,
  44. *        lr_comp_if_alv TYPE REF TO iwci_salv_wd_table.
  45. *  DATA: lr_column_settings TYPE REF TO if_salv_wd_column_settings,
  46. *        lr_column          TYPE REF TO cl_salv_wd_column,
  47. *        lr_column_header   TYPE REF TO cl_salv_wd_column_header.
  48. *  DATA:gv_string TYPE string.
  49. *
  50. *  DATA: lt_column TYPE salv_wd_t_column_ref,
  51. *        ls_column TYPE salv_wd_s_column_ref.
  52. *
  53. *****"定义特殊格式的类型
  54. *  DATA: lr_input_field TYPE REF TO cl_salv_wd_uie_input_field,
  55. *        lr_checkbox    TYPE REF TO cl_salv_wd_uie_checkbox,
  56. *        lr_link        TYPE REF TO cl_salv_wd_uie_link_to_action,
  57. *        lr_drop        TYPE REF TO cl_salv_wd_uie_dropdown_by_key.
  58. *  DATA lr_column_id TYPE string.
  59. *
  60. *
  61. *  CHECK gt_zcrmt0209s[] IS NOT INITIAL.
  62. *
  63. *
  64. *
  65. *
  66. *  "创建组件/实例化组件
  67. *  lr_comp_alv = wd_this->wd_cpuse_dynmaic_alv( ) .
  68. *  IF lr_comp_alv->has_active_component( ) IS INITIAL.
  69. *    lr_comp_alv->create_component( ).
  70. *  ENDIF.
  71. *
  72. *
  73. *  DATA lr_config TYPE REF TO cl_salv_wd_config_table.
  74. *  DATA:lr_func_config TYPE REF TO cl_salv_wd_config_table.
  75. *  "获取ALV对象的设置对象
  76. *  lr_comp_if_alv = wd_this->wd_cpifc_dynmaic_alv( ).
  77. *  lr_config      = lr_comp_if_alv->get_model( ).
  78. *  lr_func_config      = lr_comp_if_alv->get_model( ).
  79. *
  80. *  lr_column_settings ?= lr_config .
  81. *  lt_column = lr_column_settings->get_columns( )."获取ALV字段
  82. *  "取配置表数据
  83. *
  84. **=========================================================
  85. *
  86. *  DATA: l_value  TYPE REF TO cl_salv_wd_config_table.
  87. *
  88. *  l_value = lr_comp_if_alv->get_model( ).
  89. *  l_value->if_salv_wd_table_settings~set_fixed_table_layout( abap_false ).  "使列宽不可自动调节
  90. *  l_value->if_salv_wd_table_settings~set_width( '100%'  ) .                "设置宽度
  91. *  l_value->if_salv_wd_table_settings~set_visible_row_count( '15' ).        "显示的行数
  92. *  l_value->if_salv_wd_table_settings~set_scrollable_col_count( '10' )."设置滚动条行数
  93. *  l_value->if_salv_wd_table_settings~set_read_only( abap_false )."设置只读
  94. *  l_value->if_salv_wd_table_settings~set_display_empty_rows( abap_false )."设置空表也显示alv行
  95. *  l_value->if_salv_wd_table_settings~set_selection_mode( cl_wd_table=>e_selection_mode-multi_no_lead )."多选无lead
  96. *  l_value->if_salv_wd_function_settings~set_enabled( abap_true ) ."功能
  97. *  l_value->if_salv_wd_std_functions~set_edit_check_available( abap_false ) .
  98. *  l_value->if_salv_wd_std_functions~set_edit_insert_row_allowed( abap_false ) .
  99. *  l_value->if_salv_wd_std_functions~set_export_allowed( abap_true ) ."可excel导出
  100. **  l_value->if_salv_wd_std_functions~set_view_list_allowed( abap_false ).
  101. *  l_value->if_salv_wd_std_functions~set_pdf_allowed( abap_false ) ."可pdf导出
  102. *  l_value->if_salv_wd_std_functions~set_edit_append_row_allowed( abap_false ) .
  103. *  l_value->if_salv_wd_std_functions~set_edit_delete_row_allowed( abap_false ) .
  104. *  l_value->if_salv_wd_std_functions~set_filter_filterline_allowed( abap_true ).
  105. *  l_value->if_salv_wd_std_functions~set_filter_complex_allowed( abap_true )."多字段筛选
  106. **  l_value->if_salv_wd_std_functions~set_dialog_settings_allowed( abap_true ).
  107. *
  108. *  DATA: lr_table_settings TYPE REF TO if_salv_wd_table_settings.
  109. *  lr_table_settings ?= l_value.
  110. *  lr_table_settings->set_data_check( '01' ).
  111. *  lr_table_settings->set_read_only( abap_false ).
  112. *
  113. *  LOOP AT lt_column INTO ls_column.
  114. *    lr_column_id = ls_column-id.
  115. *    lr_column = ls_column-r_column.
  116. *
  117. *    lr_column->set_resizable( value = 'X' ).
  118. *    lr_column->set_width( value = '100' ).
  119. *
  120. *    READ TABLE gt_zcrmt0209s INTO gw_zcrmt0209s WITH KEY field = ls_column-id.
  121. *    IF sy-subrc = 0.
  122. **      IF gw_zcrmt0209s-visiable = 'X'.
  123. *      lr_column_header = ls_column-r_column->create_header( ).
  124. **        ls_column-r_column->set_position( gw_ZCRMT0209S-posit ).
  125. *      CASE gw_zcrmt0209s-field.
  126. *        WHEN 'SEL'.
  127. *          CREATE OBJECT lr_checkbox
  128. *            EXPORTING
  129. *              checked_fieldname = ls_column-id.
  130. *          ls_column-r_column->set_cell_editor( lr_checkbox ).
  131. *        WHEN 'ZZCON_TYPE'.
  132. *          CREATE OBJECT lr_drop
  133. *            EXPORTING
  134. *              selected_key_fieldname = ls_column-id.
  135. *
  136. *          lr_drop->set_read_only_fieldname( value = ls_column-id ).
  137. *
  138. *          ls_column-r_column->set_cell_editor( lr_drop ).
  139. *        WHEN 'CTYPE'.
  140. *          CREATE OBJECT lr_drop
  141. *            EXPORTING
  142. *              selected_key_fieldname = ls_column-id.
  143. **            lr_drop->set_read_only_fieldname( value = ls_column-id ).
  144. *          ls_column-r_column->set_cell_editor( lr_drop ).
  145. *        WHEN 'OBJECT_ID'.
  146. *          CREATE OBJECT lr_link.
  147. *          lr_link->set_text_fieldname( ls_column-id ).
  148. *          ls_column-r_column->set_cell_editor( lr_link ).
  149. *        WHEN 'E'.
  150. *        WHEN 'F'.
  151. *        WHEN OTHERS.
  152. *      ENDCASE.
  153. *      IF gw_zcrmt0209s-text CS 'CRM/'."otr text使用特定格式的
  154. *        gv_string = gw_zcrmt0209s-text.
  155. *        lr_column_header->set_text( zcl_otr=>get_text( gv_string ) ).
  156. *      ELSE.
  157. *        IF gw_zcrmt0209s-text IS NOT INITIAL.
  158. *          gv_string = gw_zcrmt0209s-text.
  159. *          lr_column_header->set_text( gv_string ).
  160. *        ENDIF.
  161. *      ENDIF.
  162. **      ELSE.
  163. **        ls_column-r_column->set_position( gw_zcrmt0209s-posit ).
  164. **        lr_column = lr_column_settings->get_column( ls_column-id ).
  165. **        lr_column->set_visible( if_wdl_core=>visibility_none ).
  166. **      ENDIF.
  167. *    ELSE.
  168. **      ls_column-r_column->set_position( gw_zcrmt0209s-posit ).
  169. *      lr_column = lr_column_settings->get_column( ls_column-id ).
  170. *      lr_column->set_visible( if_wdl_core=>visibility_none ).
  171. *    ENDIF.
  172. *  ENDLOOP.
  173. ENDMETHOD.
复制代码
6,查询处理,动态构建内表并展示
  1. METHOD onactionsearch .
  2.   DATA:gt_zcrmt0209s TYPE TABLE OF zcrmt0209s,
  3.        gw_zcrmt0209s LIKE LINE OF gt_zcrmt0209s,
  4.        gw_zcrmt0209  TYPE zcrmt0209.
  5.   DATA lo_nd_zcrmt0209 TYPE REF TO if_wd_context_node.
  6.   DATA lo_el_zcrmt0209 TYPE REF TO if_wd_context_element.
  7.   DATA ls_zcrmt0209 TYPE wd_this->element_zcrmt0209.
  8.   DATA: rt_object_id TYPE REF TO data,
  9.         lt_where     TYPE rsds_where_tab,
  10.         lt_from      TYPE rsds_where_tab,
  11.         lt_sql       TYPE rsds_where_tab,
  12.         lv_s         TYPE string,
  13.         lv_n         TYPE n LENGTH 2,
  14.         lv_line(70)  TYPE c.
  15.   DATA: dy_table TYPE REF TO data,
  16.         ifc      TYPE        lvc_t_fcat.
  17.   FIELD-SYMBOLS:
  18.     <fs01> TYPE table,
  19.     <fs02> TYPE table,
  20.     <fs03> TYPE table,
  21.     <fs04> TYPE table,
  22.     <fs05> TYPE table,
  23.     <fs06> TYPE table,
  24.     <fs07> TYPE table,
  25.     <fs08> TYPE table,
  26.     <fs09> TYPE table,
  27.     <fs10> TYPE table.
  28.   FIELD-SYMBOLS : <table> TYPE ANY TABLE.
  29.   DATA:lr_node TYPE REF TO if_wd_context_node.
  30. *   navigate from <CONTEXT> to <ZCRMT0209> via lead selection
  31.   lo_nd_zcrmt0209 = wd_context->get_child_node( name = wd_this->wdctx_zcrmt0209 ).
  32. *   get element via lead selection
  33.   lo_el_zcrmt0209 = lo_nd_zcrmt0209->get_element( ).
  34. *   get all declared attributes
  35.   lo_el_zcrmt0209->get_static_attributes(
  36.     IMPORTING
  37.       static_attributes = ls_zcrmt0209 ).
  38.   "根据配置表查询条件获得查询参数,限制10个条件
  39.   SELECT * INTO TABLE gt_zcrmt0209s FROM zcrmt0209s WHERE component_name = ls_zcrmt0209-component_name AND zusage = 'S'.
  40.   LOOP AT gt_zcrmt0209s INTO gw_zcrmt0209s.
  41.     CLEAR:lv_line,lv_s.
  42.     lv_n = sy-tabix.
  43.     lv_s = gw_zcrmt0209s-field.
  44.     rt_object_id = wd_this->m_handler->get_range_table_of_sel_field( i_id = lv_s ).
  45.     CASE lv_n.
  46.       WHEN '01'.
  47.         ASSIGN rt_object_id->* TO <fs01>.
  48.         IF <fs01>[] IS INITIAL.
  49.           CONTINUE.
  50.         ENDIF.
  51.       WHEN '02'.
  52.         ASSIGN rt_object_id->* TO <fs02>.
  53.         IF <fs02>[] IS INITIAL.
  54.           CONTINUE.
  55.         ENDIF.
  56.       WHEN '03'.
  57.         ASSIGN rt_object_id->* TO <fs03>.
  58.         IF <fs03>[] IS INITIAL.
  59.           CONTINUE.
  60.         ENDIF.
  61.       WHEN '04'.
  62.         ASSIGN rt_object_id->* TO <fs04>.
  63.         IF <fs04>[] IS INITIAL.
  64.           CONTINUE.
  65.         ENDIF.
  66.       WHEN '05'.
  67.         ASSIGN rt_object_id->* TO <fs05>.
  68.         IF <fs05>[] IS INITIAL.
  69.           CONTINUE.
  70.         ENDIF.
  71.       WHEN '06'.
  72.         ASSIGN rt_object_id->* TO <fs06>.
  73.         IF <fs06>[] IS INITIAL.
  74.           CONTINUE.
  75.         ENDIF.
  76.       WHEN '07'.
  77.         ASSIGN rt_object_id->* TO <fs07>.
  78.         IF <fs07>[] IS INITIAL.
  79.           CONTINUE.
  80.         ENDIF.
  81.       WHEN '08'.
  82.         ASSIGN rt_object_id->* TO <fs08>.
  83.         IF <fs08>[] IS INITIAL.
  84.           CONTINUE.
  85.         ENDIF.
  86.       WHEN '09'.
  87.         ASSIGN rt_object_id->* TO <fs09>.
  88.         IF <fs09>[] IS INITIAL.
  89.           CONTINUE.
  90.         ENDIF.
  91.       WHEN '10'.
  92.         ASSIGN rt_object_id->* TO <fs10>.
  93.         IF <fs10>[] IS INITIAL.
  94.           CONTINUE.
  95.         ENDIF.
  96.       WHEN OTHERS.
  97.     ENDCASE.
  98.     "动态查询条件,第二次拼接需要添加and
  99.     CONCATENATE '<fs' lv_n '>' INTO lv_line.
  100.     IF lt_where[] IS INITIAL.
  101.       CONCATENATE gw_zcrmt0209s-name_on_db 'IN' lv_line INTO lv_line SEPARATED BY space.
  102.     ELSE.
  103.       CONCATENATE 'AND' gw_zcrmt0209s-name_on_db 'IN' lv_line INTO lv_line SEPARATED BY space.
  104.     ENDIF.
  105.     APPEND lv_line TO lt_where.
  106.   ENDLOOP.
  107.   CHECK lt_where[] IS NOT INITIAL.
  108.   DATA:lv_name TYPE string.
  109.   SELECT name_on_db INTO TABLE lt_sql FROM zcrmt0209s WHERE component_name = ls_zcrmt0209-component_name AND zusage = 'R'.
  110.   "根据配置字段属性,构建动态内表
  111.   SELECT dd03l~fieldname dd03l~inttype dd03l~leng AS intlen dd03l~decimals INTO CORRESPONDING FIELDS OF TABLE ifc FROM dd03l INNER JOIN zcrmt0209s
  112.     ON zcrmt0209s~field = dd03l~fieldname AND zcrmt0209s~dbtabname = dd03l~tabname
  113.     WHERE zcrmt0209s~component_name = ls_zcrmt0209-component_name AND zusage = 'R'.
  114.   CALL METHOD cl_alv_table_create=>create_dynamic_table
  115.     EXPORTING
  116.       it_fieldcatalog = ifc
  117.     IMPORTING
  118.       ep_table        = dy_table.
  119.   ASSIGN dy_table->* TO <table>.
  120. **另一种动态构建内表的方法
  121. *  DATA: ls_comp     TYPE LINE OF cl_abap_structdescr=>component_table,
  122. *        lt_comp     TYPE cl_abap_structdescr=>component_table,
  123. *        ls_fieldcat TYPE LINE OF lvc_t_fcat,
  124. *        struct_type TYPE REF TO cl_abap_structdescr.
  125. *  SELECT * INTO TABLE gt_zcrmt0209s FROM zcrmt0209s WHERE component_name = ls_zcrmt0209-component_name AND zusage = 'R'.
  126. *  LOOP AT gt_zcrmt0209s INTO gw_zcrmt0209s.
  127. *    ls_comp-name = gw_zcrmt0209s-field.
  128. *    ls_comp-type ?= cl_abap_typedescr=>describe_by_name( gw_zcrmt0209s-field_type ).
  129. *    APPEND ls_comp TO lt_comp.
  130. *  ENDLOOP.
  131. *
  132. ** Create structure defined in lt_comp
  133. *  struct_type = cl_abap_structdescr=>create( lt_comp ).
  134. *  DATA p_result     TYPE REF TO cl_abap_tabledescr.
  135. *
  136. *  p_result = cl_abap_tabledescr=>create(
  137. *      p_line_type  = CAST #( struct_type )
  138. *       p_table_kind = cl_abap_tabledescr=>tablekind_std ).
  139. *  DATA: table TYPE REF TO data.
  140. *  CREATE DATA table TYPE HANDLE p_result.
  141. *  ASSIGN table->* TO <table>.
  142.   "查询表连接处理
  143.   SELECT SINGLE * INTO gw_zcrmt0209 FROM zcrmt0209 WHERE uname = sy-uname AND component_name = ls_zcrmt0209-component_name.
  144.   CHECK gw_zcrmt0209-fromcond IS NOT INITIAL.
  145.   SPLIT gw_zcrmt0209-fromcond AT '/' INTO TABLE lt_from.
  146.   "动态查询
  147.   SELECT (lt_sql)
  148.     INTO CORRESPONDING FIELDS OF TABLE <table>
  149.     FROM (lt_from)
  150.     WHERE (lt_where).
  151.   lv_name = ls_zcrmt0209-component_name.
  152.   "绑定结果到node显示
  153.   lr_node = wd_context->get_child_node( name = lv_name ).
  154.   lr_node->bind_table( new_items = <table> set_initial_elements = abap_true ).
  155. ENDMETHOD.
复制代码
 
 
效果展示:
配置数据:
5.png

6.png

 
7.gif

 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

2025-10-18 14:32:29

举报

2025-12-1 05:30:39

举报

感谢发布原创作品,程序园因你更精彩
2026-1-18 13:35:47

举报

感谢发布原创作品,程序园因你更精彩
2026-1-26 06:44:02

举报

2026-2-8 15:01:57

举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册