プロパティー
- シンプル・プロパティー は生成時に EGL に情報を通知するもので、動的に (つまり実行時に) 変更することはできません。シンプル・プロパティーには、value という単一のフィールドのみが含まれています。
以下のように、省略表現を使用して単にプロパティー名と値の設定ブロック内の該当する値を同等と見なすことによって、
このフィールドを設定することができます (値の設定ブロックを参照)。
以下の例では、displayName はシンプル・プロパティーです。
DataItem socSecNum INT { displayName = "Social Security Number"} end - 複合プロパティー も、生成時に EGL に情報を通知するものであり、実行時に変更することはできません。 複合プロパティーとシンプル・プロパティーが異なっているのは、複合プロパティーにはフィールドが 1 つだけではなく、複数あるという点だけです。これらの名前と値の各ペアを、プロパティー・フィールド と呼びます。 複合プロパティーの前には、オペランドがフィールドではなく、プロパティーであることを示す単項 @ 演算子がよく付けられています (@ 演算子を参照)。このトピック内の『複合プロパティー』も参照してください。
- 暗黙フィールド は、プロパティーに良く似た名前値のペアですが、ビルド時はコンパイラーには不可視です。通常、こうした暗黙フィールドは、実行時に変更可能です。EGL はこれらの暗黙フィールドを、例外レコードなどの特定のステレオタイプのパーツに自動的に追加します (例外ステレオタイプを参照)。
- コンソール UI には「疑似プロパティー」もあります。シンプル・プロパティーのように、疑似プロパティーは変数の特定の型を宣言するときに指定できる名前値のペア (ConsoleField など) です。シンプル・プロパティーとは異なり、生成時の効果はありません。 こうした疑似プロパティーは通常は実行時に変更可能ですが、読み取り専用のものも一部存在します。 詳しくは、個々の UI テクノロジーについてのトピックを参照してください。
この文書では「プロパティー」という用語を、上記すべてを指す広い意味で使用します。
これらのプロパティーは値の設定ブロックで設定することができます。値の設定ブロックについては、値の設定ブロックで詳しく説明します。 特定のパーツまたは文で使用可能なプロパティーおよび値について詳しくは、それらのパーツおよび文に関する個々のプロパティーのトピックを参照してください。
- 各タイプのパーツは、一連のプロパティーを定義します。
これらのプロパティーを変更して、パーツの特性を変更できます。
例えば、個々のプログラム・パーツには、コンパイル可能単位の名前を示す alias というプロパティーがあります。
パーツがステレオタイプ化されている場合、そのパーツだけでなく、パーツ内のフィールドに対しても、 追加プロパティーが使用可能です (ステレオタイプを参照してください)。詳しくは、ステレオタイプがそのパーツを特殊化する固有のデータ・アクセスまたは UI テクノロジーを参照してください。
- 一部の変数宣言では、関連するパーツ定義の中で指定されていたプロパティーをオーバーライドできますが、
それは、コンテキストの中でそのプロパティーが重要である場合に限られます。
- プロパティーのオーバーライドは、DataItem パーツに基づいた変数を宣言するときに可能です (DataItem パーツを参照)。
次の定義を例に挙げます。
次の文は、IDNumber 型の UI フィールドを宣言しますが、 この文はユーザーによる数字入力を必要としません。DataItem IDNumber CHAR(9) { minimumInput = 9, // 9 文字の入力が必要 isDecimalDigit = yes, // 数字でなければならない column = "SSN" // 列へ関連付けられている } endmyID IDNumber { isDecimalDigit = no };この例では、オーバーライドは minimumInput と column プロパティーには影響しません。
- レコード・パーツなどのコンポジット・パーツのプロパティーをオーバーライドできます。次の例は、単一フィールドのレコードを定義したものです。
この定義に基づいて変数を宣言する場合、以下のように、color プロパティーの値を指定変更することができます。Record TestRecord y int {color = red}; endmyRec TestRecord {y{color = black}};
- プロパティーのオーバーライドは、DataItem パーツに基づいた変数を宣言するときに可能です (DataItem パーツを参照)。
次の定義を例に挙げます。
- プリミティブ型の変数を宣言するときに、変数宣言のコンテキスト内で使用できる任意のフィールド・レベル・プロパティーを設定できます。
- レコード変数を宣言する場合は、パーツの定義時には設定できない redefines プロパティーを割り当てることができます。 このプロパティーの詳細については、『他のレコード変数を再定義するレコード変数の宣言』を参照してください。
実行時にシンプル・プロパティーまたは複合プロパティーにアクセスすることはできません。(暗黙フィールドにはアクセスできます。) 例えば、リレーショナル・データベース・レコード用にステレオタイプ化された変数を作成する場合、 レコードがアクセスするデータベース表を識別する tableNames プロパティーに 割り当てられた名前の取り出しや変更を行う論理を作成することはできません。 変数宣言の中でプロパティー値をオーバーライドしたとしても、プログラム・ロジックで開発時に指定した値を変更することはできません。
そうしたプロパティー値へのランタイム・アクセスが行われないことは、変数の内容を代入したり、 その変数をパラメーターとして使用したりするときに、プロパティー値が内容と一緒に転送されないことを意味します。 同様に、レコードを EGL 関数に渡す場合、パラメーターはフィールド内容を受け取りますが、 開発時に割り当てられていたプロパティーは保存します。 つまり、関数からはプログラムがレコード・プロパティーに対して行った指定変更を識別することができません。
変数名とプロパティー
- 基本プログラム
- inputRecord
- JSF ハンドラー・ステレオタイプ
- onConstructionFunction、initialUI 配列要素。
- Rich UI ハンドラー・ステレオタイプ
- onConstructionFunction、validationByPassFunctions、validatorFunction、viewRootVar
- SQLRecord ステレオタイプ
- keyItems
- その他のプロパティー
- msgField、numElementsItem、selectedIndexItem、selectedRowItem、selectedValueItem 、selectFromListItem、validatorDataTable、validatorFunction、redefines
複合プロパティー
myService ExampleService {
@xml {
name="HelloWorld",
namespace="http://my.website/services"} }
...
end
実行時に、複合プロパティーやそのプロパティー・フィールドにアクセスすることはできません。
代入とプロパティー
myVar1 INT {color = red} = 5;
myVar2 INT {color = blue} = 2;
myVar1 = myVar2;
代入後、myVar1 の値は 2、色は赤になります。
変数を引数として関数に渡す場合も、同様になります。 関数は変数の値を受け取りますが、そのプロパティーの内容は受け取りません。
myDictionary1 Dictionary { caseSensitive=NO };
myDictionary2 Dictionary { caseSensitive=YES };
myDictionary1 = myDictionary2;
代入後は、myDictionary1 は、同じ Dictionary パーツである myDictionary2 として示されるので、myDictionary1 が大/小文字を区別するようになります。