オプションと列挙
Option データ型は 0 から始まる列挙型です。したがって、オプション値を整数に変換できます。 このため、Option データ型は numeric データ型であり、オプション値は整数として格納されます。
Option 型の変数を定義するには、Option データ型のフィールドで使用されている OptionMembers プロパティは使用できません。 使用可能なオプションは、変数定義の後にコンマで区切った一覧として一覧表示する必要があります。

他のオブジェクト (他のコード単位、ページ、またはテーブルなど) で同じ Option 型を再利用する場合は、使用可能なすべての値を再定義する必要があります。 後で特別な値を追加する場合は、この追加の値を使用してすべてのオブジェクトを変更する必要があります。 テーブルのオプションは、テーブルの拡張機能では拡張できません。
より適切な方法は、Enum オブジェクトを使用することです。 列挙は、固有の番号と名前を持つ独立したオブジェクトです。 Enum オブジェクトは、再定義の必要がなく、他のすべてのオブジェクトで使用できます。 Enum オブジェクトは、列挙型拡張機能を使用して拡張することもできます。
プログラミングで Enum とも呼ばれる列挙型は、一連の名前付き定数で構成される型の宣言に使用されるキーワードです。 名前付きの定数のリストは、列挙型リストと呼ばれることもあります。 列挙型は、テーブル フィールド、ローカル変数とグローバル変数、およびパラメーターとして使用できます。
AL で列挙型を宣言するには、ID と名前を指定する必要があります。 列挙型リストは値で構成され、各値は ID と値で宣言されます。 値 ID は列挙型リストの序数値で、一意である必要があります。 列挙値が UI に表示される場合、これらの値は宣言の順序で並べ替えられます。 また、拡張機能 B が拡張機能 A を拡張する場合、拡張機能 A で宣言される列挙値は、拡張機能 B で宣言される列挙値よりも前に表示されます。

enums および enumextension オブジェクトにはオブジェクト ID が含まれていますが、これらのオブジェクトはライセンスでは適用されません。 以前のバージョンで行われていたテーブルの範囲の再利用、およびデプロイ時のライセンスに対するチェックは、現在は行われません。 一意性の検証はインストール中に行われ、Enum オブジェクト ID が既にインストールされている列挙型の ID と同じ場合は、インストールが失敗します。 そのため、割り当て可能な範囲内のオブジェクト ID を使用することが重要です。 これは AppSource アプリに適用されますが、テナント拡張機能またはオンプレミスごとには適用されません。 列挙型では、配置されるテーブルと同じ ID を使用する必要はありません。
Extensible プロパティが true に設定されている列挙型のみ拡張することができます。
列挙型のキャプションを作成する際は、キャプションにコンマを含めないようにすることが重要です。 Caption = 'Diamond Level, with bonus' のようにコンマをキャプションに含めた場合、UI では複数行で表示されます。 また、この動作によって、ユーザーが UI で選択した実際値が、データベースに保存される値と対応しなくなります。
列挙型のキャプションの .xlf ファイルにコンマが含まれる場合、AppSourceCop 警告がトリガーされます。
列挙型を拡張して列挙型リストに値をさらに追加するには、Extensible プロパティを true に設定する必要があります。 Loyalty 列挙型を値 Diamond で拡張する列挙型拡張の構文を以下に示します。
enumextension 50130 LoyaltyWithDiamonds extends Loyalty
{
value(50130; Diamond)
{
Caption = 'Diamond Level';
}
}