openUI

ユーザーは OpenUI 文を使用して、インターフェースが consoleUI を基にしているプログラムと対話することができます。 この文では、ユーザー・イベントおよびプログラム・イベントを定義し、互いに応答する方法を指定します。

OpenUI 文の構文は、次のようになります。


OpenUI 文
OpenAttributes
OpenAttributes では、次の例のように、それぞれをコンマで区切ったプロパティーと値のペアのセットを定義します。
  allowAppend = yes, allowDelete = no
各プロパティーは、ユーザーの対話に影響し、 場合によっては、OpenableElements で参照されている consoleUI 変数のプロパティーを上書きします。 プロパティーには、次のものがあります。
allowAppend
ユーザーがスクリーン内の arrayDictionary の最後にデータを挿入できるかどうかを指定します。 yes の場合は、次のようになります。
  • ユーザーは、データを含む最後の行の後にくる arrayDictionary 行にカーソルを移動させて、データの行を挿入する
  • ユーザーのアクションによって、その arrayDictionary にバインドされている動的配列にエレメントを追加する
  • 変数型の場合: ArrayDictionary
  • プロパティー・タイプ: Boolean
  • : allowAppend = no
  • デフォルト: yes。 ただし、openUI プロパティー displayOnly が yes に設定されている場合、デフォルトは no
allowDelete
ユーザーがスクリーン内の arrayDictionary から行を削除できるかどうかを指定します。 yes の場合は、次のようになります。
  • ユーザーは、その行にカーソルを移動させ、ConsoleLib.key_delete で参照されるキーを押し、行を削除する
  • ユーザーのアクションによって、その arrayDictionary にバインドされている動的配列で関係エレメントを削除する
  • 変数型の場合: ArrayDictionary
  • プロパティー・タイプ: Boolean
  • : allowDelete = no
  • デフォルト: yes。 ただし、openUI プロパティー displayOnly が yes に設定されている場合、デフォルトは no
allowInsert
ユーザーがスクリーン内の arrayDictionary に行を挿入できるかどうかを指定します。 yes の場合は、次のようになります。
  • ユーザーは、既存の行にカーソルを移動させ、ConsoleLib.key_insert で参照されているキーを押して、行を挿入する。
  • 新規の行は、カーソルを表示している行よりも前にくる
  • ユーザーのアクションによって、その arrayDictionary にバインドされている動的配列にエレメントを挿入する
  • 変数型の場合: ArrayDictionary
  • プロパティー・タイプ: Boolean
  • : allowInsert = no
  • デフォルト: yes。 ただし、openUI プロパティー displayOnly が yes に設定されている場合、デフォルトは no
bindingByName

一連の変数を一連の ConsoleField にバインドする方法、特に各変数名を ConsoleField 名と一致させるかどうかを示します。 変数名は BindClause にリスト表示され、ConsoleField 名は「ConsoleField 名 (ConsoleField name)」フィールドの値です。

  • 変数型の場合: ConsoleForm、ConsoleField、または Dictionary。 ただし、arrayDictionary ではない
  • プロパティー・タイプ: Boolean
  • : bindByName = yes
  • デフォルト: no
このオプションの値は、次のとおりです。
no (デフォルト)
変数と ConsoleField を位置によって一致させます。
  • リストの変数ごとの位置
  • consoleForm 内での各 ConsoleField の位置。

consoleField が openUI 文で明示的にリストされるか、dictionary 宣言にリストされるかに応じて、それらの順序により、位置によるバインディングを行うための consoleField の順序が定義されます。 (『ConsoleUI パーツおよび関連する変数』に記されているように、それらの順序によって、ユーザー入力用のタブ順序も定義されます。)

yes
変数と ConsoleField を名前によって一致させます。

バインディング・リスト内に一致する変数が存在しないときに、 consoleField がリストされていたり、dictionary 宣言にあったりすると、consoleField へのユーザー入力は無視されます。 同様に、どのフィールドとも一致しないバインディング変数は無視されます。

実行時には、少なくとも 1 つの consoleField および変数をバインドしなければなりません。 そうしないと、エラーが発生します。

color
ConsoleField のテキストの色を指定します。その値は、ConsoleField 宣言で指定される色をオーバーライドします。
  • 変数型の場合: ConsoleForm、ConsoleField、ArrayDictionary、または Dictionary
  • プロパティー・タイプ: ColorKind
  • : color = red
  • デフォルト: white
このオプションの値は、次のとおりです。
defaultColor または white (デフォルト)
black
blue
cyan
シアン
green
magenta
マジェンタ
red
yellow
currentArrayCount
スクリーン内の arrayDictionary がバインドされている動的配列で使用可能なエレメントの数を指定します。 この値を指定しない場合、すべてのエレメントが arrayDictionary で使用可能になります。
  • 変数型の場合: ArrayDictionary
  • プロパティー・タイプ: INT
  • : currentArrayCount = 4
  • デフォルト: none
displayOnly
consoleField を表示専用として表示するかどうかを指定します。 yes の場合、ユーザーはデータを変更することができず、更新できないよう保護されています。
  • 変数型の場合: ArrayDictionary、Dictionary、ConsoleField、ConsoleForm
  • プロパティー・タイプ: Boolean
  • : displayOnly = yes
  • デフォルト: no
help
ConsoleLib.key_help で示されたキーをユーザーが押したときに表示するテキストを指定します。

このヘルプ・テキストは、openUI コマンド用のものです。 場合によっては、このキーに関連付けられたテキストがよりコンテキスト固有のものであることもあります。 例えば、メニューの各オプションがそれぞれ独自のヘルプ・メッセージを持つことがあります。

  • 変数型の場合: ConsoleForm、ConsoleField、ArrayDictionary、または Dictionary
  • プリミティブ型: String
  • : help = "Update the value"
  • デフォルト: 空ストリング
helpKey
以下の状況が有効な場合、表示用テキストを含むリソース・バンドルを検索するためのアクセス・キーを指定します。
  • カーソルが OpenableElements で識別される ConsoleUI 変数 (ConsoleForm など) にある
  • ユーザーが ConsoleLib.key_help で識別されるキーを押す
helphelpKey の両方を指定した場合、help が使用されます。
  • 変数型の場合: ConsoleForm、ConsoleField、ArrayDictionary、または Dictionary
  • プロパティー・タイプ: String
  • : helpKey = "myKey"
  • デフォルト: 空ストリング

リソース・バンドルは、messageResource で説明されているように、システム変数 ConsoleLib.messageResource によって指定されます。

highlight
ConsoleField が表示されている際に使用される特殊効果がある場合は、 これを指定します。その値は、ConsoleField 宣言で指定される同等の値をオーバーライドします。
  • 変数型の場合: ConsoleForm、ConsoleField、ArrayDictionary、または Dictionary
  • プロパティー・タイプ: HighlightKind[]
  • : highlight = [reverse, underline]
  • デフォルト: [noHighLight]
このオプションの値は、次のとおりです。
noHighlight (デフォルト)
特殊効果なし。この値を使用すると、他の特殊効果をオーバーライドします。
blink
効果なし。
reverse
テキストおよび背景色を反転し、 (例えば) 黒の背景色に淡色文字を表示した場合に背景色は白で、テキストは黒になります。
アンダーライン
影響される領域の下部にアンダーラインを配置します。アンダーラインの色は、 値 reverse が指定されていても、テキストの色です。
intensity
表示フォントを強調する度合いを指定します。
  • 変数型の場合: ConsoleField、ConsoleForm、ArrayDictionary、または Dictionary
  • プロパティー・タイプ: IntensityKind[]
  • : intensity = [bold]
  • デフォルト: [normalIntensity]
このオプションの値は、次のとおりです。
normalIntensity (デフォルト)
特殊効果なし。この値を使用すると、他の特殊効果をオーバーライドします。
bold
テキストを太字で表示します。
dim
入力フィールドが使用不可になっているときに、適宜、輝度を落としてテキストを表示させます。
invisible
書式上に ConsoleField があることを示さないようにします。
isConstruct

openUI 文の目的が、SELECT などの SQL 文で使用するための選択基準を作成することかどうかを指定します。

  • 変数型の場合: ConsoleField、ConsoleForm、Dictionary
  • プロパティー・タイプ: Boolean
  • : isConstruct = no
  • デフォルト: yes
このオプションの値は、次のとおりです。
no (デフォルト)
各 ConsoleField は通常、変数にバインドされます。
yes

openUI 文は、文字型の単一変数にバインドされなければなりません。 その変数は、ConsoleField の初期値を提供しませんが、ユーザーの入力を受け取ります。 そのユーザー入力は SQL WHERE 文節での使用のためにフォーマットされています。

maxArrayCount
スクリーン内の arrayDictionary にバインドされている動的配列に挿入可能な最大行数を指定します。 最大数に到達すると、ユーザーはそれ以上行を挿入することができません。
  • 変数型の場合: ArrayDictionary
  • プロパティー・タイプ: INT
  • : maxArrayCount = 20
  • デフォルト: none
setInitial
ユーザーがその値を修正するまで、ConsoleField の初期値 (consoleForm 宣言で定義済み) を表示するかどうかを指定します。 (ConsoleField の「initialValue」フィールドを設定することによって、初期値を指定します。)
  • 変数型の場合: ConsoleField、ConsoleForm、Dictionary、ArrayDictionary
  • プロパティー・タイプ: Boolean
  • : setInitial = yes
  • デフォルト: no

setInitial の値が no である場合、当初は、バインドされている変数の値が取り出されて表示されます。

OpenableElements
openUI 文が機能することができる ConsoleUI 変数は、次のとおりです。
  • ConsoleForm
  • consoleField、または以下のいずれか:
    • それぞれがコンマで区切られた ConsoleField のリスト
    • consoleForm で宣言され、かつその consoleForm 内の consoleField のセットを参照する dictionary
    • consoleForm で宣言され、かつその consoleForm 内の consoleField 配列のセットを参照する arrayDictionary
  • Menu
  • Prompt
  • Window
BindClause
ConsoleUI 変数とバインドされているプリミティブ変数、レコード、または配列のリスト。 バインディング変数の特性は、openUI 文の動作対象となる consoleUI 変数の特性によって異なります。
  • consoleField に対して、プリミティブ変数を指定できます。
  • スクリーン内の arrayDictionary に対して、arrayDictionary 内で 1 行ごとに 1 エレメントがある、レコードの配列を指定できます。 また、arrayDictionary 内の各行が単一の値を表す場合は、プリミティブ変数の配列を指定することができます。
  • 辞書、または consoleField のリストに対して、プリミティブ変数のリストを指定できます。 あるいは、consoleField にバインドされている一連のフィールドが各エレメントに格納されている、レコードの配列を指定することができます。 この代替方法は、動的配列を、1 行だけしか持たないスクリーン内の arrayDictionary とバインディングすることと同等です。 動的配列を変更するためにレコードの追加、挿入、または削除を行うことができ、いずれの場合も、 一度に 1 つのレコードだけ表示されます。
  • プロンプトに対して、ユーザーの応答を受け取るプリミティブ・フィールドを指定できます。

バインディングの詳細については、『OnEventBlock』(後述) のセクション と『ConsoleUI パーツおよび関連する変数』を参照してください。

OnEventBlock
イベント・ブロック は、多くのイベント・ハンドラー に対して 0 を含むプログラミング構造で、それぞれが特定のイベントに応答するために書き込んだコードを含みます。 イベント・ハンドラーの先頭は、次のように OnEvent ヘッダーです。
  OnEvent(eventKind: eventQualifiers)
eventKind
いくつかのイベントの 1 つ。有効な値については、『イベント・タイプ』で説明されています。
eventQualifier
イベントをさらに定義するデータ。このようなデータは、入力される ConsoleField か、または押されたキー・ストロークになることがあります。

特定のイベントに応答する EGL 文は、後述の例に示すとおり、OnEvent ヘッダーとその次の OnEvent ヘッダーの間にあります (あれば)。 ただし、OnEvent ブロックに参照変数を組み込むことはできません。 ただし、その変数をプログラムのグローバル変数として宣言しておいた場合は、組み込むことができます。

ユーザーは引き続きプログラムと対話し、そのイベント・ハンドラーに関連付けられている イベントが発生すると、プログラムはイベント・ハンドラーを実行します。 ただし、プロンプトを表示することが openUI 文の目的である場合、このユーザーとプログラムの対話は、以下のように完全なループとはいえなくなります。
  1. イベント・ハンドラー (いくつかのうちの 1 つの場合もある) が、ユーザーのキー・ストロークをトラップし、応答する
  2. openUI 文が終了する

ウィンドウに使用可能なイベント・ブロックはありません。

ユーザーと ConsoleForm の対話をガイドする次の例を考慮してください。
		openUI {bindingByName=yes}
			 activeForm
			 bind firstName, lastName, ID
			 OnEvent(AFTER_FIELD:"ID")
				  if (employeeID == 700)
        firstName = "Angela";
        lastName = "Smith";
				  end
  end
そのコードは、次のように機能します。
先の例について、これらの詳細を見てみます。

書式 exit openUIexit 文を発行することによって、openUI 文を終了することができます。

イベント・タイプ

ConsoleUI は、以下のイベントをサポートします。
BEFORE_OPENUI
EGL ランタイムは、OpenUI 文を実行し始めます。このイベントは、 ウィンドウに基づいた変数以外のすべての ConsoleUI 変数に使用可能です。
AFTER_OPENUI
EGL ランタイムは、OpenUI 文の実行を停止しようとしています。このイベントは、 ウィンドウに基づいた変数以外のすべての ConsoleUI 変数に使用可能です。
ON_KEY:(ListOfStrings)
ユーザーは、「ESC」、「F2」、または「CTRL_W」などのストリングで示される特定のキーを押しています。 ストリングをそれぞれ、次の例で示すように区切ることによって、複数のキーを識別することができます。
  ON_KEY:("a", "ESC") 

このイベントは、ArrayDictionary、 ConsoleField、メニュー、またはプロンプトで使用可能です。

BEFORE_FIELD:(ListOfStrings)
ユーザーは、ConsoleField の name フィールドの値に一致するストリングによる指示のとおりに、カーソルを特定の ConsoleField に移動させます。 ストリングをそれぞれ、次の例で示すように区切ることによって、同じ consoleForm の複数の ConsoleField を識別することができます。
  BEFORE_FIELD:("field01", "field02") 
AFTER_FIELD:(ListOfStrings)
ユーザーは、ConsoleField の name フィールドの値に一致するストリングによる指示のとおりに、 カーソルを特定の ConsoleField から移動させます。 ストリングをそれぞれ、次の例で示すように区切ることによって、同じ consoleForm の複数の ConsoleField を識別することができます。
  AFTER_FIELD:("field01", "field02") 
BEFORE_DELETE
スクリーン内の arrayDictionary に関して、ユーザーは ConsoleLib.key_deleteLine に指定されているキーを押していますが、EGL ランタイムはまだ行を削除していません。 プログラムは、行の削除を回避するため、consoleLib.cancelDelete を呼び出すことができます。
BEFORE_INSERT
スクリーン内の arrayDictionary に関して、ユーザーは ConsoleLib.key_insertLine に指定されるキーを押していますが、EGL ランタイムはまだ行を挿入していません。 プログラムは、行の挿入を回避するため、consoleLib.cancelInsert を呼び出すことができます。
BEFORE_ROW
スクリーン内の arrayDictionary に関して、ユーザーはカーソルを行に移動しました。
AFTER_DELETE
スクリーン内の arrayDictionary に関して、ユーザーは ConsoleLib.key_deleteLine に指定されるキーを押し、EGL ランタイムは行を削除しました。
AFTER_INSERT
スクリーン内の arrayDictionary に関して、ユーザーは ConsoleLib.key_insertLine に指定されているキーを押しており、EGL ランタイムは行を挿入しました。 カーソルは、挿入された行から離れます。

ユーザーは、AFTER_INSERT ハンドラーで一般に行われるように、データベースへの変更をコミットする前に行を編集することができます。

AFTER_ROW
ユーザーは、カーソルをスクリーン内の arrayDictionary にある行から移動させました。
MENU_ACTION:(ListOfStrings)
ユーザーが、「menuItem 名 (menuItem name)」フィールドの値に一致するストリングが示すように、menuItem を選択しました。 ストリングをそれぞれ、次の例で示すように区切ることによって、複数の menuItem を識別することができます。
  MENU_ACTION:("item01", "item02") 

isConstruct

プロパティー isConstruct = yes の場合、openUI コマンドにバインドされた変数に置かれたテキストは、この例に示すように特別にフォーマットされます。
  1. openUI 文は 3 つの ConsoleField (従業員年齢、および 都市) の ConsoleForm で機能し、それぞれのフィールドは同じ名前の SQL テーブル列に関連します。

    consoleField プロパティー SQLColumnName を設定することで、consoleField を SQL テーブル列に関連付けます。 また、『ConsoleField プロパティーおよびフィールド』に記されているように、 consoleField プロパティー dataType を設定する必要があります。

  2. ユーザーは以下のようにします。
    • 従業員 (employee)」フィールドをブランクのままにします。
    • 年齢 (age)」フィールドに次のように入力します。
        > 25
    • 都市 (city)」フィールドに次のように入力します。
        = 'Sarasota'
  3. openUI 文が機能するスクリーン内の変数をそのままにする場合、バインドされている変数は次のようなコンテンツを受信します。
      AGE > 28 AND CITY = 'Sarasota'

表示されているように、EGL はユーザーが提供する各文節の間に演算子 AND を置きます。

次の表は、有効なユーザーの入力およびそれによる文節を示しています。この表中の「単純な SQL 型」という句は、 構造化されておらず、LOB 類似の型でもない、SQL 型を指しています。

シンボル 定義 サポートされるデータ型 結果としてできた文節 (C という名の文字列用) 結果としてできた文節 (C という名の数列用)
= 等しい 単純な SQL 型 =x、==x C = 'x' C = x
> より大きい 単純な SQL 型 >x C > 'x' C > x
< 未満 単純な SQL 型 <x C < 'x' C < x
>= 以上 単純な SQL 型 >=x C >= 'x' C >= x
<= 以下 単純な SQL 型 <=x C <= 'x' C <= x
<> または != 等しくない 単純な SQL 型 <>x または !=x C != 'x' C != x
.. 範囲 単純な SQL 型 x.y または x..y C BETWEEN 'x' AND 'y' C BETWEEN x AND y
* ストリングのワイルドカード (次の表に説明のとおり) CHAR *x または x* または *x* C MATCHES '*x' 適用不可
? 単一文字のワイルドカード (次の表に記載のとおり) CHAR

?x、x?、?x?、
x??

C MATCHES '?x' 適用不可
| 論理 OR 単純な SQL 型 x|y C IN ('x', 'y') C IN (x, y)

等号 (=) により、IS NULL を意味することができ、また、不等号 (!= または <>) により、IS NOT NULL を意味することができます。

MATCHES 文節は、次の表に記載のワイルドカード文字の 1 つをユーザーが指定することによって作られます。

シンボル 結果
* ゼロまたはそれ以上の文字に一致します。
? すべての単一文字に一致します。
[ ] すべての囲まれた文字に一致します。
- (ハイフン) 大括弧内の文字間で使用される場合、ハイフンは、2 つの文字の間の範囲で (2 つの文字を含む) すべての文字に一致します。 例えば、[a-z] は、すべての小文字または小文字の範囲の特殊文字に一致します。
^ 大括弧で使用されると、最初のキャレットは、大括弧内に含まれないすべての文字と一致します。 例えば、[^abc] は a、b、または c を除くすべての文字と一致します。
¥ デフォルトのエスケープ文字です。次の文字はリテラルです。 ストリングに含まれるすべてのワイルドカード文字からワイルドカードの効果を除くことができます。
大括弧の外のその他すべての文字 正確に一致する必要があります。
フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.