2015-07-21 142 views
3

我試圖通過ERPConnect的ABAP API查詢SAP的數據字典。下面的代碼很好地檢索表名和各種字段屬性,但未能顯示字段說明。有人知道爲什麼Abap數據字典字段說明

感謝

REPORT ZSELECTCOMMAND. 
TABLES: DD02L, 
    DD03L, 
    DD02T, DD04T. 

DATA: BEGIN OF tb_meta, 
    tabname TYPE DD02L-tabname, 
    fieldname TYPE DD03L-fieldname, 
    datatype TYPE DD03L-datatype, 
    leng  TYPE DD03L-leng, 
    decimals TYPE DD03L-decimals, 
    position TYPE DD03L-position, 
desc TYPE DD04T-ddtext, 
    END OF tb_meta. 
DATA utb_meta LIKE STANDARD TABLE OF tb_meta. 
DATA: ln_meta LIKE LINE OF utb_meta, m1 TYPE i, m2 TYPE i. 
SELECT 
    tb~tabname 
fld~fieldname 
    fld~datatype fld~leng 
    fld~decimals fld~position 
x~ddtext 
    INTO CORRESPONDING FIELDS OF TABLE utb_meta 
FROM 
    dd02L AS tb 
INNER JOIN dd03L AS fld 
    ON tb~tabname = fld~tabname 
INNER JOIN DD04T AS x 
ON fld~ROLLNAME = x~ROLLNAME 
AND x~DDLANGUAGE = 'EN' 
WHERE 
    CONTFLAG IN ('A', 'C', 'S') 
    AND 
    APPLCLASS <> '' 
    AND 
    tb~TABNAME NOT LIKE '/%' 
    AND 
    tb~TABNAME NOT LIKE '%_BAK' 
    AND 
    tb~TABNAME = 'BSAK'. 
*GET RUN TIME FIELD m1. 
loop at utb_meta into ln_meta. 
    write:/ 
    ln_meta-tabname 
    && '>>' && ln_meta-fieldname 
    && '>>' && ln_meta-datatype 
    && '>>' && ln_meta-leng 
    && '>>' && ln_meta-decimals 
    && '>>' && ln_meta-position 
    && '>>' && ln_meta-desc. 
endloop. 

回答

6

有不同的地方,可以存儲在表中的字段或結構字段中的文本信息。您從DD04T中選擇的數據元素文本只是這些文本的一個地方。您可以使用內置數據類型(而不是字典數據類型)定義表格組件,然後文本將存儲在DD03T(例如)

由於這些原因(DD*表格的技術細節),我強烈建議您使用功能模塊DDIF_FIELDINFO_GET而不是滾動您自己的DD*選擇。只需傳遞參數TABNAMELANGU,生成的內部表DFIES_TAB將包含您需要的所有信息,包括文本。

+0

答案不能更精確。 –

+0

感謝提示,所有這些ABAP malarkey對我來說都是新手。回覆。該函數的使用,儘管我的代碼只是檢索BSAK的元數據,但這只是爲了方便調試,實際上有一些我需要元數據的6k表。在這種情況下,我正確地直接查詢表格會更方便嗎? – rodders

+0

我剛測試過它。在我的系統中,爲39512個數據庫表調用'DDIF_FIELDINFO_GET'需要878秒的總時間。對於一次性行動(DDIC遷移),這在我眼中是可以接受的。如果你仍然堅持你自己的'SELECT'語句,請檢查在該功能模塊中實現的邏輯(並且非常感謝SAP是開源的:-))。還有另外一個表格「DDFTX」涉及到協助文本確定。 – rplantiko

2

除了@ rplantiko的建議之外,我建議使用已啓用RFC的RPY_*功能模塊,並且可能更易於開箱即用。