我可以用line_exists检查初始值或不相等吗?



ABAP 7.40 添加了line_exists( ... )谓词函数来分析内部表。但是有什么方法可以检查是否存在特定列为初始值或与目标值不同的行?

例如,如何检查具有初始材料列的行,如此表中的第三行?

Document        Country     Material    
9001287         US          198572111
9001296         FR          160023941       
9001297         EG                      
9001299         DK          873001102   

我可以检查带有line_exists( lt_itab[ Country = 'DK' ] )的丹麦条目,line_exists( lt_itab[ Material = '' ] )是有效的,但<>NE似乎都没有被接受。例如,似乎也没有办法检查国家/地区不是"FR"的行?

如果没有办法用line_exists做到这一点,最浓缩的替代方法是什么?

LOOP 是一种检查方法,我不知道是否有更好的方法:

LOOP AT itab
TRANSPORTING NO FIELDS
WHERE country NE 'FR'.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
" line exists
ELSE.
" line does not exist
ENDIF.

不,你不能。

line_exists是简单的谓词函数,它只接受表表达式tab[ a = b ]。而且,正如我们所知,表表达式只是 READ TABLE 的新语法,仅此而已。所有规则和约束(包括允许的比较类型(也应用于表达式。

查看H. Keller的博客了解更多详情。

有点晚了。但是现在您可以执行以下操作:

xsdbool( line_exists( lt_itab[ Country = 'DK' ] ) ) = abap_false

稍后,这是另一种(更短的(方法可以做与Andreas的答案相同的事情:

IF NOT line_exists( lt_itab[ country = 'DK' ] ).

但是,这将测试表中是否没有等于DK 的行。它测试是否有任何不等于 DK 的线。 如果你想要第二件事,你必须求助于LOOP,正如József指出的那样。或者你可以像这样把它压缩成一行:

IF lines( VALUE type( FOR x IN lt_itab WHERE ( country <> 'DK' ) ( x ) ) ) > 0.

不幸的是,你不能使用VALUE #( ),所以你必须输入lt_itab的类型 .

如果国家是主键,另一种可能性是

IF lines( FILTER #( lt_itab WHERE country <> 'DK' ) ) > 0.

如果国家/地区只是次要键,您可以这样做

IF lines( FILTER #( lt_itab USING KEY country WHERE country <> 'DK' ) ) > 0.

相关内容

  • 没有找到相关文章

最新更新