Предпочтительный булев тип для разработки ABAP
В SAP нет основного типа данных для булевых значений. Кроме того, булевы типы более высокого уровня в SAP обычно имеют три состояния: true ('X'), false ('') и неизвестные ('-').
Теперь очевидно, что логические элементы являются краеугольным камнем многих моих разработок, но я понял, что я не был ужасно последователен в использовании моего типа (элемента данных). Пока я считаю, что они наиболее распространены:
-
abap_bool
: определены в пуле типов abap, unconstrained, но константы определены для true, false, unknown, yes и no
-
os_boolean
: элемент данных, Да ('X') или Нет ('')
-
xfeld
: элемент данных, True ('X') или False (''), отсутствует метка поля, описанная как флажок
В моем коде я в основном использовал abap_bool
, так как теперь я могу работать с константами вместо знаковых значений, а не с тем, что я не мог назначить abap_true
для xfeld
. Тем не менее, я был предупрежден, что этот пул типов не всегда доступен.
Теперь я задаюсь вопросом о лучших методах для булевых значений, в частности:
- Есть ли предпочтительный тип, который я должен использовать?
- Будет ли использование пула типов abap вызывать проблемы в определенных модулях или сценариях?
- Есть ли возможность abap_bool, содержащая неизвестное или даже какое-либо значение символа?
Ответы
Ответ 1
Я использую пул типов ABAP
и его константы в кодировании. Он всегда должен быть доступен, хотя вам, возможно, придется включать его вручную в более старые системы. Для элементов словаря я предпочитаю создавать свои собственные элементы данных, используя любые домены по умолчанию, чтобы я мог добавлять описания в соответствии с моими потребностями. Вы также можете использовать WDY_BOOLEAN.
Ответ 2
Согласно правилу 6.11 Официального руководства по программированию ABAP вы должны использовать abap_bool.
Правило 6.11: Используйте тип данных abap_bool для значений истины
Чтобы явно обрабатывать значения истинности, используйте тип abap_bool в качестве обходного пути для реального Логический тип данных. Объект данных, объявленный таким образом, не является должен содержать другие значения, чем соответствующие константы, abap_true и abap_false (а также abap_undefined).
Ответ 3
Обновление для Выпуск 7.40, SP08:
С выпуском 7.40, SP08 вы получаете вызовы Predicative Method, и вы можете закодировать что-то вроде:
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 ('' ))
В приведенной ниже форме интерактивная справка.
Ответ 4
К сожалению, это ошибка ABAP... не имеющая фундаментального булева типа... только булевых выражений. Итак, замечательная вещь в ABAP заключается в том, что на выбор существует так много булевых типов!
Спустя много лет я считаю, что лучший способ - просто бросить свой собственный (к сожалению). Если вы выполняете классовую разработку, всегда добавляйте константы true
и false
(и undefined
, если хотите) в базовый класс, и определяете свои собственные логические и/или boolean_undefined типы.