博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
创建动态节点和动态Table
阅读量:4594 次
发布时间:2019-06-09

本文共 9572 字,大约阅读时间需要 31 分钟。

创建一个组件:Y_DYNAMIC_CONTEXT_TABLE

            视图:V_MAIN

           窗口:V_MAIN

视图中添加控件Group:GRP 设置参数参考图

创建方法

初始化

METHOD wddoinit .  create_context_inetab( )."创建动态节点和动态内表  create_table( )."创建动态Table  get_data( )."获取数据ENDMETHOD.

创建动态节点和动态内表

METHOD create_context_inetab .*★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★*创建动态内表*★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★  DATA:lt_fcat TYPE lvc_t_fcat,       ls_fcat TYPE lvc_s_fcat.  ls_fcat-col_pos         = 1.       " 顺序  ls_fcat-fieldname       = 'CARRID'. " 列名-参考字段  ls_fcat-ref_field       = 'CARRID'.     " 参考字段  ls_fcat-ref_table       = 'SPFLI'.      " 参考表  APPEND ls_fcat TO lt_fcat.  CLEAR ls_fcat.  ls_fcat-col_pos         = 1.       " 顺序  ls_fcat-fieldname       = 'CONNID'. " 列名-参考字段  ls_fcat-ref_field       = 'CONNID'.     " 参考字段  ls_fcat-ref_table       = 'SPFLI'.      " 参考表  APPEND ls_fcat TO lt_fcat.  CLEAR ls_fcat.  create_dynamic_intab( EXPORTING it_fcat = lt_fcat                        IMPORTING tt_dat  = wd_this->lt_tab )."返回內表*★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★*创建动态节点*★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★  DATA:lt_components  TYPE cl_abap_structdescr=>component_table,       ls_component   TYPE cl_abap_structdescr=>component,       lr_type        TYPE REF TO cl_abap_datadescr.  ls_component-name = 'CARRID'."为结构新增一个成员  lr_type ?= cl_abap_typedescr=>describe_by_name( p_name = 'S_CARR_ID' ).  ls_component-type = lr_type."新增成员的类型对象  APPEND ls_component TO lt_components.  CLEAR ls_component.  ls_component-name = 'CONNID'."为结构新增一个成员  lr_type ?= cl_abap_typedescr=>describe_by_name( p_name = 'S_CONN_ID' ).  ls_component-type = lr_type."新增成员的类型对象  APPEND ls_component TO lt_components.  CLEAR ls_component.  create_dynamic_context( EXPORTING node_name     = 'NODE_SPFLI'                                    it_components = lt_components ).ENDMETHOD.

方法:create_dynamic_intab

参数

METHOD create_dynamic_intab .  DATA:wa_fcat TYPE lvc_s_fcat.  TYPES:BEGIN OF ty_dyndata,          fieldname TYPE fieldname,          data_type TYPE string,        END OF ty_dyndata,        ty_t_dyndata TYPE STANDARD TABLE OF ty_dyndata.  DATA:    lt_dyndata     TYPE ty_t_dyndata,    lo_structdescr TYPE REF TO cl_abap_structdescr,    lo_typedescr   TYPE REF TO cl_abap_typedescr,    lo_tabledescr  TYPE REF TO cl_abap_tabledescr,    lr_data        TYPE REF TO data,    lr_dyntable    TYPE REF TO data,    lt_component   TYPE cl_abap_structdescr=>component_table.  FIELD-SYMBOLS:    
TYPE ty_dyndata,
TYPE LINE OF cl_abap_structdescr=>component_table,
TYPE table. LOOP AT it_fcat INTO wa_fcat. APPEND INITIAL LINE TO lt_dyndata ASSIGNING
.
-fieldname = wa_fcat-fieldname.
-data_type = wa_fcat-ref_table && '-' && wa_fcat-ref_field. ENDLOOP. LOOP AT lt_dyndata ASSIGNING
. TRY. CREATE DATA lr_data TYPE (
-data_type). APPEND INITIAL LINE TO lt_component ASSIGNING
.
-type ?= cl_abap_datadescr=>describe_by_data_ref( lr_data ).
-name =
-fieldname. CATCH cx_root. ENDTRY. ENDLOOP. lo_structdescr = cl_abap_structdescr=>create( lt_component ). lo_tabledescr = cl_abap_tabledescr=>create( p_line_type = lo_structdescr p_table_kind = cl_abap_tabledescr=>tablekind_std p_unique = abap_false ).* CREATE DATA lr_dyntable TYPE HANDLE lo_tabledescr. CREATE DATA tt_dat TYPE HANDLE lo_tabledescr.ENDMETHOD.

方法create_dynamic_context:

参数

METHOD create_dynamic_context .  DATA lr_root_info           TYPE REF TO if_wd_context_node_info.  DATA lr_structdescr         TYPE REF TO   cl_abap_structdescr.  DATA lv_init_lead_selection TYPE abap_bool.  DATA lo_node_info           TYPE REF TO if_wd_context_node_info.  lr_root_info = wd_context->get_node_info( ).  CALL METHOD cl_abap_structdescr=>create    EXPORTING      p_components = it_components    RECEIVING      p_result     = lr_structdescr.  IF iv_init_lead_selection IS NOT INITIAL."是否默认选中第一行    lv_init_lead_selection = abap_true.  ELSE.    lv_init_lead_selection = abap_false.  ENDIF.  CALL METHOD lr_root_info->add_new_child_node    EXPORTING*     static_element_type          = lv_table      static_element_rtti          = lr_structdescr      name                         = node_name  "context id      is_multiple                  = abap_true      is_singleton                 = abap_false      is_initialize_lead_selection = lv_init_lead_selection      is_static                    = abap_false    RECEIVING      child_node_info              = lo_node_info.ENDMETHOD. 

创建动态Table

METHOD create_table .  DATA:lo_api_main TYPE REF TO if_wd_view_controller,       lo_view     TYPE REF TO if_wd_view.  lo_api_main = wd_this->wd_get_api( ).  lo_view ?= lo_api_main.*★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★*创建Table*★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★  DATA:lr_table         TYPE REF TO cl_wd_table,       lr_column        TYPE REF TO cl_wd_table_column,       lr_input_field   TYPE REF TO cl_wd_input_field,       lr_column_header TYPE REF TO cl_wd_caption,       lr_group         TYPE REF TO cl_wd_group.  DATA:lv_table_id TYPE string,       lv_node_name TYPE string,       lv_data_source TYPE string,       lv_text_view_id TYPE string,       lv_column_id    TYPE string,       lv_field_id     TYPE string,       lv_bind_value   TYPE string,       lv_caption_text TYPE wdy_md_translatable_text.  lv_table_id    = 'TBL_SPFLI'.  lv_node_name   = 'NODE_SPFLI'.  lv_data_source = 'NODE_SPFLI'.  cl_wd_table=>new_table(            EXPORTING              id                     = lv_table_id              design                 = cl_wd_table=>e_design-standard              first_visible_row      = 0              footer_visible         = 'X'              read_only              = abap_false              selection_mode         = cl_wd_table=>e_selection_mode-single              visible_row_count      = 18              enabled                = 'X'*                 column_resize_mode     = '01'              width                  = '100%'              grid_mode              = '00' "both              scrollable_col_count   = 7              visible                = cl_wd_uielement=>e_visible-visible              bind_data_source       = lv_data_source            RECEIVING              control = lr_table ).*第一列:  "-----添加列(航线代码)  lv_column_id    = |{ lv_table_id }| && |_CARRID|.  lv_field_id     = |{ lv_table_id }| && |_CARRID_EDITOR|.  lv_bind_value   = |{ lv_node_name }| && |.CARRID|.  lv_caption_text = |航线代码|.  cl_wd_table_column=>new_table_column( EXPORTING id             = lv_column_id                                                  width          = '120px'                                                  fixed_position = '02'                                        RECEIVING control        = lr_column )."left  cl_wd_input_field=>new_input_field(  EXPORTING id         = lv_field_id                                                 bind_value = lv_bind_value                                                 no_history = 'X'                                                 read_only  = 'X'                                       RECEIVING control    = lr_input_field ).  lr_table->add_column( the_column = lr_column ).  lr_column_header ?= cl_wd_caption=>new_caption(  text = lv_caption_text ).  lr_column->set_table_cell_editor( the_table_cell_editor = lr_input_field ).  lr_column->set_header( lr_column_header ).*第二列:  "-----添加列(航班连接 Id)  lv_column_id    = |{ lv_table_id }| && |_CONNID|.  lv_field_id     = |{ lv_table_id }| && |_CONNID_EDITOR|.  lv_bind_value   = |{ lv_node_name }| && |.CONNID|.  lv_caption_text = |航班连接 Id)|.  cl_wd_table_column=>new_table_column( EXPORTING id             = lv_column_id                                                  width          = '120px'                                                  fixed_position = '02'                                        RECEIVING control        = lr_column )."left  cl_wd_input_field=>new_input_field(  EXPORTING id         = lv_field_id                                                 bind_value = lv_bind_value                                                 no_history = 'X'                                                 read_only  = 'X'                                       RECEIVING control    = lr_input_field ).  lr_table->add_column( the_column = lr_column ).  lr_column_header ?= cl_wd_caption=>new_caption(  text = lv_caption_text ).  lr_column->set_table_cell_editor( the_table_cell_editor = lr_input_field ).  lr_column->set_header( lr_column_header ).*★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★*将Table 放入Group中*★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★  cl_wd_grid_data=>new_grid_data( element = lr_table ).  lr_group ?= lo_view->get_element( id = 'GRP' ).  lr_group->add_child( lr_table ).ENDMETHOD.

 获取数据

METHOD get_data .  DATA:dy_wa TYPE REF TO data.  FIELD-SYMBOLS:
TYPE STANDARD TABLE,
TYPE any.*★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★*用表类型指针
指向数据对象的内容.*★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ASSIGN wd_this->lt_tab->* TO
. CREATE DATA dy_wa LIKE LINE OF
. ASSIGN dy_wa->* TO
.*★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★*获取数据*★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ SELECT * INTO CORRESPONDING FIELDS OF TABLE
FROM spfli UP TO 10 ROWS.*★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★*绑定节点数据*★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ DATA:lo_nd_table TYPE REF TO if_wd_context_node. lo_nd_table = wd_context->get_child_node( name = 'NODE_SPFLI' ). lo_nd_table->bind_table(
).ENDMETHOD.

结果展现

 

转载于:https://www.cnblogs.com/SAPxiaox/p/9959209.html

你可能感兴趣的文章
电影天堂,批量下载,简单实现
查看>>
oracle 12c 加入系统服务
查看>>
未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项.试图加载格式不正确的程序...
查看>>
【转载】《Flexpaper二次开发入门教程》(十) Flexpaper简单使用-第一个Flexpaper例子(4.1节) ......
查看>>
如何深入思考
查看>>
用逗号隔开简单数据保存为csv
查看>>
POJ-1860 Currency Exchange SPFA判断环
查看>>
xampp+eclipse环境下使用phpunit
查看>>
python的类和对象(1)
查看>>
一个动态内存管理模块的实现
查看>>
url 编码(percentcode 百分号编码)
查看>>
队列课下作业
查看>>
【一本通】欧拉回路
查看>>
【LeetCode】290. Word Pattern 解题小结
查看>>
DataGrid CollectionViewSource Refresh性能问题
查看>>
数据库字符集(AL32UTF8)和客户端字符集(2%)是不同的
查看>>
关于在CMD中数据库操作中文乱码问题
查看>>
机器学习之路: python 决策树分类DecisionTreeClassifier 预测泰坦尼克号乘客是否幸存...
查看>>
R语言做正态性检验
查看>>
linux用户组管理
查看>>