ABAP开发的首选布尔类型

ABAP开发的首选布尔类型,abap,Abap,SAP没有布尔值的核心数据类型。此外,SAP中的高级布尔类型通常有三种状态:true('X')、false('')和unknown('-') 很明显,布尔值是我很多开发工作的基石,但我意识到,我的类型(数据元素)使用并不十分一致。到目前为止,我认为这些是最常见的: abap\u bool:在abap类型池中定义,不受约束,但为true、false、unknown、yes和no定义了常量 os_boolean:数据元素,是('X')或否('') xfeld:数据元素,True('X')或Fals

SAP没有布尔值的核心数据类型。此外,SAP中的高级布尔类型通常有三种状态:true('X')、false('')和unknown('-')

很明显,布尔值是我很多开发工作的基石,但我意识到,我的类型(数据元素)使用并不十分一致。到目前为止,我认为这些是最常见的:

  • abap\u bool
    :在abap类型池中定义,不受约束,但为true、false、unknown、yes和no定义了常量
  • os_boolean
    :数据元素,是('X')或否('')
  • xfeld
    :数据元素,True('X')或False(''),缺少字段标签,描述为复选框
在我的代码中,我主要使用了
abap\u bool
,因为我可以使用常量而不是字符值,并不是说我不能将
abap\u true
赋值给
xfield
。然而,有人提醒我,这种类型的池可能并不总是可用的

我现在想知道布尔值的最佳实践,特别是:

  • 有我应该使用的首选类型吗
  • 使用abap类型池是否会在某些模块或场景中导致问题
  • abap_bool包含未知或任何字符值的可能性是否重要

我在编码中使用类型pool
ABAP
及其常量。它应该始终可用,尽管您可能必须在旧系统上手动包含它。对于字典元素,我更喜欢使用任何默认域创建自己的数据元素,以便添加描述以满足我的需要。您也可以使用WDY_布尔值。

根据的规则6.11,您应该使用abap_布尔值

规则6.11:对真值使用abap_bool数据类型

明确 处理真值时,使用abap_bool类型作为解决实际问题的方法 布尔数据类型。以这种方式声明的数据对象不是 应包含除相应常数以外的其他值, abap_true和abap_false(以及abap_未定义)

更新内容:

在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.
您的方法(在示例
中为生产系统
)必须返回(abap\u true('X')或abap\u false(“”))


世界银行有一个例子。

不幸的是,这是ABAP的祸根。。。没有基本的布尔类型。。。只有布尔表达式。所以ABAP中的奇妙之处在于有这么多布尔类型可供选择


多年后,我相信最好的办法就是自己滚(很遗憾)。如果您进行基于类的开发,那么始终只需在基类中添加一个
true
false
(和
undefined
,如果您愿意的话)常量,并定义您自己的布尔值和/或布尔值未定义类型。

您还可以在Webdynpro上下文中使用WDY\U布尔值,或在常规上下文中使用布尔值作为数据元素。您也可以使用FLAG,有几种方法,都是一样的;)甚至CHAR1也可以解决bool:d这个类型不能使用的地方是在Web Dynpro参数定义中,因为“在Web Dynpro中不支持使用类型池”。@Lilienthal-
WDY\u BOOLEAN
可以在WebDynpro应用程序中使用。@mjturner
WDY\u BOOLEAN
只支持二进制值,而不支持未定义的abap\u,但是,XFELD
和OS_BOOLEAN
@Lilienthal确实如此。必须承认,我一点也不喜欢abap_undefined(也不记得曾经在愤怒中使用过它!)@mjturner我绝对同意,并且只能回忆起我曾经使用它作为三态返回值的一次。当在ABAP中开发时,假设布尔族只有两种可能的状态似乎是相当安全的。非常有趣。但如果我读得正确,返回参数的任何非初始值都将被视为求值为true。正如您所说,使用
abap\u true
abap\u false
可以解决这个问题。嗯,为什么您要过度使用abap类型池中提供的
abap\u…
常量来定义自己的值?“我不确定较短的版本和对新开发人员来说更明显的正确/错误是否会增加额外的维护工作量和混乱程度。@Lilienthal,虽然类型池可以工作,但问题是如果您开发多版本软件。在某些较旧的系统上,它们对在何处包含类型池非常敏感。此外,我们更愿意重新声明我们自己的所有类型(即使系统上存在合适的类型),因为这样在SAP决定将来删除/更改某些类型时会更加稳定。拥有自己的类型也意味着您可以在更改基本类型时更轻松地进行重构。(例如,将
未定义的
首字母
添加/更改为布尔类型?)