采用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/