Предпочтительный булев тип для разработки 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 и falseundefined, если хотите) в базовый класс, и определяете свои собственные логические и/или boolean_undefined типы.