ABAP开发的首选布尔类型

时间:2014-03-12 14:59:04

标签: sap abap

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包含未知或任何字符值的可能性是否重要?

4 个答案:

答案 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)

Release 7.40, SP08的更新:

在版本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中的精彩之处在于有很多布尔类型可供选择!

多年后,我相信最好的方式就是滚动自己(遗憾的是)。如果你进行基于类的开发,那么只需在基类中添加truefalse(以及undefined,如果你愿意的话)常量,并定义你自己的boolean和/或boolean_undefined类型。