2.18 データ・クラス

データ・クラスは、値を定義するが表示されないコンポーネントです。多くの場合、データ・クラスはリポジトリのフィールドに対応します。

リポジトリからフォームにフィールドをドラッグすると、フィールドのビジュアライゼーションが作成されます。これを試すために、フィールド#SALARYをフォームにドラッグします。フィールドのこの定義が作成されます。

DEFINE_COM class(#SALARY.Visual) name(#SALARY) 

 

ここで、クラスが#SALARY.Visualであることに注意してください。Visualクラスは、値を表示し、ユーザーの入力を受け入れるコンポーネントを作成します。エディターの[詳細]タブで、Visualクラスのすべてのプロパティを見ることができます。大部分は、フィールドが表示される方法を制御します。

今度は、クラスの名前からVisualの修飾子を削除します。

DEFINE_COM class(#SALARY) name(#SALARY) 

 

この変更されたステートメントは、#SALARYのデータ・クラスのコンポーネントを定義するようになりました。フィールドは、フォームに表示されなくなります(ビジュアル表示されていないため)。データ・クラスのコンポーネントは、コンポーネントの値を記述するだけです。つまり、コンポーネントの基本的な特性(データ・タイプ、長さ、小数点など)です。

エディターの[詳細]タブで、#SALARYデータ・クラスのプロパティを見ることができます。#SALARY.Visualクラスと比較すると、プロパティの数が非常に少ないことに注目してください。

データ・クラスの使用

データ・クラス・コンポーネントを使用すると、以下のことができます。

変数を作成する

フィールドまたはprimitiveデータクラスの特性(タイプ、プロパティなど)を持つ簡単な変数を作成する場合。

変数としてのデータ・クラス」を参照してください。

 

スピン編集ボックス内

スピン編集ボタンがついた数値フィールドを表示する場合は、フォームにスピン編集ボックスを追加し、それからフィールドをスピン編集のDataClassプロパティの値として指定します。

例えば、フィールド#SALARYをフォームに追加すると、標準の入力/出力フィールドとして表示されます。このフィールドにスピン・ボタンをつけて表示する場合は、最初にコンポーネントにスピン編集ボックスを追加し、それからフィールド#SALARYをスピン編集のDataClassプロパティの値として指定する必要があります。スピン編集ボックスは、スピン・ボタンとは別に#SALARYフィールドと同じように動作します。

スピン・ボタンは、数の増加に使用されるので、スピン編集ボックスのDataClassプロパティの値には、数値フィールドのみが使用できます。

 

コンボ・ボックス内

コンボ・ボックスの編集部分に入力される値にフィールドの特性(タイプや長さ)とルールを適用するには、フィールドをコンボ・ボックスのDataClassプロパティの値として指定します。

例えば、コンボ・ボックスに入力される値を#SALARYフィールドに受け入れられる数値にするには、#SALARYをコンボ・ボックスのDataClassプロパティの値にします。

この他のあまり使用されないコンボ・ボックスのDataClassプロパティの使用法では、コンボ・ボックスの編集部分に指定されたフィールドの値を表示します。

通常、コンボ・ボックスの編集部分には、最初の列(DisplayPositionが1)の現在のアイテムの値が表示されます。最初の列のソースとして使用されるフィールド以外のフィールドの値を編集エリアに表示するには、このフィールドをDataClassとして指定します。このフィールドは、コンボ・ボックスの他の列のソースとして使用されるフィールドのいずれか、またはリポジトリ内の他のフィールドです。編集エリアに列を表示する場合、DisplayPositionを1に変更する方が簡単なので、通常はコンボ・ボックス内の列として使用するフィールドをDataClass値として指定することはありません。より典型的な使用方法としては、複数列の現在値を結合させるフィールドや、DataClassとしてフィールドを使用して編集エリアで全ての値が表示されるようにする場合などです。 

例えば、コンボ・ボックスに従業員の名前と名字の列がある場合は、この2つのフィールドの値を連結したフィールドをDataClassとして使用できます。

 

プロパティ・シート内

プロパティ・シートのエントリーを作成する場合。プロパティ・シートの各エントリーにデータ・クラスを割り当て、エントリーの値を表示したり変更する方法を処理します。「2.20 プロパティ・シート」を参照してください。

 

変数としてのデータ・クラス

データ・クラス・コンポーネントをリポジトリに登録されているフィールドに基づいて定義できます。以下は、自分のデータ・クラス・コンポーネントを定義する方法の例です。

 

DEFINE_COM class(#GIVENAME) name(#USER_GIVENAME) 
DEFINE_COM class(#EMPNO) name(#LAST_EMPNO) 
DEFINE_COM class(#SALARY) name(#SALARY) 
DEFINE_COM class(#SALARY) name(#OLD_SALARY) 
DEFINE_COM class(#SALARY) name(#NEW_SALARY) 

 

以下のようにコマンドを使用してコンポーネントを操作します。

 

SET com(#SALARY) value(34000.56)
SET com(#OLD_SALARY) value(12567.45)
SET com(#NEW_SALARY) value(#OLD_SALARY.Value)
IF cond('#SALARY.Value <= #OLD_SALARY.Value')

 

上の#SALARY、#OLD_SALARY、および#NEW_SALARYは、すべて#SALARYクラスのコンポーネントです。クラス定義は、タイプ、長さ、小数部の桁数などを定義します。

重要なことですが、LANSAリポジトリの#SALARYは、オブジェクトのクラスを定義します。コンポーネントのインスタンスは、定義しません。インスタンスは、DEFINE_COMステートメントで定義され、異なる名前を持つ多数のインスタンスが存在します。デフォルトでは、コーディングを簡単にするために、コンポーネントはクラスと同じ名前になります。

このコンポーネントは、簡単なので自分の#EMPNO、#SALARY、#GIVENAMEなどを処理する場合に比較的簡単に理解できます。

ただし、リポジトリには、LANSA組み込みのその他のクラスが多くあります。これらのコンポーネントは、「primitive」と呼ばれ、名前が#PRIM_で始まります。例えば、#PRIM_ALPHは、primitiveの英数字データ・クラスで、#PRIM_NMBRは、primitiveの数値データ・クラスです。primitiveのコンポーネントは、自分のクラス(またはフィールド)と同様に使用してコード内でコンポーネントを定義できます。

例えば、コード内の文字列変数を定義するには、以下のようにprimitiveの英数字変数に基づいて#MYSTRINGコンポーネントを定義します。

 

DEFINE_COM class(#PRIM_ALPH) name(#MYSTRING)

 

それからこのコンポーネントをコードで使用します。

 

SET com(#MYSTRING) value(#EMPNO)

 

同様に、コード内で数値の変数を定義するには、以下のようにprimitiveの数値データ・クラスに基づいて#MYNUMBERコンポーネントを定義します。

 

DEFINE_COM class(#PRIM_NMBR) name(#MYNUMBER) 

 

primitiveデータ・クラスは、「2.20 プロパティ・シート」の「2.20.2 ピックリスト」を作成するなど特別な使用法もあります。