在ABAP报告中本地化全局可变量

gku*_*bed 2 sap abap global-variables

使用扩展程序检查时,我收到以下警告:

不要variable name全局声明字段和字段符号().

这是在选择屏幕之前声明全局数据.显而易见的解决方案是它们应该在子例程中本地声明.

如果我决定这样做,数据现在将超出其他子程序的范围,所以我最终会创建一些main()来自C或Java函数的东西.这听起来是个好主意 - 但是,诸如INITIALIZATION不允许在子例程中的事件,这意味着它会强制中断范围.

请观察以下示例程序:

REPORT Z_EXAMPLE.
SELECTION-SCREEN BEGIN OF BLOCK upload WITH FRAME TITLE text-H01.
  PARAMETERS: p_infile TYPE rlgrap-filename LOWER CASE OBLIGATORY.
SELECTION-SCREEN END OF BLOCK upload.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_infile.
  PERFORM main1 CHANGING p_infile.
INITIALIZATION.
  PERFORM main2.
TOP-OF-PAGE.
  PERFORM main3.
...
Run Code Online (Sandbox Code Playgroud)

main1,main2并且main3不能据我所知,在没有全局声明的情况下将任何数据传递给彼此.如果从上传的文件p_infile中解析数据main1,则无法在main2或中访问main3.除了一起省略事件之外,有没有办法遵守警告但让数据通过事件传递?

vwe*_*ert 6

有各种各样的技术 - 除了在单独的控制器类中进行基本选择屏幕处理之外,我更喜欢编写几乎所有内容.报告只是按照该类调用其方法.除此之外 - 它只是一个警告,如果你知道你在做什么,你可以忽略.编写一个没有任何全局变量的程序肯定是不切实际的 - 但是,在一个方法参数更合适的地方使用全局变量或属性之前,你应该至少考虑两次.