gpt4 book ai didi

abap - Case 语句中的变量封装

转载 作者:行者123 更新时间:2023-12-04 17:01:02 28 4
gpt4 key购买 nike

在修改现有程序的 CASE 语句时,我必须添加第二个 block ,其中重复一些逻辑以设置 NetWeaver 门户设置。这是通过在局部变量中设置值,然后将该变量分配给更改参数来完成的。我复制了代码并做了一个 pretty-print ,期望编译器提示未知变量。然而令我惊讶的是,这段代码实际上编译得很好:

CASE i_actionid.
WHEN 'DOMIGO'.
DATA: ls_portal_actions TYPE powl_follow_up_sty.
CLEAR ls_portal_actions.
ls_portal_actions-bo_system = 'SAP_ECC_Common'.
" [...]
c_portal_actions = ls_portal_actions.
WHEN 'EBELN'.
ls_portal_actions-bo_system = 'SAP_ECC_Common'.
" [...]
C_PORTAL_ACTIONS = ls_portal_actions.
ENDCASE.

正如我在其他所有编程语言中看到的那样, DATA:第一个声明 WHEN语句应该被封装并且只能在那个 switch block 内使用。 SAP 是否忽略此封装以使该值在整个 CASE 语句中可用?这在任何地方都有记录吗?

请注意,此代码编译得很好,双击第二个开关中的局部变量将我带到第一个中的数据声明。但是,当我们的测试环境关闭时,我无法测试此代码是否正确执行。

最佳答案

简而言之,您不能这样做。在 abap 程序中,您将有以下范围来声明变量(从本地到全局):

  • 表单例程:FORM 和 ENDFORM 之间的所有变量
  • 方法:METHOD 和 ENDMETHOD 之间的所有变量
  • 类 - CLASS 和 ENDCLASS 之间的所有变量,但仅限于 CLASS DEFINITION 部分
  • 功能模块:FUNCTION和ENDFUNCTION之间的所有变量
  • 程序/全局 - 不在上述任何一项中的任何内容在当前程序中都是全局的,包括 PBO 和 PAI 模块中的变量

  • 能够在 for 循环或 if 中本地定义变量确实很有用,但不幸的是在 ABAP 中不可能。最接近的公开文档是 help.sap.com: Local Data in the Subroutine

    至于编译过程,不要假设 ABAP 会优化任何你不使用的变量,它不会,使用代码检查器自己查找和删除它们。由于 ABAP 以它的方式工作,因此我个人在模块化单元的开头定义了所有变量,而不是与其他代码内联,并且甚至修改了 pretty-print 以将任何内联定义移动到当前范围的顶部。

    关于abap - Case 语句中的变量封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19677609/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com