为字段符号分配新的条件#语法

2020-08-30 21:07发布

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

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


嘿,这里的第一个问题,我希望我做得对,这不是多余的

我想读取内部表的特定行,然后再修改表行。

这可以通过以下代码块完成:
如果is_estrh_tar不是INITIAL。
读取表ms_spc_db-estrh,其键匹配= abap_false subid = is_estrh_tar-subid
分配字段-SYMBOL(
如果已分配
es_estrh_db =
-matched = abap_true。
UNASSIGN
ENDIF。 "
ENDIF。" ls_estrh_tar

自从我成为构造函数表达式Value,Cond等的狂热爱好者以来,我就尝试使用新语法来构建它。 es_estrh_db = COND#(当is_estrh_tar不是初始值时
值#(ms_spc_db-estrh [matched = abap_false subid = is_estrh_tar-subid]可选)))。
ms_spc_db-estrh [recn = ed_est COND#(当es_estrh_db不是INB时,则为abap_true)。

我唯一的问题是新语法需要对表进行两次读取操作。

我尝试在COND#语句中使用LET = ms_spc_db-estrh [matched = abap_false subid = is_estrh_tar-subid],但尽管在条件中可能可行,但无法修改此字段符号 相同的表达式,因为COND-Expression是专门设计为仅更改es_estrh_db。

是否可以将字段符号分配给输出,例如:
" ASSIGN TO VALUE#/COND#(....)"吗?

然后我可以通过构造函数运算符分配fieldsymbol,然后在下一条语句中对其进行修改。

希望这可以解释我的问题,并感谢您对我的问题的任何考虑!

最好的问候
朱利安·霍恩

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

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


嘿,这里的第一个问题,我希望我做得对,这不是多余的

我想读取内部表的特定行,然后再修改表行。

这可以通过以下代码块完成:
如果is_estrh_tar不是INITIAL。
读取表ms_spc_db-estrh,其键匹配= abap_false subid = is_estrh_tar-subid
分配字段-SYMBOL(
如果已分配
es_estrh_db =
-matched = abap_true。
UNASSIGN
ENDIF。 "
ENDIF。" ls_estrh_tar

自从我成为构造函数表达式Value,Cond等的狂热爱好者以来,我就尝试使用新语法来构建它。 es_estrh_db = COND#(当is_estrh_tar不是初始值时
值#(ms_spc_db-estrh [matched = abap_false subid = is_estrh_tar-subid]可选)))。
ms_spc_db-estrh [recn = ed_est COND#(当es_estrh_db不是INB时,则为abap_true)。

我唯一的问题是新语法需要对表进行两次读取操作。

我尝试在COND#语句中使用LET = ms_spc_db-estrh [matched = abap_false subid = is_estrh_tar-subid],但尽管在条件中可能可行,但无法修改此字段符号 相同的表达式,因为COND-Expression是专门设计为仅更改es_estrh_db。

是否可以将字段符号分配给输出,例如:
" ASSIGN TO VALUE#/COND#(....)"吗?

然后我可以通过构造函数运算符分配fieldsymbol,然后在下一条语句中对其进行修改。

希望这可以解释我的问题,并感谢您对我的问题的任何考虑!

最好的问候
朱利安·霍恩

付费偷看设置
发送
5条回答
SKY徐
1楼 · 2020-08-30 21:53.采纳回答

请参见弗雷德里克·吉罗德(Frederic Girod)的回答:

 TRY。
     DATA(my_var)= REF#(ms_spc_db-estrh [匹配= ABAP_FALSE子ID = is_estrh_tar-subid])。
     my_var-> matched = ABAP_TRUE。
   捕获cx_sy_itab_line_not_found ## no_handler。
 ENDTRY。
风早神人
2楼-- · 2020-08-30 21:53

请使用CODE按钮设置代码格式,以便以更加用户友好的格式(彩色)显示代码。

微wx笑
3楼-- · 2020-08-30 21:48

鉴于此,应将字段符号用于动态目的和非常重要的优化需求。

并且不建议使用Clean-Code

(我尚未测试代码)

 TRY。
      ms_spc_db-estrh [匹配= ABAP_FALSE子ID = is_estrh_tar-subid]-匹配= ABAP_TRUE。
   捕获cx_sy_itab_line_not_found。
 ENDTRY。
落灬小鱼
4楼-- · 2020-08-30 21:57

第一个代码块-"传统"阅读表:

如果is_estrh_tar不是INITIAL。
   读取表ms_spc_db-estrh,关键字匹配= abap_false subid = is_estrh_tar-subid ASSIGNING FIELD-SYMBOL()。
   如果已分配。
     es_estrh_db =  -matched = abap_true。
     UNASSIGN 。
   万一。  " 
 万一。  " ls_estrh_ta 

第二个代码块-通过构造函数运算符:

 es_estrh_db = COND#(当is_estrh_tar不是初始的时
                       值#(ms_spc_db-estrh [匹配= abap_false子ID = is_estrh_tar-subid]可选))。
 ms_spc_db-estrh [recn = es_estrh_db-recn] -matched = COND#(当es_estrh_db不是最初的名称时,则为abap_true)。

提示,希望当我单击"现在提交"时能格式化;)

最好的问候
朱利安·霍恩

天桥码农
5楼-- · 2020-08-30 21:44

我认为您不需要 像这样检查is_estrh_tar的条件。 但对于动态方式,您可以尝试在[]中使用函数方法:

 ASSIGN ms_spc_db-estrh [matched = abap_false subid = func => in(is_estrh_tar-subid)] TO 
# p#

我已将我的评论重新发布为答案

一周热门 更多>