以编程方式获取 table 字段描述
Get table field description programmatically
我正在尝试通过 ERPConnect 的 ABAP API 查询 SAP 的数据字典。下面的代码可以很好地检索 table 名称和各种字段属性,但无法显示字段描述。有人知道为什么吗?
谢谢
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.
table字段或结构字段的文本信息可以存储在不同的地方。您 select 来自 DD04T
的数据元素文本只是这些文本的一个位置。您可以使用内置数据类型而不是字典数据类型定义 table 组件,然后文本将存储在 DD03T
(例如)
出于这些原因(DD*
tables 的技术细节),我强烈建议您使用功能模块 DDIF_FIELDINFO_GET
而不是自己滚动 DD*
select。只需传递参数 TABNAME
和 LANGU
,生成的内部 table DFIES_TAB
将包含您需要的所有信息,包括文本。
除了@rplantiko 的建议之外,我还建议使用 RPY_*
功能模块,这些模块已经启用了 RFC,开箱即用可能更容易访问。
我正在尝试通过 ERPConnect 的 ABAP API 查询 SAP 的数据字典。下面的代码可以很好地检索 table 名称和各种字段属性,但无法显示字段描述。有人知道为什么吗?
谢谢
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.
table字段或结构字段的文本信息可以存储在不同的地方。您 select 来自 DD04T
的数据元素文本只是这些文本的一个位置。您可以使用内置数据类型而不是字典数据类型定义 table 组件,然后文本将存储在 DD03T
(例如)
出于这些原因(DD*
tables 的技术细节),我强烈建议您使用功能模块 DDIF_FIELDINFO_GET
而不是自己滚动 DD*
select。只需传递参数 TABNAME
和 LANGU
,生成的内部 table DFIES_TAB
将包含您需要的所有信息,包括文本。
除了@rplantiko 的建议之外,我还建议使用 RPY_*
功能模块,这些模块已经启用了 RFC,开箱即用可能更容易访问。