采用RFC读取表后的后处理

采用RFC读取表后的后处理
  通过Function:RFC_READ_TABLE 可以获取某个表的结构和数据,最终的数据会把读取的表的每一行数据放到一个字符型列中,所以我们需要通过返回的结构,把字符中的数据拆解出来。
这里存在一个问题,Function返回的结构是一个描述性的,比如说列名称,而我们需要把这些描述性的东西和具体的变量对应起来,比如说我们从结构中可以知道字符列从第几位到第几位是对应什么列的值,但是我们需要的是把这个值赋值到当前系统的某个变量中。
参看了之前几位写的代码,发现他们采用的方法是,把数据读过来之后,人为的去判断该怎么一个个的对应。
 CALL FUNCTION 'RFC_READ_TABLE' DESTINATION 'WXXX000'
    EXPORTING
      query_table          = 'ZXXX001'
    TABLES
      OPTIONS              = l_options
      fields               = l_fields
      data                 = l_data_week.

  LOOP AT l_data_week.
    l_itgkrawdata_week-gkcode     = l_data_week-wa+3(10).
    l_itgkrawdata_week-gksite     = l_data_week-wa+43(15).
    l_itgkrawdata_week-gkbs       = l_data_week-wa+58(10).
    l_itgkrawdata_week-gkdttype   = l_data_week-wa+68(6).
    ………

从上面的代码我们可以发现,开发人员如果没有先查看l_fields的值的话,能写出上面的字符获取语句,是需要很大的天赋和运气的。实际上赋值的代码比我选取的还要长的多,因为列很多。
 记得很久之前,自己看到一个如何将结构的数据逐一读取而不需要知晓列名的方法,语法格式如下。
 ASSIGN COMPONENT comp OF STRUCTURE struc
详细的看完帮助后,发现comp除了可以使用列数(即第几列)外,还可以用列名(字符型),有点欣喜若狂,并想起某君的信誓旦旦。
    所以可以对上面的代码进行一些修改,即可以实现灵活配对的功能。
 FIELD-SYMBOLS: TYPE ANY.
LOOP AT l_data_week.
    LOOP AT l_fields.
          ASSIGN COMPONENT l_fields-fieldname 
OF STRUCTURE l_itgkrawdata_week TO .
    = l_data_week+l_fields-offset(l_fields-length).
  ENDLOOP.
  APPEND  l_itgkrawdata_week TO ....
ENDLOOP.

以后,不管读其他什么表,只要把l_itgkrawdata_week替换成对应的工作区即可,以之前的代码对比,是否灵活、简洁许多?

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/554557/viewspace-664358/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/554557/viewspace-664358/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值