繁体   English   中英

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

[英]Is it possible to programatically interrogate the fields of a screen (selection screen) of a given program in order to get their types?

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

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

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

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

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

我什至找到了一个名为GET_DICTIONARY_FIELDS ,它承诺给我我想要的东西:程序中所有变量的列表,然后我可以用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'.

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM