美文网首页
动态内表

动态内表

作者: abapCiCi | 来源:发表于2022-05-07 23:50 被阅读0次

    由于今天碰了这个问题所以特此学习了动态内表。变成自己的知识。
    总结: 网上面的只是告诉我们怎么做。
    为什么这么做的底层原因是
    大量使用类的反射,
    什么是类的反射 ,请参考
    (76条消息) 为什么要反射?江上渔者21号的博客-CSDN博客为什么需要反射

    1创建动态表类的调用

    *取出表结构的字段目录
    CALL FUNCTION 'NAMETAB_GET'
    EXPORTING
    langu = sy-langu
    tabname = p_name
    TABLES
    nametab = lt_table
    EXCEPTIONS
    no_texts_found = 1.
    *根据取出的字段目录生成参考字段目录
    LOOP AT lt_table INTO ls_table.
    ls_alv_cat-fieldname = ls_table-fieldname.
    ls_alv_cat-ref_table = p_name.
    ls_alv_cat-ref_field = ls_table-fieldname.
    APPEND ls_alv_cat TO lt_alv_cat.
    CLEAR ls_alv_cat.
    ENDLOOP.
    
    CALL METHOD cl_alv_table_create=>create_dynamic_table
       EXPORTING
         it_fieldcatalog = it_structure
       IMPORTING
         ep_table        = dy_table.
    ASSIGN dy_table->* TO <dyn_table>.
    

    2根据动态结构创建动态内表

    *根据字段目录创建动态结构类型
    CALL METHOD cl_abap_structdescr=>create
    EXPORTING
    p_components = lt_comp
    RECEIVING
    p_result = lr_struc.
    *根据动态结构创建动态内表类型
    CALL METHOD cl_abap_tabledescr=>create
    EXPORTING
    p_line_type = lr_struc
    RECEIVING
    p_result = lr_table.
    *参照动态结构类型和动态内表类型创建内表与工作区
    CREATE DATA dyn_wa TYPE HANDLE lr_struc.
    CREATE DATA dyn_table TYPE HANDLE lr_table.
    *指定内表与工作区到字段符号
    ASSIGN dyn_wa->* TO <dyn_wa>.
    ASSIGN dyn_table->* TO <dyn_table>.
    

    3 直接创建

    *创建动态表结构
    CREATE DATA dyn_table TYPE TABLE OF (p_name).
    *创建动态内表
    ASSIGN dyn_table->* TO <dyn_table>.
    *创建动态工作区结构
    CREATE DATA dyn_wa LIKE LINE OF <dyn_table>.
    *创建动态工作区
    ASSIGN dyn_wa->* TO <dyn_wa>.
    

    获得动态表数据

    SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table> UP TO 100 ROWS FROM (p_name).
    

    相关文章

      网友评论

          本文标题:动态内表

          本文链接:https://www.haomeiwen.com/subject/prycurtx.html