Tivoli Service Desk 6.0 Developer's Toolkit Interface Designer の手引き
EHLLAPI で使用されるマップ・ファイルは ASCII テキスト・ファイルです。マップ・ファイルには、ヘッダーとフィールドという 2 つのセクションがあります。
ヘッダー情報には、マップ・ファイルに対してグローバルな属性が含まれています。 たとえば、TSD Script Interpreter が各フィールドに入力する前に ERASE_EOF を押すようにすることができます。
ヘッダーのフォーマットは次の通りです。
*HEADER CLEAR_FIRST = {{TRUE または ON}|{FALSE または OFF}} MOVE_CURSOR = {{TRUE または ON}|{FALSE または OFF}} LIBRARY = {ユーザー定義のフォーマット関数のデフォルト値として使用する kbc ライブラリー}
ヘッダーは常にマップ・ファイルの最初のセクションでなければなりません。仕様は次の通りです。
このセクションは、ホスト・フィールドと TSD Script データに対するそれらの関係を指定します。 基本的には、フィールド・セクションの各行は 1 つのホスト・データ・フィールド位置を 1 つの TSD Script レコード・フィールドにリンクさせます。 あるいは、転送されるデータが単一の TSD Script 変数である場合には、フィールド・セクション中の 1 つの行がホスト・データ・フィールド位置を その TSD Script 変数名とリンクさせます。 フィールド・セクションの各行はマップ・エントリーと呼ばれます。
マップ・ファイルのフィールド・セクションのフォーマットは次の通りです。
*FIELDS {フィールド}[, ]{行}[, ]{{列}[, ]{{長さ} {{USERFORMAT [, ]{[ファイル:]ルーチン名}|{SYSFORMAT[, ]{定数 [定数 ...]}}
マップ・エントリーの各セグメントは空白文字 (1 つまたは複数のブランクまたはタブ) または コンマで区切らなければなりません。 各セグメントの説明は以下の通りです:
各ホスト・データ・フィールドは TSD Script タイプとの間で変換されなければなりません。
各 TSD Script 単純フィールド・タイプごとに、一定のシステム形式がタイプに適用されます。
1 つのフィールドについて、システム形式を結合して複数のシステム形式をリストすることができます。 文字列のアップロード時に、左寄せしてゼロで埋め込みたい文字列がある場合には、 それを実行するための何らかの TSD Script コードを作成するか、あるいはマップ・ファイル中に システム形式として LEFT_JUSTIFY ZERO_PAD を指定することができます。 システム形式を使用する方が容易であり、TSD Script 変換ルーチンより速く実行されます。 特殊な TSD Script 変換ルーチンを作成する必要がない限り、システム形式を使用すべきです。
システム形式のアプリケーションは、形式設定される TSD Script 単純タイプによって 異なります。 TSD Script 単純タイプ、適用可能システム形式、および関連記述は次の通りです。
タイプ | 説明 |
STRING |
|
INTEGER |
|
BOOLEAN |
|
REAL |
|
TIME |
|
DATE |
|
一部の環境では、ユーザー自身の形式の関数を TSD Script で書くことができます。 ユーザー定義の 関数は入力データを受け入れて、それを新規の形式に変換し、操作の成功を示すブールを戻します。 ユーザー定義のフォーマット関数のプロトタイプは次の通りです。
FUNCTION {関数名}(VAL {ソース}:{ソース・タイプ}, REF {ターゲット}:{ターゲット・タイプ}):BOOLEAN
ユーザー定義のフォーマット関数の説明は次の通りです。
ユーザー定義のフォーマット関数 | 説明 |
ソース・タイプ |
|
ターゲット・タイプ |
|
戻りタイプ | 戻りタイプは BOOLEAN でなければなりません。関数が FALSE を戻した場合には、 TSD Script Interpreter はエラーが起こったとみなし、呼び出し元に EMUERR_FORMAT_FN_FAILURE (-7005) を戻します。 変換関数が TRUE を戻し、ターゲット値を $Unknown に設定している場合には、 TSD Script Interpreter は変換が成功したとみなし、操作を実行します。ダウンロードの場合には、TSD Script 変数またはレコード・フィールドは $Unknown 値を取ります。アップロードでは、TSD Script Interpreter はこのフィールドをスキップします。 |
データ・フローの方向によってタイプのルールが異なるために、ユーザー関数を含むマップは、 ターゲットおよびソース・タイプの両方が STRING でない限り、アップロードまたはダウンロード のいずれかに向けられなければなりません。
たとえば、Tivoli Problem Management (TPM) の重大度コード (数値) を英字スケール (たとえば、1 を A、2 を B など) に変換したいとします。 さらに、ダウンロード時に英字スケールから再び数値に戻したいと仮定します。 最初に、数値を英字に変更する (アップロードの場合) ための TSD Script 関数を書きます。
FUNCTION ToAlpha(VAL inSeverity:INTEGER, REF outSeverity:STRING):BOOLEAN IS ACTIONS outSeverity := Char(64 + inSeverity); Exit(TRUE); END; -- ToAlpha
次に、英字を数値に戻す (ダウンロードの場合) ためのルーチンを作成します。
FUNCTION ToNumeric(VAL inSeverity:STRING, REF outSeverity:INTEGER):BOOLEAN IS ACTIONS outSeverity := CharCode(StrUpper(inSeverity)) - 64; END; -- ToNumeric
これらの関数は CONVERT という名前のファイルに保管されるものとします。重大度のアップロード・マップ・フィールド定義では、ToAlpha 関数が次のように指定されます。
SEVERITY 10 10 1 USERFORMAT CONVERT:TOALPHA
重大度のダウンロード・マップ・フィールド定義では、ToNumeric 関数は次のように指定されます。
SEVERITY 10 10 1 USERFORMAT CONVERT:TONUMERIC
マップ・ファイルは単純なものですが、インターフェース・アプリケーション全体の マップ・ファイルを手書きすることは多くの時間を要することがあります。
行および列を計算してホスト画面の位置を正確に決定することは人間のエラーを招きやすいものです。 特に、開発者が多くのフィールドを含む多くの画面に向かい合う時などはそうです。
ほとんどのインターフェース開発者は、インターフェースの論理を作り上げるために 時間を費やすものです。
参考にするテキスト・ファイルが 1 つしかない場合は、後日 (または誰か他の人が) マップ・ファイルを変更することは困難です。
これらの懸念を克服するために、Tivoli Systems は EHLLAPI マップ・ユーティリティーを作成しています。
EHLLAPI マップ・ユーティリティーは、TSD Script EMUMapUpload および EMUMapDownload によって使用されるマップ・ファイルを作成するための 直観的な方法を提供します。
EHLLAPI マップ・ユーティリティーでは、ホスト画面を取り込んで、それらをテキスト・ファイル (SCR ファイル) として保管することができます。取り込まれた画面を基にしたマップ・ファイルは、フィールド・エントリーが作成されるフィールドが選択された時に作成されます。フィールド・エントリーを選択するために、フィールドをクリックしてドラッグすることができます。
さらに、EHLLAPI マップ・ユーティリティーは、ツールが SCR ファイル (前に取り込まれている) をロードし、任意のマップ・ファイルを画面に適用するので、インターフェース保守のために有用です。 EHLLAPI マップ・ユーティリティーでは、フィールド・エントリーが可視的、直観的に作成、表示、編集、および削除されます。
EHLLAPI マップ・ユーティリティーは全体が TSD Script で書かれます。 TSD Script コードを変更したい場合には、 Tivoli Systems では、始める前にオリジナル・コード (maputil.kb, mapentry.df) のバックアップ・コピーを取ることをお勧めします。
EHLLAPI マップ・ユーティリティーを使用するためには、マシンに TSD Developer's Toolkit が インストールされていなければなりません。 「取り込み」 オプションを使用するためには、 EHLLAPI Extensions for TSD Developer's Toolkit もインストールする必要があります。
ツールを開始するには、次のようにしてください。
ホストから取り込まれた画面を見ると、端末ウィンドウでは表示されなかった文字があるのが分かります。 これらの文字は、フィールド区切り文字としての働きをもつ隠されたホスト文字です。 これらの文字は、ユーザーがデータ・フィールドの始めと終わりを判別するのに役立つので、EHLLAPI マップ・ユーティリティーはこれらの文字を消去しません。
ユーザーが習熟しなければならない最初の操作は、ホスト画面の取り込みです。 これは、 どのホスト画面についてもアップロード / ダウンロード操作を設定する際に必要な最初のステップです。
画面を取り込むと、その画面は次のようになります。
Tivoli Systems では、取り込まれた画面ファイルに拡張子 .SCR を付けるという規則が 採用されていますが、ファイルの命名に際しては、希望する任意の拡張子を選択することができます。
ホスト画面を取り込むには、次のようにしてください。
注: 画面を取り込んだ後は、「ホスト画面の取り込み」メニュー・コマンドが非アクティブになります。
別のホスト画面を取り込みたい場合には、次のようにしてください。
EHLLAPI マップ・ユーティリティー・ウィンドウはサイズ変更が可能です。ホスト画面が完全には見えない場合は、画面全体が見えるようになるまで、ウィンドウ・サイズを変更することができます。ウィンドウが大きすぎると、ホスト画面の外側のエリアにマップ・エントリーを作ることができません。
注: 端末エミュレーション・セッションは画面を取り込むためにだけ使用します。 その他のすべての EHLLAPI マップ・ユーティリティー操作は、TSD Developer's Toolkit だけを使用します。 これにより、コミュニケーション・マネージャーのないマシンを使用しても、一度に多くの画面を取り込んで、後からマップを作成することができます。
前に取り込んだ画面ファイルをロードしたい場合は、次のようにしてください。
画面ファイルをロードした後で、「画面ファイルのロード」が非アクティブになります。 別の画面をロードしたい場合は、次のようにしてください。
画面ファイルをロードした後は、その画面のマップ・ファイルを作成することができます。
マップ・エントリーが作成されるフィールドを選択するためには、次のようにしてください。
ポインターのドラッグが速すぎると、フィールドの最初の文字が強調表示されたエリアに組み込まれ ない場合があります。 その場合には、上記のステップを繰り返してください。
強調表示されたエリアのエントリーを作成するためには、次のようにしてください。
マップ・エントリーを編集するには、次のようにしてください。
注: オブジェクトをダブルクリックすることは、それを 1 回クリックして「エントリーの編集」を選択することと同じです。
マップ・エントリーを削除するには、次のようにしてください。
マップ・ファイルのヘッダー情報を設定するには、次のようにしてください。
名前のないマップ・ファイルを保管する (または別の名前で保管したい場合) には、次のようにしてください。
すでに名前の付いたマップを保管したい場合には、次のようにしてください。
マップ・ファイルを画面に適用することによって、ユーザーは指定されたファイルを読み取る ことができ、マップ・ファイル中に見つかったマップ・エントリーを強調表示することができます。 これは、ユーザーがマップ・ファイルに追加したりマップ・ファイルを変更する必要がある時に役立ちます。
マップ・ファイルを画面に適用するには:
マップが適用された後で、そのマップを編集、削除したり、エントリーを追加することができます。
画面を表示した時、あるいはマップを画面に適用した時は、一部の「ファイル」メニュー・コマンドが使用不能になっています。新規の画面を取り込む必要がある場合、あるいは別の画面ファイルをロードする必要がある場合には、現行表示をリセットする必要があります。
現行表示をリセットするには、次のようにしてください。
ユーティリティー・ウィンドウで使用されるフォントを変更するには、次のようにしてください。
注: フォントの設定は EHLLAPI マップ・ユーティリティーのクローズ時に保管されません。
次のメソッドの 1 つを使用して、 EHLLAPI マップ・ユーティリティーの実行を終了することができます。
最新の変更を保管しないで終了を選択した場合には、そのファイルを保管するかどうかを尋ねるメッセージが現れます。
ファイルに名前を付けないで「Yes」を選択した場合には、ファイルに名前を付けることのできる「ファイル」ダイアログ・ボックスが現れます。
この例では、ネットワーク属性を表示する AS/400 画面が示されます。例の中でユーザーは、次を行います。
この例のファイル (example.scr、example.kb、および example.map という名前) は OS2ASE ディレクトリーの中にあります。
ホスト画面は次の例のようになります。
ネットワーク属性システムの表示:
システム:
S1028662
現行システム名 . . . . . . . . . . . . . . . .. . . : S1028662
保留中のシステム名 . . . . . . . . . . . . . . . . .:
ローカル・ネットワーク ID. . . . . . . . . . . . . . : APPN
ローカル制御点名 . . . . . . . . . . . . . . . . . . : S1028662
デフォルト値のローカル位置 . . . . . . . . . . . . . : S1028662
デフォルトのモード . . . . . . . . . . . . . . . . . : BLANK
APPN ノード・タイプ . . . . . . . . . . . . . . . . : *ENDNODE
中間セッションの最大数 . . . . . . . . . . . . . . . : 200
経路追加抵抗 . . . . . . . . . . . . . . . . . . . . : 128
サーバー・ネットワーク ID/制御点名 . . . . . . . . .:
続く...
続行するには Enter (キー) を押してください。
F3=終了 F12=取消し
EHLLAPI マップ・ユーティリティーの例を使用するためには、次のステップにしたがってください。
前のセクションの手順を完了した後で、画面を取り込むことができます。
実際のインターフェースではおそらくもっと説明的な名前 (dnetattr.scr など) が使用されると思われますが、ここでは画面ファイル名として Example.scr が選択されます。基本的に画面ファイル名を使用して、example.map という名前のマップを作成します。
この例を簡単で効果的にするために、次が行われます。
次のリストは各マップ・エントリーに使用される情報を詳述したものです。
マップ・エントリー | 説明 |
currentSystemName | 長さは 8、システム形式は DEFAULT_FORMAT、TSD Script タイプは STRING 。 |
pendingSystemName | 長さは 8、システム形式は DEFAULT_FORMAT、TSD Script タイプは STRING 。 |
localNetworkID | 長さは 8、システム形式は LEFT_JUSTIFY、TSD Script タイプは STRING 。 |
localCPName | 長さは 8、システム形式は DEFAULT_FORMAT、TSD Script タイプは STRING 。 |
dfltLocalLocation | 長さは 8、システム形式は DEFAULT_FORMAT、TSD Script タイプは STRING 。 |
dfltMode | 長さは 8、システム形式は LEFT_JUSTIFY 。 |
APPNNodeType | 長さは 8、システム形式は DEFAULT_FORMAT、TSD Script タイプは INTEGER 。 |
maxNbrIntSess | 長さは 4、システム形式は LEFT_JUSTIFY、TSD Script タイプは INTEGER 。 |
routeAddRes | 長さは 3、システム形式は LEFT_JUSTIFY、TSD Script タイプは INTEGER 。 |
これらのシステム形式 (DEFAULT_FORMAT 以外) はアップロード操作で使用されます。ダウンロード 操作の場合は、値から空白文字が削除されます。 このマップでは、ヘッダー属性は設定されません。 代わりに、デフォルトの設定が使用されます。
すべてのエントリーを作成した後で、そのマップを EXAMPLE.MAP として保管してください。 EHLLAPI マップ・ユーティリティーが次の例のようなファイルを生成します。 この例は簡単な ダウンロードを実行します。 ただし、これは EHLLAPI マップ・ユーティリティーを使用した マップ作成の基本的なステップを図示しています。
*REM マップ・ファイル名は E:\EHLLAPI\MAPUTIL\example.map です。 *HEADER CLEAR_FIRST = FALSE MOVE_CURSOR = TRUE
*FIELDS
currentSystemName, 3, 55, 8, SYSFORMAT, DEFAULT_FORMAT pendingSystemName, 4, 57, 8, SYSFORMAT, DEFAULT_FORMAT localNetworkID, 5, 55, 8, SYSFORMAT, LEFT_JUSTIFY localCPName, 6, 55, 8, SYSFORMAT, DEFAULT_FORMAT dfltLocalLocation, 7, 55, 8, SYSFORMAT, DEFAULT_FORMAT dfltMode, 8, 55, 8, SYSFORMAT, LEFT_JUSTIFY APPNNodeType, 9, 55, 8, SYSFORMAT, DEFAULT_FORMAT maxNbrIntSess, 10, 55, 4, SYSFORMAT, LEFT_JUSTIFY routeAddRes, 11, 55, 3, SYSFORMAT, LEFT_JUSTIFY このマップ・ファイルを使用する TSD Script コード・セグメントは次のようになります。
TYPES
NetAttrRec IS RECORD currentSystemName :STRING; pendingSystemName :STRING; localNetworkID :STRING; localCPName :STRING; dfltLocalLocation :STRING; dfltMode :STRING; APPNNodeType :STRING; maxNbrIntSess :INTEGER; routeAddRes :INTEGER; $myDnloadMap {'EXAMPLE.MAP'}:STRING; END; ROUTIINES FUNCTION GetNetAttributes(VAL conn:EMUCONNECTION, REF netAttr:NetAttrRec):INTEGER IS
-- 正しい画面が表示されているものとみなします。
VARIABLES rc :INTEGER; ACTIONS rc := EMUMapDownload(conn, netAttr.$myDnloadMap,netAttr); IF (rc < 1) THEN WinMessageBox($DESKTOP,'Error',$MBOK, 'Map dnload returns '& rc); END; Exit(rc); END; -- GetNetAttributes
このセクションでは、サーバー・ネットワーク ID のマップ・エントリーを作成します。 サーバー・ネットワーク ID を含むことがあるフィールドは 5 つあります。
最初のフィールドの最初の文字から最後のフィールドの最後の文字までポインターをドラッグ すると、srvrNetworkID と呼ばれるエントリーが作成され、これは EHLLAPI マップ・ユーティリティーでは複数行フィールドとみなされます。 ParseSrvrNames と呼ばれるユーザー定義のフォーマット関数が作成されます。
フォーマット関数は次のようになります。
FUNCTION ParseSrvrNames(VAL inStr:STRING, REF srvrNetworkID:LIST OF STRING):BOOLEAN IS VARIABLES temp :STRING; ACTIONS temp := StrTrim(StrLTrim(inStr)); -- get rid of blank fields WHILE (Known(temp)) DO ListInsert(srvrNetworkID, StrCopy(temp,1,8)); temp := StrDelete(temp,1,80); END; Exit(TRUE); END; -- ParseSrvrNames
レコードの中で文字列のリストとして srvrNetworkID を宣言します。
NetAttrRec IS RECORD currentSystemName :STRING; pendingSystemName :STRING; localNetworkID :STRING; localCPName :STRING; dfltLocalLocation :STRING; dfltMode :STRING; APPNNodeType :STRING; maxNbrIntSess :INTEGER; routeAddRes :INTEGER; srvrNetworkID :LIST OF STRING; $myDnloadMap {'EXAMPLE.MAP'}:STRING; END;
ダウンロード関数の実行時に、このリストは正しい値で更新されます。 このメソッドは、 EMUFillBuffer を繰り返し呼び出すよりも、あるいは TSD Script レコードの 中にダミー・フィールドを作成してマップ中のすべてのフィールドをダウンロードしてから 一度に 1 つの値をリストに挿入することよりも柔軟であることが分かります。
Tivoli Service Desk 6.0 Developer's Toolkit レガシー API の手引き