我正在尝试学习 abap 并使用参数编写我的第一个简单计算器。
但是我偶然发现了一个问题。当您将其中一个参数留空时,我想吐出一个错误,这样您就无法传递任何数字。
但是数字 0 也被认为是“无数字”,因为从数学角度来看 0 没什么,但是就像我在我的例子中所说的那样,我希望 0 被认为是“某物”。
PARAMETERS: inp_z1 TYPE p DECIMALS 2 DEFAULT 1,
operator,
inp_z2 TYPE p DECIMALS 2 DEFAULT 1.
DATA: inp_erg TYPE p DECIMALS 10,
inp_ergstr TYPE string,
error_boolean.
IF inp_z1 IS INITIAL OR inp_z2 IS INITIAL.
WRITE: / TEXT-r01.
error_boolean = 'X'.
ELSE.
...
我尝试只做 IF inp_z1 < 0 or inp_z2 < 0 but that dosent allow you to use negative numbers
您不能使用某些整数值来表示该值所代表的数字之外的附加特殊含义,因为不存在这样的值。如果您需要让您的字段需要输入某些值,您可以根据您的要求通过多种方式完成。
一种方法是向每个强制参数添加关键字
OBLIGATORY
,以静态设置属性以指示字段为必填字段:
PARAMETERS: inp_z1 TYPE p DECIMALS 2 DEFAULT 1 OBLIGATORY,
operator OBLIGATORY,
inp_z2 TYPE p DECIMALS 2 DEFAULT 1 OBLIGATORY.
另一种方法是动态设置此属性。在您的情况下,由于有多个字段必须由用户输入,因此最好使用关键字
MODIF ID ...
将所有字段分配给一个组,并更改该组的属性。
将组 i01 分配给所有必填字段:
PARAMETERS: inp_z1 TYPE p DECIMALS 2 DEFAULT 1 MODIF ID I01,
operator MODIF ID i01,
inp_z2 TYPE p DECIMALS 2 DEFAULT 1 MODIF ID i01.
之后在事件
AT SELECTION-SCREEN OUTPUT
中,需要动态设置所需的属性screen-required
(您可以将以下代码放在参数块下面)。请注意,条件中的组名称应始终大写,即 I01:
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-group1 = 'I01'.
screen-required = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
附注您还可以使用相同的构造来更改各个字段的属性,即:
...
IF screen-name = 'INP_Z1'.
screen-required = '1'.
MODIFY SCREEN.
ENDIF.
...
然后在标准事件中
START-OF-SELECTION
,您可以对逻辑进行编程。只需放置
START-OF-SELECTION.
在上一个块之后,然后编写代码。