変数は、マクロにプログラミングで高度な動作を加えるために役立ちます。変数を使用すれば、値の格納、結果の保管、カウント、テキスト・ストリングの 保管、結果の記憶など、プログラミングに必要なあらゆることを実行できます。
標準データ型 (string、integer、double、boolean、および field) のいずれかに 属する変数を作成できます。
また、Java クラスを表すインポート型に属する変数も作成できます。その後クラスのインスタンスを作成し、インスタンスに対してメソッドを呼び出すことが できます。この能力により、Java ランタイム環境 (JRE) ライブラリー、Host Access Toolkit 製品のライブラリー、ユーザー自身がインプリメント したクラスやライブラリー、他のソースからの Java クラスやライブラリー など、Java クラス・ライブラリーに提供されている豊富な機能が 利用できるようになります。
変数を使用するには、マクロに対して拡張マクロ形式を使用する必要が あります (マクロ形式の選択を参照)。このため、基本マクロ形式のマクロに変数を追加するには、 マクロを拡張マクロ形式に変換するかどうか決定する必要があります。基本マクロ形式の古いマクロが多数のユーザーに使用されていて、 問題なく機能している場合は、マクロを現状のままにしておきたい場合があります。
ただし、記録済みマクロはすべて基本マクロ形式で記録されていることに 注意してください。つまり、マクロを最近記録し、そのマクロの開発を始めようとしている場合は、 単に拡張マクロ形式への切り替えをまだ済ませていないだけかもしれません。
マクロ・エディターは、基本マクロ形式のままのマクロに変数を定義しようとすると、 ポップアップ・ウィンドウに次のメッセージを表示して、これら両方の 状況に対応します。
You are attempting to use an advanced macro feature. If you choose to continue,
your macro will automatically be converted to advanced macro format. Would you
like to continue?作成するマクロで変数を使用する予定にしている場合は「はい (Yes)」を クリックし、基本マクロ形式のマクロを変換したくない場合は「いいえ (No)」 をクリックします。
それぞれの変数のスコープは、変数を作成する対象のマクロに関してグローバル です。つまり、マクロにある任意のマクロ画面から、マクロの変数すべてに アクセスできます。マクロ画面内のアクションまたはディスクリプターが その変数にアクセスするには、単に変数名を使用するだけです。
例えば、$intPartsComplete$ という名前の変数を 0 に初期化したとします。マクロの進行に伴って、次のように変数を使用できます。
この例では、いくつかの異なるマクロ画面のアクションが、 変数 $intPartsComplete$ の読み取りまたは書き込みを実行できます。
変数は 1 つの画面ではなくマクロ全体に属するので、 それに見合うように変数用の上位タブが別個に用意されています。「変数 (Variables)」タブを使用して、以下のことができます。
標準データ型に属する変数を作成するには、マクロ・エディターの「変数 (Variables)」タブを使用します。図 49 に、「変数 (Variables)」タブの 例を示します。

上の図では、マクロ・エディターの「変数 (Variables)」タブが選択されています。現在選択されている変数の名前 $strUserName$ が、 「変数 (Variables)」リスト・ボックスに表示されています。その他 3 つのフィールド、「名前 (Name)」入力フィールド、 「型 (Type)」リスト・ボックス、および「初期値 (Initial Value)」 入力フィールドには、マクロ・ランタイムがこの変数を作成するために 必要とする情報があります。
「変数 (Variables)」リスト・ボックスには、このマクロ用に作成された 変数すべての名前があります。編集または除去する変数をこのリスト・ボックスから選択でき、 また変数を新規に作成するための <新規変数> 項目もあります。
現在選択されている変数の項目が、別のストリングの後に括弧で囲んで 表示されていることに注意してください。
Variable1($strUserName$)ストリング Variable1 は、作成した変数の数を示す 設定値で、マクロ・スクリプトには保管されません。変数の実名は $strUserName$ であり、 変数を使用するときには、マクロ全体でこの名前を単独で使用する必要があります。
変数名 $strUserName$ がドル記号 ($) で囲まれていることに お気付きかもしれません。これは要件であり、マクロ内で変数を使用する ときには、必ず変数名をドル記号 ($) で囲む必要があります。
「名前 (Name)」入力フィールドは、現在選択されている変数 $strUserName$ の名前を表示します。既存の名前に上書き入力することによって、変数名を変更できます。通常、このフィールドは、新規に作成した変数に名前を割り当てるためだけに 使用してください。後でいつでもこのパネルに戻ってこの変数の名前を変更できますが (例えば $strUserFirstName$ に)、 マクロ内のどこかで、アクションやディスクリプターにこの変数の以前の名前を すでに使用している可能性があるので注意してください。この「変数 (Variables)」 タブで名前を変更した場合は、マクロ内でこの変数を使用したすべての場所を再検討して、 以前の変数名を新しい変数名に変更する必要があります。
任意の変数名を選択できますが、選択できる文字にはいくつかの制限が あります (変数名と型名を参照)。本書で行っているように、データ型の省略形で始まる名前を選択する必要は ありません (ストリング変数 $strUserName$ の str のように)。
「型 (Type)」リスト・ボックスには、変数に使用可能な型がリストされ、 新規変数に使用する型をここから選択できます。標準型は、string、integer、double、 boolean、および field です。また、java.util.Hashtable などの Java クラスをインポート型としてインポートすると、「型 (Type)」リスト・ボックスは このインポート型を取り込み、図 50 に示すように使用可能な型のリストに 追加します。
string
integer
double
boolean
field
java.util.Hashtableこのリスト・ボックスは、新規に作成した変数に型を 割り当てるためだけに使用してください。後でこのパネルに戻ってこの変数の型を別の型に変更できますが、 変数名の場合と同様に、マクロの中で最初に選択した型を必要とする コンテキストで、すでにこの変数を使用している可能性があるので 注意してください。この場合、該当するそれぞれの個所を調べて、変数を使用しているコンテキスト が新しい型に適しているかどうか確認する必要があります。
「初期値 (Initial Value)」入力フィールドには、変数の初期値を指定できます。マクロ・エディターは、型に応じて次のデフォルト値を提供します。
| 変数の型: | デフォルト初期値: |
|---|---|
| string | ストリングなし |
| integer | 0 |
| double | 0.0 |
| boolean | false |
| field | (初期値なし) |
| (任意のインポート型) | ヌル |
新しい初期値を指定するには、単にデフォルト値に上書きして入力します。
「除去 (Remove)」ボタンは、現在選択されている変数を除去します。
「インポート (Import)」ボタンと「インポート (Import)」ポップアップ・ウィンドウ については、Java クラスのインポート型の作成で説明します。
マクロ・エディターで変数を新規に作成するには、 まず「変数 (Variable)」リスト・ボックスの最後にある「<新規変数> (<new variable>)」項目をクリックします。マクロ・エディターは変数を新規に作成し、いくつかの初期特性を割り当てます。これらの特性は、ユーザーがニーズに合うように修正する必要があります。初期値は次のとおりです。
次に、新規変数に必要な値を設定する必要があります。例えば、 画面をカウントするための整変数を作成し、その初期値を 1 にする必要がある 場合は、次のように初期値を設定します。
「変数 (Variables)」タブのほかに、いくつかの便利な位置で、マクロ・エディターから 変数を新規に作成するためのポップアップ・ウィンドウにアクセスできます。例えば、変数更新アクションの場合、「名前 (Name)」リスト・ボックスには すでに作成済みの変数名がすべて表示されるだけでなく、 「<新規変数> (<New Variable>)」項目も表示されます。この項目をクリックすると、変数を新規に作成するためのポップアップ・ウィンドウ が開きます。このポップアップ・ウィンドウを使用して作成した変数は、 「変数 (Variables)」タブで作成した変数と同等です。
コード・エディターでは、<create> エレメントを使用して 変数を新規に作成します。マクロ・スクリプト内の変数すべてを含む収容エレメント <vars> があり、 それぞれの変数ごとに <create> エレメントがあります。図 51 に、5 つの <create> エレメント を含む <vars> エレメントを示します。
<vars>
<create name="$strAccountName$" type="string" value="" />
<create name="$intAmount$" type="integer" value="0" />
<create name="$dblDistance$" type="double" value="0.0" />
<create name="$boolSignedUp$" type="boolean" value="false" />
<create name="$fldFunction$" type="field" />
</vars>上の図の <vars> エレメントは、それぞれの標準データ型 (string、integer、double、 boolean、および field) から変数を 1 つ作成します。それぞれの <create> エレメントの属性は、「変数 (Variables)」タブ のフィールドと一致していることに注意してください。name 属性は変数名を指定し、type 属性 は型を指定し、value フィールドは初期値を指定します。
変数の作成 (<create> エレメント) は、すべて <vars> エレメントの 中で行う必要があります。<vars> エレメント自体は、<import> エレメントがあればその後 (次の セクションを参照)、かつ最初のマクロ画面 (<screen> エレメント) の 前に置く必要があります。
Host On-Demand マクロは、Java クラスをインポートする方法として、 インポート型を使用します。つまり、インポート型をまず作成し、特定の Java クラスに関連付ける必要が あります。この作業は、マクロごとに、Java クラス 1 つに対して 1 回のみ行います。インポート型を作成するには、次の手順で行います。
このインポート型に属する変数を作成するには、 変数を通常の方法で作成しますが、インポート型を変数の型として 選択します。インポート型の変数を作成するには、次の手順で行います。
コンストラクターはドル記号 ($) で囲む点に注意してください。変数の名前 をドル記号で囲む必要があるように、Java メソッドの呼び出しも ドル記号で囲む必要があります (これは、ドル記号で囲むことにより、 項目を評価する必要があることをマクロ・ランタイムに示すためです)。
「インポート (Import)」ポップアップ・ウィンドウに戻ると、 「インポート型 (Imported Types)」リスト・ボックスを使用して 型を新規に作成でき、すでに作成済みの型を編集または削除することも できます。型を新規に作成するには、リストの最後にある 「<新規のインポート型> (<new imported type>)」 をクリックします。型を編集するには、「インポート型 (Imported Types)」リスト・ボックス からタイプを選択し、「クラス (Class)」と「短縮名 (Short Name)」の 入力フィールドで値を変更します。型を除去するには、型を選択して「除去 (Remove)」をクリックします。
短縮名を指定する際には、特定の制限のもとで任意の名前を使用でき ます (変数名と型名を参照)。
コード・エディターでは、<type> エレメントを使用してインポート型を 作成します。マクロ・スクリプト内のインポート型すべてを含む収容エレメント <import> があり、 それぞれのインポート型ごとに <type> エレメントがあります。図 52 は、インポート型 を宣言する <import> エレメント、およびインポート型に 属する変数を作成して初期化する後続の <vars> エレメントを示しています。
<import>
<type class="java.util.Hashtable" name="Hashtable" />
</import>
<vars>
<create name=$ht$ type="Hashtable" value="$new Hashtable(40)$" />
</vars>上の図で、<import> エレメントには <type> エレメントが 1 つ含まれ、 このエレメントには class 属性 (完全修飾クラス 名 java.util.Hashtable を指定) と name 属性 (短縮名 Hashtable を指定) があります。<vars> エレメントには <create> エレメントが 1 つ含まれ、 このエレメントは名前 ($ht$)、型 (Hashtable)、 および初期値 (ここでは null ではなく、クラスのインスタンス を戻すコンストラクター $new Hashtable(40)$ の呼び出し) を 通常どおり指定します。
コード・エディターを使用している場合は、インポート型 (<type> エレメント) を すべて <import> エレメント内に入れる必要があります。<import> エレメント 自体は、<HAScript> エレメントの内部 (<HAScript> エレメントを 参照)、かつ <vars> エレメントの前に置く必要があります。
マクロの再生中に、マクロ・ランタイムが Java メソッドの呼び出しを処理すると、 マクロ・ランタイムは、クラスを検出するまで、使用可能なすべての Java ライブラリー ・ファイルとメソッドが所属するクラスのクラス・ファイルを検索します。
Java ライブラリーまたはクラスの配置は、クラスを含むライブラリー・ファイルまたは クラス・ファイルを、マクロ・ランタイムがマクロの再生中に検出できる場所に配置する ことから構成されます。
以下のタイプの Java クラスを配置する必要はありません。
マクロ・スクリプトによって呼び出されるメソッドを含むその他の Java クラスは、 マクロ・ランタイムが検出できる場所にユーザーが配置する必要があります。環境に応じて、クラス・ファイルとして、または Java クラスを 含むライブラリーとして Java クラスを配置できます。
Java ライブラリーとクラスの配置について詳しくは、 「Host On-Demand 計画、インストール、および構成」 の『カスタマー提供の Java アーカイブおよび Java クラスのデプロイ (Deploying customer-supplied Java archives and classes)』を参照してください。
変数名の規則は次のとおりです。
型名の規則は次のとおりです。
1 つのマクロを別のマクロに「チェーニング」する (戻りのない呼び出し) PlayMacro アクションの場合は、 呼び出し側マクロのすべての変数とその値をターゲット・マクロに転送できます。ターゲット・マクロは、自身の変数と転送された変数の両方に アクセスできます (PlayMacro アクション (<playmacro> エレメント)を参照)。
フィールド変数は、ストリング変数の一種です。フィールド変数は、 ストリング変数と同様にストリングを格納し、ストリング変数が有効である すべてのコンテキストでフィールド変数を使用できます。
ただし、フィールド変数にストリングが格納される方法について、 フィールド変数とストリング変数は異なっています。フィールド変数に格納されるストリングは常に、マクロ・ランタイム が現行セッション・ウィンドウ内の 3270 または 5250 フィールドから 読み取るストリングです。マクロ・ランタイムが このストリングを 3270 または 5250 フィールドから読み取るようにするには、 次の項目を指定して変数更新アクションを作成する必要があります。
マクロ・ランタイムは、変数更新アクションを実行するときに 次のステップを行います。
詳しくは、フィールド変数に対する変数更新アクションを参照してください。
マクロ・ランタイムは、マクロの再生を開始するとき、マクロ画面を 処理する前に変数に初期値を割り当てます。
標準型 (string、integer、double、boolean) に属する変数は、 同じ型の即時値 ('Elm Street'、10、4.6e-2、true など) とほぼ同じ方法で使用できます。
ただし、特定のコンテキストでは変数を使用できません。マクロ・エディターでは、次のコンテキストで変数を使用できません。
コード・エディターでは、次のコンテキストで変数を使用できません。
標準型に属する変数には、次の方法で値を書き込むことができます。
標準型の変数に、次の値のいずれかを割り当てることはできません。
標準型の変数に Java オブジェクトを書き込むと、マクロ・ランタイムは インポート型の toString() メソッドを呼び出してから、 結果ストリングを変数に割り当てることを試みます。
インポート型に属する変数に格納されている値は、 次のように使用できます。
次の型のデータは、インポート型の変数に割り当てることはできません。
インポート型の変数にマクロがこれらの無効な型の値を割り当てようと すると、マクロ・ランタイムはランタイム・エラーを生成し、マクロを停止します。
インポート型の変数には、次の方法で値を書き込むことができます。
インポート型に属する変数には、次の型の変数を割り当てることができます。
<create name=$ht$ type="Hashtable" value="" />同じインポート型の 2 つの変数を比較する条件式 (例えば、 条件アクションの「条件 (Condition)」フィールド内) の中では、 変数自体を使用するのではなく、基礎クラスにある比較メソッド (equals() など) をインプリメントする必要があります。例えば、次のとおりです。
$htUserData.equals($htPortData$)$代わりに、変数自体を比較すると (例: $htUserData$ == $htPortData$)、次のようになります。
これにより得られる結果は、2 つの変数の比較結果としては正しくない 可能性があります。
通常の言語では、パラメーター・リストは、プログラムが動作するように指示し、エンド・ユーザーがプログラムを起動したときに指定する値の集合です。例えば、 copy がファイルを現行ディレクトリーから別のディレクトリーにコピーする プログラムの名前なら、次のコマンド行の呼び出し
copy MyFile.txt c:¥tempにより、コピー・プログラムを名前で呼び出して (copy)、コピー対象の ファイル名 (MyFile.txt)、および宛先ディレクトリー (c:¥temp) を 含むパラメーター・リスト (MyFile.txt c:¥temp) を指定します。
Host On-Demand には、プログラムが呼び出されたときにパラメーター・リストを プログラムに引き渡すことに類似したマクロ機能があります。マクロを起動する前、または マクロの起動と同時に、エンド・ユーザーは名前値のペアのリストを指定できます。 各ペアは、マクロの内部で定義された変数、およびマクロ・ランタイムが変数に 割り当てる必要のある初期値で構成されています。
例えば、マクロ FileDownload がファイルをリモート・ホストからローカル ・ワークステーションにダウンロードし、このマクロに変数 strRemoteFile と strLocalFile が含まれる場合、エンド・ユーザーは以下のパラメーター・ リストを指定することができます。
strRemoteFile="NewData.123", strLocalFile="MyData.123"エンド・ユーザーがマクロを再生するとき、マクロ・ランタイムは、パラメーター・ リストで指定された各変数を、パラメーター・リストで指定された値に初期設定します。マクロは、ファイル NewData.123 をリモート・ホストからダウンロードして、 そのファイルを MyData.123 に名前変更します。
もちろん、上記の手順どおりに処理するには、マクロの作成者は、必要な情報を変数 strRemoteFile と strLocalFile 内で検索するようマクロを コード化する必要があります。
一般的に、マクロの作成者は以下の条件を満たす必要があります。
また、良いプログラムを書くために、マクロの作成者は以下の動作に注意する必要が あります。
詳しくは、マクロ作成者の考慮事項を参照してください。
エンド・ユーザーは以下の条件を満たす必要があります。
ただし、システム管理者は、パラメーター・リストの指定作業を、以下のいずれかで パラメーター・リストを事前定義することによって処理することができます。
詳しくは、パラメーター・リストの指定を参照してください。
マクロ内のすべての変数には、パラメーター・リストで使用されているかどうかに かかわらず、初期値があります。この初期値は、デフォルトの初期値 (表 22 を参照) か、マクロの作成者が 割り当てた初期値です。
パラメーター・リストは関連するマクロの外部に存在します。マクロ自身の内部に保管 されるのではなく、マクロの再生が開始されたときに、マクロ・ランタイムに 受け渡されます。
マクロ・ランタイムがマクロを再生する準備ができると、まず最初にマクロの各変数を その変数に対してマクロ自身内で定義された初期値に初期設定します。
次に、マクロ・ランタイムはパラメーター・リストを検索します。パラメーター・リスト が見つかると、マクロ・ランタイムはパラメーター・リストのそれぞれの名前値のペアを 処理して、指定された各変数をリストで指定された値に再初期設定します。
マクロ・ランタイムはマクロの再生を通常の方法で継続します。
表 23 には、マクロのパラメーター・リストを 指定できる Host On-Demand ユーザー・インターフェースの場所が記載されています。
| ユーザー・インターフェースの領域: | パラメーター・リストを含む入力フィールドへのナビゲート方法: | Host On-Demand がパラメーター・リストを保管するか? |
|---|---|---|
|
セッション構成 |
「開始オプション (Start Options)」ウィンドウ
|
はい。 入力リストはセッション構成の一部として保管されます。 |
|
メイン・ツールバー 注意 : メイン・ツールバーは、ツールバー・オブジェクトとして保管することができ、 他のセッション構成にインポートすることができます。 |
「編集 (Edit)」>「設定 (Preferences)」>「ツールバー (Toolbar)」>「追加 (Add)」ボタン
|
はい。 パラメーター・リストはメイン・ツールバーの一部として保管されます。 |
|
「マクロを再生 (Play macro)」ダイアログ |
「操作 (Actions)」>「マクロを再生 (Play Macro)」
|
いいえ。 パラメーター・リストは、以下のいずれかで別の選択が実行されるまで、一時的に 「パラメーター (Parameters)」入力フィールドへ保管されます。
|
|
「選択可能なマクロ (Available macros)」ダイアログ |
マクロ・マネージャー・ツールバーの「マクロを選択 (Select a macro)」アイコン
|
いいえ。 パラメーター・リストは、以下のいずれかで別の選択が実行されるまで、一時的に 「パラメーター (Parameters)」入力フィールドへ保管されます。
|
|
ポップアップ・キーパッド・ダイアログのカスタマイズ |
メイン・ウィンドウで「編集」>「設定」>「ポップアップ・キーパッド」>「カスタマイズ (Customize)」または、ポップアップ・キーパッド・ウィンドウで「編集」> 「カスタマイズ (Customize)」を選択します。 |
はい。 パラメーター・リストはポップアップ・キーパッドの一部として保管されます。 |
ただし、現在選択しているマクロを、マクロ・マネージャー・ツールバーの「マクロを再生 (Play Macro)」アイコンを使用して再生している場合、パラメーター・リストを指定することは できません。代わりに、「選択可能なマクロ (Available macros)」ダイアログ (上の表の 行 4 を参照) でパラメーター・リストを指定して、現在選択しているマクロを再生します。
上の表では、Host On-Demand は、パラメーター・リストを表の最初の 2 行で指定された 場所に対してのみ保管することに注意してください (セッション構成の自動開始セクション と、メイン・ツールバーに追加されたカスタマイズされたボタン)。
また、Host On-Demand は、パラメーター・リストをマクロ自身の一部としてでは なく、(セッション構成の一部として、またはメイン・ツールバーの一部として) マクロ の外部に保管することに注意してください。
パラメーター・リストを指定する場合は (例えば、表 23 の行 2 で示されているように、 「ボタンを追加 (Add Button)」ダイアログの「マクロ (Macro)」ウィンドウの「パラメーター (Parameters)」 入力フィールドで指定)、以下の形式で指定する必要があります。
name1="value1", name2="value2", name3="value3", ...例えば、次のとおりです。
strRemoteFile="NewData.123", strLocalFile="MyData.123"形式の規則は以下のとおりです。
パラメーター・リストは名前と値のペアの集合です。各ペアがマクロで定義された変数 を参照している限り、指定できるペアの数に制限はありません。
名前値のペアを区切るには、ブランク・スペース (「 」)、コンマ (「,」)、またはその両方 (「, 」) を使用します。
名前値のペアで変数名を指定する場合には、等号 (「=」) を後に続け、その 後に二重引用符 ("") で囲まれた値を続けます。例えば、次のとおりです。
strLocalFile="MyData.123"変数名はマクロで記述されているスペルどおりに入力します。大/小文字の区別に注意 してください。例えば、strLocalFile と strLocalfile は 異なります。
変数名を指定する場合は、ドル記号 ($) で囲んでも囲まなくてもかまいません。 正 : $strLocalFile$。正 : strLocalFile。
変数はプリミティブ変数、つまり、標準型 (integer、double、string、または boolean) に属している変数である必要があります。(インポートされた Java クラスに基づく) インポート型に属している変数を指定することはできません。
等号は変数名と値の間に必要です。
変数値は二重引用符 ("") で囲む必要があります。
値は単純な値で、式にしないようにする必要があります。
値が変数以外の異なる標準データ型に属している場合、Host On-Demand は通常の方法で 自動的に値を正しいデータ型に変換しようとします (自動データ型変換を参照)。
ストリング変数の規則
doubles、integers、booleans の規則
各プリミティブ変数型の例は以下のとおりです。
intLineCount="24", dblLength="1441.25", strName="John Smith", boolComplete="true"Host On-Demand は、エンド・ユーザーがマクロを再生するまで、パラメーター ・リストでエラーをチェックしません。エンド・ユーザーがマクロを再生するとき、Host On-Demand が パラメーター・リストでエラーを検出すると、以下のことを実行します。
Host On-Demand は、3 つのタイプのエラー状態を検査します。
このタイプのエラーでは、マクロに存在しないか、または間違って入力されている (例えば、strLocalFile ではなく strLocalfile) 変数名が パラメーター・リストに含まれています。
このタイプの問題を回避するための処置は、以下のとおりです。
このタイプのエラーでは、パラメーター・リストに構文エラーが存在します (例えば、 値が二重引用符で囲まれていません)。
このタイプの問題を回避するための処置は、以下のとおりです。
図 53 には、構文エラーの例と、Host On-Demand の エラーの処理方法が記載されています。
strRemoteFile="NewData.123 intLength="14622"
Host On-Demand:
1) Sets the variable strRemoteFile to "NewData.123 intLength=".
2) Tries to process 14622" but cannot
(Host On-Demand is looking for a variable name
but instead finds an integer followed by a double quote).
3) Terminates the macro playback and generates an error message.
strRemoteFile="NewData.123"98 strLocalFile="MyData.123"
Host On-Demand:
1) Sets the variable strRemoteFile to "NewData.123".
2) Tries to process 98 but cannot
(Host On-Demand is looking for a variable name but finds an integer).
3) Terminates the macro playback and generates an error message.
strRemoteFile=NewData.123 strLocalFile=MyData.123
Host On-Demand:
1) Does not find a double quote after the first equals sign (=).
2) Terminates the macro playback and generates an error message.ランタイム・エラーの原因となるパラメーター・リスト内の問題の例は、以下のとおりです。
intLength="abc"上の例では、変数 intLength は integer 型です。 Host On-Demand は、ストリング abc を 10 進法の整数に変換しようとして 失敗します。
ランタイム・エラーが発生すると、Host On-Demand は以下のことを実行します。
上のランタイム・エラーの例では、Host On-Demand は、以下のようなメッセージを含む エラー・ダイアログ・ボックスを表示します。「変数 $intLength$ を更新中に、型 のミスマッチが発生しました。」
Host Access Toolkit (Host On-Demand CD-ROM に収録) には、パラメーター・リストを 管理する 2 つの Java メソッドがあります。
マクロの各プリミティブ変数に対して、変数名とマクロが変数を設定する初期値を 戻します。このメソッドを使用して、パラメーター・リストに含めるマクロのすべての 変数のリストを取得します。
変数名と各パラメーターの値で構成されているマクロの入力パラメーター・リストを指定 します。
詳しくは、Host Access Toolkit に同梱されている文書を参照してください。
マクロをコード化してパラメーター・リストを使用するとき、以下のことに注意して ください。
一般的な原則として、エンド・ユーザーが構文エラーなどのエラーを発生させず、 パラメーター・リストを正しく指定できる必要があることに注意してください。エンド ・ユーザーの助けになるように、以下の処置に注意してください。
パラメーター・リストは、エンド・ユーザーがパラメーター・リストを使用して起動する マクロ内でのみ変数を初期化します。パラメーター・リストは、先に出現するマクロが チェーニングする後続のマクロ内の同じ名前の変数を初期化しません。(チェーニング されたマクロに関する情報について、詳しくはPlayMacro アクション (<playmacro> エレメント)を参照 してください)。
例えば、以下の状態があるとします。
この状態では、Host On-Demand は、チェーニングされたマクロの再生を準備する際に、 チェーニングされたマクロ内の変数 strRemoteFile を NewData.123 に 初期化しません。代わり に、Host On-Demand は、チェーニングされたマクロに何らかの初期値 (デフォルトの初期値かマクロの作成者が指定した初期値) が指定されていれば、通常通り チェーニングされたマクロ内の変数を初期化します。
上の状態と、マクロがチェーニングしているときに発生する変数の転送を混同しない でください。マクロ A がマクロ B にチェーニングしている場合には、マクロ A はすべての 変数と現行値を B に受け渡すことができます (変数の転送を参照)。この機能を利用して、値を 呼び出し側のマクロからチェーニングされたマクロに受け渡すことができます。
メソッドから戻される値が有効であるすべてのコンテキストで、 メソッドを呼び出すことができます。例えば次のように、 入力アクションの中で行の値をメソッドから戻される整数値に設定できます。
$importedVar.calculateRow()$
また、メソッドの戻り変数が必要ない場合や、メソッドに戻り値が ない (void) 場合は、実行アクションを使用して メソッドを呼び出すこともできます (実行アクション (<perform> エレメント)を参照)。
インポートしたクラスに属するメソッドを呼び出すには、Java で使用する ものと同じ構文を使用します。ただしその構文に加え、変数の場合と同じように、 メソッド呼び出しをドル記号 ($) で囲む必要があります。例えば、次のとおりです。
$new FileInputStream('myFileName')$
$fis.read()$ メソッドにパラメーターとして渡す即時ストリング値 ('Elm Street' や上の 最初の例の 'myFileName' など) は、通常どおり単一引用符で囲む必要が あります (拡張マクロ形式のストリング表記規則を参照)。
メソッド呼び出し ($prp.get('Group Name')$ など) を マクロ・スクリプトに追加する際に、マクロ・エディターは、 呼び出し先メソッドまたはコンストラクターが 変数の属するクラスに存在するかどうかを検査しません。その検査は、呼び出しが行われたときにマクロ・ランタイムによって 行われます。
メソッドは、基礎 Java クラスの public メソッド でなければなりません。
マクロ・ランタイムは、ユーザーが呼び出したメソッドに一致するメソッドが あるかどうか Java クラスを検索する際に、表 24 に示すように マクロのデータ型 (boolean、integer、string、field、double、 インポート型) を Java データ型にマップします。
| メソッド・パラメーターが以下のマクロ・データ型に属する場合: | マクロ・ランタイムは以下の Java データ型のパラメーターを もつ Java メソッドを検索する: |
|---|---|
| boolean | boolean |
| integer | int |
| string | ストリング (String) |
| field | ストリング (String) |
| double | double |
| インポート型 | インポート型の基礎クラス |
マクロ・ランタイムは、呼び出し先メソッドを次のように検索します。
Host On-Demand マクロ・ユーティリティー・ライブラリー (HML ライブラリー) は、 Host On-Demand クライアント・コードとともにパッケージされているユーティリティー ・ライブラリーです。 以下の項目を実行せずに、これらのライブラリーのうちの 1 つからメソッドを呼び出す ことができます。
実際には、HML Java ライブラリーに含まれているクラスのインポート、HML クラスに 属する変数の作成、または HML オブジェクトのインスタンスの作成は許可されていません。
これは、マクロの再生が開始されたときに進む初期化の実行中に、マクロ・ ランタイムが以下の処理を実行するためです。
以下の表には、各 HML 変数に対する変数名と基礎クラスのメソッドの型が記載されて います。
| HML 変数: | メソッドの説明: |
|---|---|
| $HMLFormatUtil$ | ストリングのフォーマット設定のためのメソッド。 |
| $HMLPSUtil$ | セッション・ウィンドウの表示スペースにアクセスするメソッド。 |
| $HMLSessionUtil$ | セッション値を戻すメソッド。 |
| $HMLSQLUtil$ | 最新の SQLQuery アクションの結果に関する情報を戻すメソッド |
| $HMLSystemUtil$ | アプレット、Java プロパティー、および OS 環境に関する情報を戻すメソッド。 |
HML ライブラリーに属するメソッドを呼び出すには、通常の方法で、変数名、メソッド 名、入力パラメーターを指定します。
$HMLFormatUtil.numberToString(1.44)$
$HMLPSUtil.getCursorPos()$
$HMLSessionUtil.getHost()$通常の変数と HML 変数の混同を回避するために、HML で開始される変数名は 予約済みです。HML で開始される変数を作成しようとする と、Host On-Demand はエラー・メッセージを生成します。
$HMLFormatUtil$ を使用して呼び出されるメソッドは、フォーマット設定メソッドです。表 26 には、これらのメソッドの要約が記載されています。
| メソッドの要約 : $HMLFormatUtil$ | |
|---|---|
| ストリング (String) |
|
| int または double |
|
ロケールは、各国語と地域に関連したフォーマット設定の規則の集合です。例えば、 クライアント・ワークステーションが構成されているロケールに従って、1111.22 などの 10 進法の値が以下のストリングのいずれかで表されます。
'1111.22'
'1,111.22'
'1111,22'一方、-78 のような負の数値の場合は、以下のように表されます。
'-78'
'78-'
メソッド numberToString() および stringToNumber() を 使用すると、数値 (1111.22 などの、integer 型または double 型の変数や即時値) と現行の ロケールでの表記 (「1111.22」、「1,111.22」、また は「1111,22」などのストリング) との変換を実行できます。
public String numberToString(Object obj)
このメソッドは、数値 (integer または double) を現在構成されているロケールに従って フォーマット設定したストリングに変換します。入力パラメーターの型は、integer または double です。
このメソッドは、推奨されていない独立したメソッド $FormatNumberToString()$ に置き換わるものです。
<input value="$HMLFormatUtil.numberToString(1111.44)$"
row="20" col="16" movecursor="true"
xlatehostkeys="true" encrypted="false" />public int stringToNumber(String str)
public double stringToNumber(String str)
このメソッドは、現在構成されているロケールに従ってフォーマット設定した数値 ストリングを数値に変換します。戻された数値は、入力ストリングに 応じて、integer 型か double 型になります。
このメソッドは、推奨されていない独立したメソッド $FormatStringToNumber()$ に置き換わるものです。
<message title="’stringToNumber()’" value="’1111.33’" />
<extract name="'Extract'" planetype="TEXT_PLANE"
srow="1" scol="1"
erow="1" ecol="10" unwrap="false"
assigntovar="$value$" />
<if condition="$HMLFormatUtil.stringToNumber($value$)$ < 0 "
...
</if>$HMLPSUtil$ を使用して呼び出されたメソッドは、セッション・ウィンドウの表示 スペースに影響を与えるか、セッション・ウィンドウの表示スペースに関する情報を 戻します。表 27 には、これらのメソッドの 要約が記載されています。
| メソッドの要約 : $HMLPSUtil$ | |
|---|---|
| int |
|
| int |
|
| void |
|
| int |
|
| int |
|
| int |
|
| int |
|
| int |
|
| int |
|
| ストリング (String) |
|
| int |
|
表示スペースは、セッション・ウィンドウ内に各行と列の位置のエレメントを含む データ構造です (ただし、セッション・ウィンドウの最後の行は、オペレーター情報域 に使用されるため、含まれません)。表示スペースのサイズは、セッション・ウィンドウ のサイズによって決定されます。例えば、セッション・ウィンドウが 80 行と 25 列の 場合、表示スペースのサイズは 80 * 24 = 1920 になります。
表示スペースのエレメントの位置は、セッション・ウィンドウの行と列の位置に連続的に 対応しており、左から右、上部から下部へと読み取ります。例えば、セッション・ ウィンドウが 80 行と 25 列の場合、以下の表のようになります。
Row of Column of Corresponds to
Session Session element at this
Window: Window: position in PS:
1 1 1
1 2 2
1 3 3
...
1 80 80
2 1 81
2 2 82
2 3 83
...
24 79 1919
24 80 1920Host On-Demand は表示スペースを使用して、セッション・ウィンドウに表示される文字 を格納します。表示スペースの各エレメントは、1 文字 (および輝度などの文字に 関する情報) を格納するために使用されます。例えば、ストリング Message がセッション・ウィンドウの行 1 と列 1 に表示されると、以下の図のようになります。
Row of Column of Corresponds Character
Session Session to element stored in
Window: Window: at this pos- this element:
ition in PS:
1 1 1 M
1 2 2 e
1 3 3 s
1 4 4 s
1 5 5 a
1 6 6 g
1 7 7 e表 28 には、さまざまな値を計算するための公式 (通常使用する必要はありません) が 記載されています。これらの公式で使用されている記号の意味は以下のとおりです。
| 値 | 計算のための公式 |
|---|---|
| 表示スペースのサイズ |
|
| row |
|
| col |
|
| pos |
|
public int convertPosToCol(int pos)
このメソッドは、表示スペースの指定された位置に関連する列番号を戻します。
<message title="’Example of convertPosToCol()’"
value="’Cursor is at column ’+
$HMLPSUtil.convertPosToCol($HMLPSUtil.getCursorPos()$)$" />public int convertPosToRow(int pos)
このメソッドは、表示スペースの指定された位置に関連する行番号を戻します。
<message title="'Example of convertPosToRow()'"
value="'Cursor is at row '+
$HMLPSUtil.convertPosToRow($HMLPSUtil.getCursorPos()$)$" />public void enableRoundTrip(boolean flag)
このメソッドは、双方向言語専用 (アラビア語およびヘブライ語) です。A、B、 および C が双方向文字だと仮定します。 通常、ストリングに一続きの双方向文字が含まれ、次に、一続きの数表示が続き (例えば、ABC 123)、ストリング全体が格納される場合、Host On-Demand クライアントは、双方向文字と数表示の位置を交換します。例えば、通常、ストリング ABC 123 を表示スペースから読み出してストリングを変数に格納し、次に、 変数の値を表示スペースに書き込む場合、Host On-Demand は表示スペースに 123 ABC と書き込みます。
強制的に反転する機能をオフにするには、enableRoundTrip() の値を true にして呼び出します。強制的に反転する機能をオンにするに は、enableRoundTrip() の値を false にして呼び出します。
<perform value="$HMLPSUtil.enableRoundTrip(true)$" />public int getCursorCol()
このメソッドは、表示スペースのテキスト・カーソルの列の位置を戻します。
<input value="$HMLSessionUtil.getHost()$"
row="$HMLPSUtil.getCursorRow()$"
col="$HMLPSUtil.getCursorCol()$+2"
movecursor="true" xlatehostkeys="true"
encrypted="false" />public int getCursorPos()
このメソッドは、表示スペースのテキスト・カーソルの位置を戻します。
<message title="’Example of getCursorPos()’"
value="’Cursor is at row ’+
$HMLPSUtil.convertPosToRow($HMLPSUtil.getCursorPos()$)$+
’ and column ’+
$HMLPSUtil.convertPosToCol($HMLPSUtil.getCursorPos()$)$" />public int getCursorRow()
このメソッドは、表示スペースのテキスト・カーソルの行の位置を戻します。
<input value="$HMLSessionUtil.getHost()$"
row="$HMLPSUtil.getCursorRow()$"
col="$HMLPSUtil.getCursorCol()$+2"
movecursor="true" xlatehostkeys="true"
encrypted="false" />public int getSize()
このメソッドは、表示スペースのサイズ、つまり表示スペースの文字位置の数を 戻します。例えば、セッション・ウィンドウが 25 行と 80 列の 場合、表示スペースのサイズは 24 * 80 = 1920 になります。
<message title="’Example of getSize()’"
value="’Size of PS is ’+$HMLPSUtil.getSize()$" />public int getSizeCols()
このメソッドは、表示スペースの列数を戻します。表示スペースの列数は、セッション ・ウィンドウの列数と同じになります。例えば、セッション・ウィンドウが 25 行と 80 列の場合、表示スペースの列数は 80 になります。
<message title="’Example of getSizeRows and getSizeCols()’"
value="’The PS has ’+$HMLPSUtil.getSizeRows()$+
’ rows and ’+
$HMLPSUtil.getSizeCols()$+’ columns’" />public int getSizeRows()
このメソッドは、表示スペースの行数を戻します。表示スペースの行数は、セッション ・ウィンドウの行数よりも 1 つ少なくなります (これは、セッション・ウィンドウの最後 の行にはオペレーター情報域があるので、表示スペースに含まれないためです)。例えば、 セッション・ウィンドウが 25 行と 80 列の場合、表示スペースの行数は 24 になります。
<message title="’Example of getSizeRows and getSizeCols()’"
value="’The PS has ’+$HMLPSUtil.getSizeRows()$+
’ rows and ’+
$HMLPSUtil.getSizeCols()$+’ columns’" />public String getString(int pos, int len)
このメソッドは、表示スペースの指定された位置から開始される、指定された文字数の テキスト・ストリングを戻します。
<message title="’Text of row 18:’"
value="’Text:’+$HMLPSUtil.getString(
$HMLPSUtil.getSizeCols()$*17+1,
$HMLPSUtil.getSizeCols()$)$" />public int searchString(int pos, int len)
このメソッドは、指定されたストリングの表示スペースの位置を戻します。この メソッドは、ストリングが表示スペース内に検出されないと 0 を戻します。
<varupdate name="$int$" value="$HMLPSUtil.searchString('IBM')$" />
<message title="'Searching for IBM'"
value="'IBM is found at position '+$int$+
' that is row='+
$HMLPSUtil.convertPosToRow($int$)$+
', column='+
$HMLPSUtil.convertPosToCol($int$)$" />$HMLSessionUtil$ を使用して呼び出されたメソッドは、セッションに関連した値を 戻します。表 29 には、これらのメソッドの 要約が記載されています。
| メソッドの要約 : $HMLSessionUtil$ | |
|---|---|
| ストリング (String) |
|
| ストリング (String) |
|
| ストリング (String) |
|
public String getHost()
このメソッドは、セッション構成の「接続」セクションの 「宛先アドレス」フィールドに入力したホスト名 またはホスト・アドレスを戻します (myhost.myloc.mycompany.com または 9.27.63.45 など)。
<message title="’Host name or address’" value="$HMLSessionUtil.getHost()$" />public String getLabel()
このメソッドは、セッション構成の「接続」セクションの 「セッション名 (Session Name)」フィールドに入力したセッション名 を戻します (3270 Display または 5250 Display など)。
<message title="’Session name’" value="$HMLSessionUtil.getLabel()$" />public String getName()
このメソッドは、ホストがセッションに割り当てた識別名 (A、B、または C など) を戻します。セッションを開始する とき、ホストは名前をセッションに割り当てて、開始している可能性のある同じ セッションの他のインスタンスと区別します。
<message title="’Session instance identifier’" value="$HMLSessionUtil.getName()$" />$HMLSQLUtil$ で呼び出されたメソッドは、最新の SQLQuery アクションの結果に関する 情報を戻します。表 30 には、これらのメソッドの要約が記載されています。
| メソッドの要約 : $HMLSessionUtil$ | |
|---|---|
| int |
|
| ストリング (String) |
|
| ストリング (String) |
|
| int |
|
SQLQuery アクションの結果は、戻されたデータのブロックのサイズよりもそれぞれ 1 ずつ広い列および高い行から構成される、2 次元配列として保管されます。行 0 は列名 (データベースからのフィールド名) を保管するのに使用されて、列 0 はゼロ・ベースの インデックスを保管するのに使用されます (下の表 31 を参照)。行 0、列 0 の項目には空ストリングが含まれます。配列の残りには実際の データが含まれます。すべての値はストリングです。
表 31 には、クエリーの結果である 3 x 5 のデータの ブロックが、4 x 6 の配列に保管される例が記載されています。
| (空ストリング) | TOPICID | EXMPLID | DESCRIPT |
| 0 | 4 | 18 | Create a toolbar with custom buttons. |
| 1 | 9 | 54 | Attach tables at startup. |
| 2 | 11 | 74 | Edit Products. |
| 3 | 11 | 75 | Enter or Edit Products |
| 4 | 11 | 76 | Find Customers |
上の表では、行 0、列 0 の項目には空ストリングが含まれています。行 0 以降 には、データベースからのフィールド名 (TOPICID, EXMPLID, DESCRIPT) が含まれています。 列 0 以降には、行のインデックス番号 (0, 1, 2, 3, 4) が含まれています。配列 0 以降には、 実際のデータが含まれています。すべての値はストリングです。
public int getColumnSize()
このメソッドは、追加された列 0 を含む、配列内のデータの実際の列数を戻します。 例えば、表 31 の配列では、このメソッドは 4 を 戻します。
<message title="’Column size’" value="$HMLSessionUtil.getColumnSize()$" />public int getDataByIndex(int row, int column)
このメソッドは、指定された行と列のインデックスの項目を戻します。表 31 のデータに対して戻された値のリストは以下の とおりです。
<message title="’Row 3, Column 3’" value="$HMLSessionUtil.getDataByIndex(3,3)$" />public int getDataByName(int row, String fieldName)
このメソッドは、指定された行とフィールド名の項目を戻します。 表 31 のデータに対して戻された値のリストは以下の とおりです。
<message title="’Row 3, Field DESCRIPT’"
value="$HMLSessionUtil.getDataByName(3,'DESCRIPT')$" />public int getRowSize()
このメソッドは、追加された行 0 を含む、配列内のデータの実際の行数を戻します。 例えば、表 31 の配列では、このメソッドは 6 を 戻します。
<message title="’Column size’" value="$HMLSessionUtil.getRowSize()$" />$HMLSystemUtil$ で起動されるメソッドで、アプレット、Java プロパティー、および OS 環境に関する情報を得ることができます。
表 32 には、これらのメソッドの要約が記載 されています。
| メソッドの要約: $HMLSystemUtil$ | |
|---|---|
| ストリング (String) |
|
| ストリング (String) |
|
| ストリング (String) |
|
public String getHTMLParameter(String name)
このメソッドは、HTML パラメーター名を受け入れ、その値を戻します。
存在しないパラメーター名を受け取ると、メソッドは空のストリングを戻します。
$HMLSystemUtil.getHTMLParameter('some_param_name')$public String getenv(String name)
このメソッドは、オペレーティング・システムの環境変数名を受け入れ、その値を戻します。
存在しない変数名を受け取ると、メソッドは空のストリングを戻します。
$HMLSystemUtil.getenv('Temp')$public String getSystemProperty(String name)
このメソッドは、Java システム・プロパティー名を受け入れ、その値を戻します。
存在しない変数名を受け取ると、メソッドは空のストリングを戻します。
$HMLSystemUtil.getSystemProperty('java.home')$大/小文字の区別があるオペレーティング・システムを使用している場合、これらのメソッドのパラメーターとして指定する名前も大/小文字の区別があります。
$FormatNumberToString()$ は推奨されておらず、代わりに $HMLFormatUtil.numberToString()$ の使用をお勧めします。両者の 入力パラメーターと戻り値の型は同じです (numberToString()を参照)。
$FormatStringToNumber()$ は推奨されておらず、代わりに $HMLFormatUtil.stringToNumber()$ の使用をお勧めします。両者の 入力パラメーターと戻り値の型は同じです (stringToNumber()を参照)。