使用字符串模板和新的COND语法

时间:2016-03-14 17:37:09

标签: sap abap

在字符串模板中使用时,我发现了新的COND语法的奇怪行为。这是关于字符串长度默认。即使条件不满足,看起来字符串的长度也会默认为THEN之后的长度。

查看以下代码!

REPORT zzz.

CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
  PUBLIC SECTION.
    CLASS-METHODS:
      main.
ENDCLASS.

CLASS lcl_main IMPLEMENTATION.
  METHOD main.
    DATA(l_bool) = abap_true.
    DATA(l_v_line) = |{ COND #( WHEN l_bool IS INITIAL THEN 'AAA' ELSE 'BBBB' ) }|.
    DATA(l_v_line2) = |{ COND #( WHEN l_bool IS INITIAL THEN 'AAA' ELSE 'BBBB' ) WIDTH = 4 }|.
    DATA(l_v_line3) = |{ COND #( WHEN l_bool IS INITIAL THEN 'AAA ' ELSE 'BBBB' ) }|.
    DATA(l_v_line4) = |{ COND #( WHEN l_bool IS NOT INITIAL THEN 'BBBB' ELSE 'AAA' ) }|.
    WRITE /: l_v_line, l_v_line2, l_v_line3, l_v_line4.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  lcl_main=>main( ).

输出

BBB
BBB·
BBBB
BBBB

即使条件的计算结果为false,前两个变量l_v_linel_v_line2也会被截断。如果我在AAA l_v_line3之后添加空格,那么就可以了。将BBBB放在THEN之后l_v_line4解决问题。

我的问题是:这种行为是否记录在SAP文档中的任何位置?我找不到任何可以引导我的线索。

1 个答案:

答案 0 :(得分:4)

from ABAP documentation

  

#字符作为操作数类型的符号。

     

...

     

如果操作数类型不完全可识别,则操作数带有   静态可识别类型必须在第一个之后指定   THEN 即可。然后使用这种类型。