採用RFC讀取表後的後處理

leniz發表於2010-06-04

採用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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章