web-dev-qa-db-ja.com

ABAP開発に推奨されるブール型

SAPには、ブール値のコアデータ型がありません。さらに、SAPの高レベルのブール型には、通常、true( 'X')、false( '')、unknown( '-')の3つの状態があります。

今では明らかにブール値が私の開発作業の多くの基礎となっていますが、タイプ(データ要素)の使用法にひどく一貫性がないことに気づきました。これまでのところ、これらが最も一般的であると私は信じています:

  • abap_bool:abapタイププールで定義され、制約はありませんが、定数はtrue、false、unknown、yes、noに対して定義されています
  • os_boolean:データ要素、はい( 'X')またはいいえ( '')
  • xfeld:データ要素True( 'X')またはFalse( '')には、チェックボックスとして記述されているフィールドラベルがありません

私のコードでは、主にabap_boolを使用しました。これは、文字値の代わりに定数を使用できるためです。abap_truexfeldに割り当てることができなかったわけではありません。ただし、このタイプのプールが常に利用できるとは限らないことに注意してください。

私は今、ブール値のベストプラクティスについて疑問に思っています。具体的には次のとおりです。

  • 使用すべき好ましいタイプはありますか?
  • Abapタイププールを使用すると、特定のモジュールまたはシナリオで問題が発生しますか?
  • 未知の、または実際に任意の文字値を含むabap_boolの可能性は重要ですか?
18
Lilienthal

コーディングでは、型プールABAPとその定数を使用します。古いシステムでは手動で含める必要があるかもしれませんが、常に利用可能である必要があります。辞書要素については、必要に応じて説明を追加できるように、デフォルトのドメインのいずれかを使用して独自のデータ要素を作成することを好みます。 WDY_BOOLEANも使用できます。

11
vwegert

公式ABAPプログラミングガイドライン のルール6.11に従って、abap_boolを使用する必要があります。

ルール6.11:真理値にabap_boolデータ型を使用する

真理値を明示的に処理するには、実際のブールデータ型の回避策としてabap_bool型を使用します。この方法で宣言されたデータオブジェクトには、対応する定数abap_trueおよびabap_false(およびabap_undefined)以外の値が含まれることは想定されていません。

8
Eduardo Copat

リリース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_systemABAP_BOOL-value (abap_true( 'X')またはabap_false( ''))を返す必要があります

オンラインヘルプ に例があります。

3
knut