在修改现有程序的 CASE 语句时,我必须添加第二个块,其中重复一些逻辑以设置 NetWeaver 门户设置。这是通过在局部变量中设置值,然后将该变量分配给更改参数来完成的。我复制了代码并做了一个漂亮的打印,期望编译器抱怨未知变量。然而令我惊讶的是,这段代码实际上编译得很好:
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 块中使用。SAP 是否忽略此封装以使该值在整个 CASE 语句中可用?这在任何地方都有记录吗?
请注意,此代码编译得很好,双击第二个开关中的局部变量将我带到第一个中的数据声明。但是,当我们的测试环境关闭时,我无法测试此代码是否正确执行。