SAP没有布尔值的核心数据类型。此外,SAP中更高级别的布尔类型通常有三种状态:true('X'),false('')和unknown(' - ')。
现在很明显,布尔是我开发工作的基石,但我意识到我的类型(数据元素)用法并不是非常一致。到目前为止,我认为这些是最常见的:
abap_bool
:在abap类型池中定义,不受约束但常量定义为true,false,unknown,yes和no os_boolean
:数据元素,是('X')或否('')xfeld
:数据元素,True('X')或False(''),缺少字段标签,描述为复选框在我的代码中,我主要使用abap_bool
,因为我可以使用常量而不是字符值,而不是我无法将abap_true
分配给xfeld
。但是,我被警告过,这种类型的池可能并不总是可用。
我现在想知道布尔值的最佳实践,特别是:
答案 0 :(得分:11)
我在编码中使用类型池ABAP
及其常量。它应始终可用,但您可能必须在旧系统上手动包含它。对于字典元素,我更喜欢使用任何默认域创建自己的数据元素,以便我可以添加描述以满足我的需要。您也可以使用WDY_BOOLEAN。
答案 1 :(得分:8)
根据Official ABAP Programming Guidelines的规则6.11,您应该使用abap_bool。
规则6.11:使用abap_bool数据类型实现真值
明确地说 处理真值,使用abap_bool类型作为真实的变通方法 布尔数据类型。以这种方式声明的数据对象不是 应该包含除相应常量之外的其他值, abap_true和abap_false(以及abap_undefined)。
答案 2 :(得分:3)
在版本7.40,SP08中,您可以获得谓词方法调用,您可以编写如下代码:
IF cl_abap_demo_services=>is_production_system( ). "There is no '= abap_true' needed!
cl_demo_output=>display(
'This demo cannot be executed in a production system' ).
LEAVE PROGRAM.
ENDIF.
您的方法(在示例is_production_system
中)必须返回ABAP_BOOL-value(abap_true(' X')或abap_false(''))
online help有一个例子。
答案 3 :(得分:-2)
可悲的是,这是ABAP的祸根......没有基本的布尔类型......只有布尔表达式。所以ABAP中的精彩之处在于有很多布尔类型可供选择!
多年后,我相信最好的方式就是滚动自己(遗憾的是)。如果你进行基于类的开发,那么只需在基类中添加true
和false
(以及undefined
,如果你愿意的话)常量,并定义你自己的boolean和/或boolean_undefined类型。