zoukankan      html  css  js  c++  java
  • ABAP 动态内表构建 Dynamic internal table

    这两天做了一个这样的需求,其中要求根据用户输入的工资项(T512W-LGART)查找数据,并输出到ALV,要求是输出跟着输入变。由于工资项的配置信息可能会变,因此用于存储要显示的数据的内表就不能预先知道,因此不得不寻求动态内表的构建方法。
    其实网上的例子也有不少,但是都缺少说明,折腾了一上午才弄明白一些,写出来与大家分享。
    REPORT Z_DT2.
    type-pools : abap.
    *以t512w为例,构建一个动态内表
    tables: t512w.
    *field-symbols是一个标志,你可以理解为一个指针,将来创建的内表就要通过它们来访问
    field-symbols: type standard table,
    ,
    .
    * 这里定义了一个 dy_table 和一个 dy_line 类型是引用,但 to data 未能理解是什么意思,我觉得应该是说指向为空的意思
    data: dy_table type ref to data,
    dy_line type ref to data,
    *用于存储即将构建的动态内表结构
    ifc type lvc_t_fcat,
    xfc type lvc_s_fcat.
    data: begin of t_lgart occurs 0,
    LGART like t512w-lgart,
    end of t_lgart.
    select-options: S_LGART FOR t512w-lgart.
    start-of-selection.

    *首先从数据库中把符合用户输入的LGART填入内表,将来构建的动态内表每一列就是LGART中的每一行。
    select lgart into t_lgart-lgart from t512w where lgart in s_lgart and MOLGA = ’28′.
    append t_lgart.
    endselect.

    *循环读取内表t_lgart,对于每行构建内表
    loop at t_lgart.
    *这里偷了个懒,因为工资项中会有/103这样的数据,而/是不能用左列明的,大家可以自己写一个替换逻辑,把/替换成_之类的字符。
    check t_lgart-lgart+0(1) <> ‘/’.
    *列名就用lgart值
    xfc-fieldname = t_lgart-lgart.
    xfc-datatype = ‘C’.
    xfc-inttype = ‘C’.
    xfc-intlen = 6.
    xfc-decimals = 0.
    append xfc to ifc.
    endloop.
    *此处调用一个方法,这个方法用于构建动态内表,输入的就是要构建的结构,输出的就是一个dy_table,之前定义过,但是并不能直接访问。
    call method cl_alv_table_create=>create_dynamic_table
    EXPORTING
    it_fieldcatalog = ifc
    IMPORTING
    ep_table = dy_table.

    *设定指向 dy_table
    assign dy_table->* to .

    *下面这句建立了一个类型的工作区Work area
    create data dy_line like line of .

    *同理设定指针
    assign dy_line->* to .

    于是便动态的建立了一个内表和一个工作区,由于此方法建立的内表没有header line,所以需要一个工作区。
    下面是取数或者赋值的方法:
    *此行中的xxxx1就是列名
    ASSIGN COMPONENT xxxx1 OF STRUCTURE TO .
    *此行的作用就是给中的该列一个值
    = xxxx2.
    *用Append就可以把该行添加到表中了
    APPEND TO .
    如上所述,即可以动态构建内表,这种方法主要用于表结构无法确定有几列,几有哪些列,尤其与信息配置有关的时候,就只能用这种方法,否则配置一变,程序就不能用了。

  • 相关阅读:
    nodejs创建路由
    node,js 使用express 生成站点的命令
    Ajax异步同步原理
    jquery问题总结
    JS正则表达式
    幻灯片缓冲效果
    转:offsetParent的理解
    微信小程序左右滑动切换页面示例代码--转载
    python正则表达式
    Django笔记(番外):虚拟环境
  • 原文地址:https://www.cnblogs.com/liaojunbo/p/2142722.html
Copyright © 2011-2022 走看看