首页 > 解决方案 > ABAP 中的条件输入

问题描述

我们都知道这个花哨的新伪三元运算符为 COND:

COND #( WHEN 1 = 1 THEN something ELSE everything ).

然而,最近在实践过程中,我注意到返回变量的类型很奇怪:它总是获取第一个 THEN 操作数的类型,这已由ABAP 帮助确认。

如果操作数类型不是完全可识别的,则必须在第一个 THEN 之后指定具有静态可识别类型的操作数(将构造函数参数传递给具有通用类型形式参数的实际参数时除外)。然后使用这种类型。

DATA(val) = COND #( WHEN quantity NE '0.00' THEN CONV wrbtr( quantity ) ELSE '' )

在此示例中,val变量将始终具有压缩类型,而忽略的值quantity

我们如何在这里实现条件输入?即WRBTR非空数量类型和空数量字符串类型。在将内部数据传递到外部系统、外部方法/FMS 以及外部格式(Excel、CSV)时,这通常是一个要求。

COND和运算符是否缺少一些语法CONV?我们可以在他们的帮助下实现这一目标吗?或者也许有一些更花哨的语法,除了

IF quantity NE '0.00'.
  val = VALUE wrbtr(  ).
ELSE.
  val = VALUE string(  ).
ENDIF.

标签: type-conversionabapconditional-operator

解决方案


ABAP 中没有条件输入。作为一种完全类型化的语言,每个变量在编译时都需要一个明确的类型。

顺便说一句,您提供的示例不起作用:

DATA quantity TYPE wrbtr.
DATA val TYPE wrbtr.
IF quantity NE '0.00'.
  val = '3.12'.
ELSE.
  val = VALUE string(  ).
ENDIF.

valwrbtr即使执行了,仍然会有 type ELSE。ABAP 首先将值转换为string,然后再转换为目标wrbtr


推荐阅读