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
。但是,有人提醒我,这个类型池可能并不总是可用的。
我现在想知道布尔值的最佳实践,特别是:
- 是否有我应该使用的首选类型?
- 使用abap类型池会在某些模块或场景中导致问题吗?
- abap_bool包含未知或任何字符值的可能性重要吗?
我在编码中使用类型池ABAP
及其常量。它应该始终可用,尽管您可能必须在较旧的系统上手动包含它。对于字典元素,我更喜欢使用任何默认域创建我自己的数据元素,这样我就可以添加描述来满足我的需要。您也可以使用WDY_BOOLEAN
根据官方ABAP编程指南的规则6.11,你应该使用abap_bool.
规则6.11:为真值使用abap_bool数据类型明确处理真值,使用abap_bool类型作为实值的解决方案布尔数据类型。以这种方式声明的数据对象则不是应该包含其他值而不是相应的常量,Abap_true和abap_false(以及abap_undefined).
Release 7.40, SP08更新:
在Release 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值(abap_true ('X')或abap_false (' '))
联机帮助有示例
可悲的是,这是ABAP的祸根…没有基本的布尔类型……只有布尔表达式。因此,ABAP的奇妙之处在于有如此多的布尔类型可供选择!
多年之后,我相信最好的方法就是自己滚动(遗憾的是)。如果您进行基于类的开发,那么总是只需在基类中添加true
和false
(如果您愿意,还可以添加undefined
)常量,并定义自己的boolean和/或boolean未定义类型。