如何重用选择屏幕或数据/类型声明的元素?
How can I reuse elements of a Selection Screen or Data / Type declarations?
我想重用通常属于顶级包含的选择屏幕上的元素或数据/类型声明。我有几个报告在选择屏幕上共享几个元素。相同的报告共享关于应用程序日志的各种数据元素,因此存在可重用性问题。
由于 SAP 编程指南指出
Do not use include programs more than once .
Use an include program for the modularization of exactly one master program.
We strongly recommended using only suitable means for reuse, such as global classes or interfaces
我正在寻找替代方案来实现我的目标。
我能想到的使用全局 class 的唯一方法是定义 class 属性而不是数据声明并将它们用作变量。
class->Attribute = desired_value
这看起来有点奇怪,尽管非常接近 classes 用于常量的方式。
另一方面,我可以在 DDIC 中创建一个结构,其中包含所有需要的声明作为组件。
宏将是我最后的想法,也是唯一一个关于选择屏幕元素的想法。
DEFINE test.
PARAMETERS: pa_delta TYPE c AS CHECKBOX.
PARAMETERS: pa_date TYPE dats.
END-OF-DEFINITION.
TABLES: lfb1.
SELECT-OPTIONS: so_lifnr FOR lfb1-lifnr.
SELECT-OPTIONS: so_bukrs FOR lfb1-bukrs.
test.
你会如何解决这个问题?
对于您当然应该使用的类型 类 或包含的接口以供重用。
interface ZIF_DEMO
public .
types: begin of myType,
a type flag,
b type i,
end of myType.
endinterface.
REPORT zdemotype.
data gs type zif_demo=>mytype.
select-OPTIONS: s_a for gs-a.
至于选择画面重用。要避免这有点棘手。
查看报告 demo_call_selection_screen
了解一些想法。
如果您有许多需要此类功能的程序,您可以从另一个提交一份报告。或者有 1 个带有初始化逻辑的选择屏幕报告。
请注意,提交语句还支持对特定选择屏幕的引用。
submit demo_call_selection_screen USING SELECTION-SCREEN '100' and return.
当然这会提出一个问题,您是要 运行 程序还是只重复使用屏幕。在这种情况下,您将需要 return 通过记忆选择屏幕内容。
在这种情况下,像 RS_SELECTIONSCREEN_READ
这样的函数将被证明是有用的。
事实上,如果对此主题感兴趣,整个功能组 ALDB 值得一看。
但是如果我有多个报告问题使用了类似的大量选择选项
这在某种程度上是多么普遍和一致
我会使用 1 个驱动程序,它只调用 类 中的不同功能。
如果屏幕不是那么复杂,只需复制选择屏幕代码即可。
在这成为一个问题之前,您查看了多少 DRY 问题。
就我个人而言,如果我正在做代码审查,看到 10 个程序有 1 个常见的包含
其中唯一包含的是一个选择屏幕,没有数据报表
类型或代码,我可能会继续前进。特别是如果它包含评论
关于为什么需要一个通用的选择屏幕以及其余程序结构良好的原因。
准则就是准则。可维护性和健壮性无疑是目标。
作为 ABAPER,您可能会犯下更大的罪过 :)
对于选择屏幕元素,您可以简单地定义subscreens. If elements are in several selection screens in the same program, you may also SELECTION-SCREEN INCLUDE。
变量和类型可以通过建模到classes和接口中重用。如果您只是将它们之间没有关系的变量放在一个 class 或接口中,那么这只是一个坏主意,我想说也许定义一个包含程序并不是最糟糕的主意。
但是由于您只公开了最后一个问题(您只提供了一个我们不知道的原始问题的解决方案),因此很难提供更好的帮助...
我想重用通常属于顶级包含的选择屏幕上的元素或数据/类型声明。我有几个报告在选择屏幕上共享几个元素。相同的报告共享关于应用程序日志的各种数据元素,因此存在可重用性问题。
由于 SAP 编程指南指出
Do not use include programs more than once .
Use an include program for the modularization of exactly one master program.
We strongly recommended using only suitable means for reuse, such as global classes or interfaces
我正在寻找替代方案来实现我的目标。
我能想到的使用全局 class 的唯一方法是定义 class 属性而不是数据声明并将它们用作变量。
class->Attribute = desired_value
这看起来有点奇怪,尽管非常接近 classes 用于常量的方式。 另一方面,我可以在 DDIC 中创建一个结构,其中包含所有需要的声明作为组件。
宏将是我最后的想法,也是唯一一个关于选择屏幕元素的想法。
DEFINE test.
PARAMETERS: pa_delta TYPE c AS CHECKBOX.
PARAMETERS: pa_date TYPE dats.
END-OF-DEFINITION.
TABLES: lfb1.
SELECT-OPTIONS: so_lifnr FOR lfb1-lifnr.
SELECT-OPTIONS: so_bukrs FOR lfb1-bukrs.
test.
你会如何解决这个问题?
对于您当然应该使用的类型 类 或包含的接口以供重用。
interface ZIF_DEMO
public .
types: begin of myType,
a type flag,
b type i,
end of myType.
endinterface.
REPORT zdemotype.
data gs type zif_demo=>mytype.
select-OPTIONS: s_a for gs-a.
至于选择画面重用。要避免这有点棘手。
查看报告 demo_call_selection_screen
了解一些想法。
如果您有许多需要此类功能的程序,您可以从另一个提交一份报告。或者有 1 个带有初始化逻辑的选择屏幕报告。
请注意,提交语句还支持对特定选择屏幕的引用。
submit demo_call_selection_screen USING SELECTION-SCREEN '100' and return.
当然这会提出一个问题,您是要 运行 程序还是只重复使用屏幕。在这种情况下,您将需要 return 通过记忆选择屏幕内容。
在这种情况下,像 RS_SELECTIONSCREEN_READ
这样的函数将被证明是有用的。
事实上,如果对此主题感兴趣,整个功能组 ALDB 值得一看。
但是如果我有多个报告问题使用了类似的大量选择选项 这在某种程度上是多么普遍和一致 我会使用 1 个驱动程序,它只调用 类 中的不同功能。
如果屏幕不是那么复杂,只需复制选择屏幕代码即可。 在这成为一个问题之前,您查看了多少 DRY 问题。
就我个人而言,如果我正在做代码审查,看到 10 个程序有 1 个常见的包含 其中唯一包含的是一个选择屏幕,没有数据报表 类型或代码,我可能会继续前进。特别是如果它包含评论 关于为什么需要一个通用的选择屏幕以及其余程序结构良好的原因。 准则就是准则。可维护性和健壮性无疑是目标。 作为 ABAPER,您可能会犯下更大的罪过 :)
对于选择屏幕元素,您可以简单地定义subscreens. If elements are in several selection screens in the same program, you may also SELECTION-SCREEN INCLUDE。
变量和类型可以通过建模到classes和接口中重用。如果您只是将它们之间没有关系的变量放在一个 class 或接口中,那么这只是一个坏主意,我想说也许定义一个包含程序并不是最糟糕的主意。
但是由于您只公开了最后一个问题(您只提供了一个我们不知道的原始问题的解决方案),因此很难提供更好的帮助...