在FOR循环表达式中添加CHECK或CONTINUE

2020-08-17 20:42发布

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

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


尝试。
     et_agents = VALUE#(基础et_agents
                          在l_agents中使用ls_agent
                  LET check = NEW zcl_te_pos_deleg(CONV#(ls_agent-objid)
                               )-> is_within_limit(CONV#(iv_amount))
                  在
                   (COND#(当check = abap_true时
                             然后对应#(ls_agent)
                             其他抛出恢复zcx_swf_no_agent_found()
                           )
                   )
                       )。
 取消缠绕之前捕获zcx_swf_no_agent_found。
   恢复。
 ENDTRY。

 在表_行为INITIAL的地方删除et_agents。" <-我想避免这样做
 

问题在于,在引发异常并将其恢复后,在处理下一个IT_AGENTS迭代之前,在表ET_AGENTS中附加了空行。

FOR LOOP表达式中是否有一种方法像CHECK或CONTINUE语句一样,就像在传统的LOOP/ENDLOOP语句中一样?

谢谢

So田。

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

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


尝试。
     et_agents = VALUE#(基础et_agents
                          在l_agents中使用ls_agent
                  LET check = NEW zcl_te_pos_deleg(CONV#(ls_agent-objid)
                               )-> is_within_limit(CONV#(iv_amount))
                  在
                   (COND#(当check = abap_true时
                             然后对应#(ls_agent)
                             其他抛出恢复zcx_swf_no_agent_found()
                           )
                   )
                       )。
 取消缠绕之前捕获zcx_swf_no_agent_found。
   恢复。
 ENDTRY。

 在表_行为INITIAL的地方删除et_agents。" <-我想避免这样做
 

问题在于,在引发异常并将其恢复后,在处理下一个IT_AGENTS迭代之前,在表ET_AGENTS中附加了空行。

FOR LOOP表达式中是否有一种方法像CHECK或CONTINUE语句一样,就像在传统的LOOP/ENDLOOP语句中一样?

谢谢

So田。

付费偷看设置
发送
3条回答
亦是此间程序员
1楼-- · 2020-08-17 21:46

感谢 Sandra Rossi 可以很好地工作(即使没有完整的类型),这意味着不需要上面的代码 引发异常并恢复它-我希望SAP在将来的版本中提供一个选项,以允许在此FOR LOOP表达式内使用CHECK或CONTINUE选项,以便可以优雅地实现它。 存在WHERE条件,但在上述情况下不起作用; 因此我们希望看到一个增强的WHERE,它可以像FOR LOOP中的"检查"一样工作。

Mateusz Adamus 嗨,Mateusz的可读性更好,而且还取决于个人喜好-当实现使用函数式编程(即LHS = RHS就像数学方法)而不是编写"故事"时,我发现它具有更好的可读性和逻辑性 老式编程的案例-我想这是SAP升级其ABAP语言以使其能够与其他现代现代语言保持一致的一种现代主要原因。

最诚挚的问候,

Sougata。

哎,真难
2楼-- · 2020-08-17 21:20

不存在(自7.53起)。

NB:在您的情况下,您可以使用以下技巧作为变通方法, 在每个循环中,将内部表的行添加为0或1行(语法未经验证;您可能需要定义内部表的实际完整类型而不是#):

 IN
  (COND的行为#(当check = abap_true时
                     然后值#((对应#(ls_agent)))" 1行
                     ELSE VALUE#()" 0行
                     ))

还有一些愚蠢的解决方法,我不想提及。

闻人可可
3楼-- · 2020-08-17 21:34

你好Sougata,

出于好奇。

为什么只用几行就可以使用旧语法来实现新语法呢?

在it_agents中循环引用数据(ld_source_agent  )。
   检查新的zcl_te_pos_deleg(CONV#(ls_agent-objid))-> is_within_limit(CONV#(iv_amount))。
   将初始行附加到et_agents参考到DATA(ld_result_agent)。
   将ld_source_agent-> *移动到ld_result_agent-> *。
 ENDLOOP。

亲切的问候,
Mateusz

一周热门 更多>