使用类和方法cl_lib_seltab => new

2020-08-12 16:51发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好;

希望有人可以帮助我了解如何使用此类和方法。 当使用如下所示的" FOR"语句定义范围时,它可以正常工作,但是我试图通过将范围作为参数传递给FM,然后在FM中使用类来创建通用功能模块。 使用调试器,我发现了这一行

lr_struc_descr?= _mr_table_descr-> get_table_line_type()

cl_lib_seltab的构造函数中的返回行类型为1行,而不是使用下面的" FOR"语句定义传递给范围时返回的4个字段。

.....

*输出类型
类型:ty_result的开始,
BUKRS类型BUKRS,
KUNNR类型KUNNR,
BELNR类型BELNR_D,
GJAHR类型GJAHR,
BLART类型BLART ,
ty_result结束。

....

SELECT-OPTIONS:s_bukrs用于ls_result-bukrs,
s_kunnr用于ls_result-kunnr。

.....

DATA(lr_seltab)= cl_lib_seltab => new(it_sel = s_bukrs [])。

调试时,我发现以下一行是cl_lib_seltab的CONSTRUCTOR

lt_fields = lr_struc_descr-> get_components()。

在调用时返回s_bukrs的4个字段(符号,选项,低,高)。

我的问题是,当我将S_BUKRS定义为FM的参数作为TABLE输入参数时,如下:

S_BUKRS像BUKRS_RAN

该行:

lt_fields = lr_struc_descr-> get_components()。

不返回任何内容。

我认为这与提供给该方法的内存指针有关。 我尝试了各种组合,但似乎无法使用。

有什么想法吗?


谢谢

斯蒂芬

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好;

希望有人可以帮助我了解如何使用此类和方法。 当使用如下所示的" FOR"语句定义范围时,它可以正常工作,但是我试图通过将范围作为参数传递给FM,然后在FM中使用类来创建通用功能模块。 使用调试器,我发现了这一行

lr_struc_descr?= _mr_table_descr-> get_table_line_type()

cl_lib_seltab的构造函数中的返回行类型为1行,而不是使用下面的" FOR"语句定义传递给范围时返回的4个字段。

.....

*输出类型
类型:ty_result的开始,
BUKRS类型BUKRS,
KUNNR类型KUNNR,
BELNR类型BELNR_D,
GJAHR类型GJAHR,
BLART类型BLART ,
ty_result结束。

....

SELECT-OPTIONS:s_bukrs用于ls_result-bukrs,
s_kunnr用于ls_result-kunnr。

.....

DATA(lr_seltab)= cl_lib_seltab => new(it_sel = s_bukrs [])。

调试时,我发现以下一行是cl_lib_seltab的CONSTRUCTOR

lt_fields = lr_struc_descr-> get_components()。

在调用时返回s_bukrs的4个字段(符号,选项,低,高)。

我的问题是,当我将S_BUKRS定义为FM的参数作为TABLE输入参数时,如下:

S_BUKRS像BUKRS_RAN

该行:

lt_fields = lr_struc_descr-> get_components()。

不返回任何内容。

我认为这与提供给该方法的内存指针有关。 我尝试了各种组合,但似乎无法使用。

有什么想法吗?


谢谢

斯蒂芬

付费偷看设置
发送
8条回答
1楼-- · 2020-08-12 17:57

您好 Stephen Herlick

避免使用函数的TABLES部分(除非它是RFC函数) ,在这种情况下,TABLES可以提供​​更好的性能(如前所述)。 可以使用ABAP字典中完全定义的表类型来代替IMPORTING/EXPORTING参数。 这样,您还可以完全控制所使用的类型。

致以问候,
Mateusz
2楼-- · 2020-08-12 17:42

请使用" CODE"按钮很好地格式化代码。

3楼-- · 2020-08-12 17:45

这是使用SE37的限制之一。 可能会意外地声明变量。

对于TABLES参数,它们是通过以下方式声明的:

数据:开始于%_OBUKRS_RAN OCCURS 1。
         包含结构BUKRS_RAN。
 数据:%_ OBUKRS_RAN的结尾。
 

类型与CL_LIB_SELTAB的NEW方法所期望的类型不同,即,仅当SAP以这种方式为SE37生成变量时,该类型才有效:

 DATA%_OBUKRS_RAN TYPE 带有DEFAULT键的BUKRS_RAN标准表。
4楼-- · 2020-08-12 17:42

希望有人可以帮助我了解如何使用此类和方法。 当使用如下所示的" FOR"语句定义范围时,它可以正常工作,但是我试图通过将范围作为参数传递给FM,然后在FM中使用类来创建通用功能模块。 使用调试器,我发现在cl_lib_seltab的构造函数中,行

 lr_struc_descr?= _mr_table_descr-> get_table_line_type()

正在返回1行作为行类型,​​而不返回4个字段作为

 .... 
*输出类型
类型:BEGIN OF ty_result,
BUKRS TYPE,它会在使用" FOR"语句定义传递给范围的情况下执行此操作。 BUKRS,KUNNR类型KUNNR,BELNR类型BELNR_D,GJAHR类型GJAHR,BLART类型BLART,ty_result的结尾。
....
SELECT-OPTIONS :s_bukrs FOR ls_result-bukrs,
s_kunnr FOR ls_result-kunnr。
....
DATA(lr_seltab)= cl_lib_seltab => new(it_sel = s_bukrs [])。

调试时,我发现以下一行是cl_lib_seltab的构造函数

 lt_fields = lr_struc_descr-> get_components()。

在以下情况下返回s_bukrs的4个字段(符号,选项,低,高)

我的问题是,当我将S_BUKRS定义为FM的参数作为TABLE输入参数时,如下:

 S_BUKRS类似于BUKRS_RAN  

该行:

 lt_fields = lr_struc_descr-> get_components()。

不返回任何内容。

我认为它具有 与将内存指针馈送到该方法有关。 我尝试了各种组合,但似乎无法使用。

有什么想法吗?

5楼-- · 2020-08-12 17:31

嗨,桑德拉

感谢您的审核。 将来我会尝试更好地格式化代码。

是的,BUKRS_RAN是DDIC结构。

我正在使用SE37测试FM,所以我还没有开发任何程序。

我觉得不同之处在于s_bukrs的定义方式。 两者之间似乎有所不同

选择选项:s_bukrs FOR ls_result-bukrs
 

类似于S_BUKRS BUKRS_RAN
 

何时

 lt_fields = lr_struc_descr-> get_components()。
 

被调用。 这就是给我造成麻烦的原因。 在调试器中,使用" FOR"子句定义S_BURKS时,lt_fields返回以下内容:

但是当定义为表参数时,lt_fields如下所示:

" NAME"列为空,只有1行。

6楼-- · 2020-08-12 17:45

我猜BUKRS_RAN是一个DDIC结构,其组成为SIGN,OPTION,LOW,HIGH。 是吗?

如果是这样,我不明白为什么在功能模块内调用cl_lib_seltab => new(it_sel = s_bukrs [])无效。

也许是这样 您调用了功能模块,但没有显示代码。

一周热门 更多>