是否有可能以编程方式询问给定程序的屏幕(选择屏幕)的字段以获取其类型?

时间:2013-08-08 16:06:35

标签: reflection sap abap

我有一个程序列表,其选择屏幕变体我想检查类型为BUKRS的参数的硬编码值。

功能模块RS_VARIANT_CONTENTS几乎完成了所有工作,因为对于给定的变体和程序,它返回该变量中填充的值的列表。

不幸的是,它不会返回这些参数的类型,只返回它们的值。因此,我想我需要一个额外的检查,即屏幕中定义的参数类型。

现在我意识到关键字PARAMETERS在当前程序中定义了屏幕字段和数据对象,其中任何一种的类型都会有很大的帮助(显然是相同的)。这当然是在我甚至定义了PARAMETERS数据对象而不是SELECT-OPTIONS的情况下。

我还遇到了功能模块DYNPRO_FIELD_GET,它给了我选择屏幕中定义的屏幕字段,但同样,对类型没有帮助....所以是的,任何帮助都将不胜感激。

我甚至找到了一个名为GET_DICTIONARY_FIELDS的FuBa,它答应给我我想要的东西:一个程序中所有变量的列表,然后我可以用RS_VARIANT_CONTENTS给出的列表来证实获取我想要的信息 - 不幸的是在我的系统版本中,它处于非活动状态。

[编辑]

应该注意的是,RS_SELSCREEN_INFO返回程序中定义的数据对象的类型及其各自的语句。例如:

DATA gv_asdfg TYPE mara-matnr.

它返回MARA-MATNR。当然,表字段的名称并不表示数据元素的名称,因此:

要获取这些类型的域,可以使用CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME( )并提供RS_SELSCREEN_INFO给出的类型。对于生成的对象,应该查找的属性是->ABSOLUTE_NAME。就我而言,条件是...->ABSOLUTE_NAME = '\TYPE=BUKRS'.

2 个答案:

答案 0 :(得分:2)

您可以尝试使用功能模块RS_SELSCREEN_INFO。给定报告名称,它将返回参数列表并选择选项以及DDIC参考信息(如果已设置)。

答案 1 :(得分:0)

Althouth vwegert的答案实际上做了完整的技巧,我还发现了2个功能模块,它们有很多帮助。

这些是 GET_GLOBAL_SYMBOLS - 这将返回程序的全局变量。它适用于DATAPARAMETERS定义的变量,但不适用于SELECT-OPTIONS

另一个是 GET_COMPONENT_LIST - 这可用于获取用SELECT-OPTIONS声明的变量的基本数据类型。