簡體   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