マクロの構造

この章には、2 つの目的があります。1 つは、マクロが XML マクロ・スクリプト内で表示されるとおりにマクロの一般的な構造を説明することです。もう 1 つは、マクロ・エディターと、マクロ・スクリプト内の特定の XML エレメント間の関連付けの一部を示すことです。

マクロ・スクリプト

マクロ・スクリプトは、Host On-Demand マクロの保管に使用される XML スクリプトです。マクロ・スクリプトの XML テキストを表示し、編集するには、コード・エディターを使用します (コード・エディターを参照)。 マクロ・エディターは、コード・エディターに表示されるものと同じ情報を表示します。ただし、マクロ・エディターは、グラフィカル・ユーザー・インターフェースのリスト・ボックス、チェック・ボックス、入力フィールド、およびその他の制御機構を使用して、コード・エディターよりも使いやすい形式で情報を表示します (マクロ・エディターを参照)。

マクロ言語の XML エレメントについて少し学習すると、次のものを含めて、重要なトピックの理解がはるかに深まります。

したがって、本書では、マクロ・エディターの入力フィールド、ボタン、およびリスト・ボックスだけでなく、同じ情報が保管されている対応する XML エレメントも頻繁に参照します。

XML エレメント

マクロ・スクリプトを理解するには、XML について多くを学習する必要はありません。構文の基本だけで十分です。 XML 構文の知識を復習する必要がある場合は、Host On-Demand マクロ言語の XML 構文で詳しく学習できます。 しかし、必要な情報はほとんどすべて、このサブセクションに記載されています。

おそらくすでにご存じのように、XML スクリプトは、XML エレメントの集合から構成されます。XML エレメントの一部には、他の XML エレメントが含まれています。これは、一部の HTML エレメントに他の HTML エレメントが含まれているのとほぼ同じです。 しかし、HTML の場合と異なり、XML では、プログラム開発者が、保管したい情報の構造を表す新しい XML エレメントを定義できます。 Host On-Demand マクロ言語には、マクロの記述に必要な情報を保管するために、約 35 種類の XML エレメントが含まれています。 このマクロ言語については、マクロ言語の長さで詳しく説明しています。

XML マクロ・エレメントを参照する場合、本書では、エレメント名を不等号括弧で囲んで使用します。 例えば、<HAScript> エレメント、<screen> エレメントなどです。

図 8 は、XML エレメントの例を示しています。

図 8. サンプル XML エレメント
<SampleElement attribute1="value1" attribute2="value2">
...
</SampleElement>

上記の図に表示されている <SampleElement> エレメントには、すべてのマクロ・エレメントのキー・コンポーネントが含まれています。 最初の行は、開始タグです。開始タグは、左不等号括弧 (<) の後に、XML エレメントの名前 (SampleElement)、属性定義、右不等号括弧 (>) の順に続きます。 2 行目の省略符号 (...) は、XML 構文の一部ではなく、上記の図では、<SampleElement> エレメント内に他のエレメントが存在する可能性があることを示すために使用されます。 3 行目は、終了タグです。 終了タグでは、エレメント名が不等号括弧で囲まれ、最初の不等号括弧の後にスラッシュが付きます (</Sample Element>)。

開始タグでは、属性を指定するのに、属性名 (例えば、attribute1) の後に、等号 (=)、引用符で囲まれた属性値 (例えば、"value1") の順に続きます。 開始タグでは、任意の数の属性を指定できます。

マクロ・エレメントに他の XML エレメントが含まれていない場合、図 9 のように、省略形式で書き込むことができます。

図 9. 省略形式で書かれたサンプル XML エレメント
<SampleElement attribute1="value1" attribute2="value2"  />

上記の図では、<SampleElement> エレメントは、左不等号括弧 (<) の後に、名前 (SampleElement)、属性、スラッシュ、右不等号括弧 (/>) の順に続けて書き込まれています。 このように、XML エレメント全体が 1 対の不等号括弧内に書き込まれます。

マクロ・スクリプトの概念視点

マクロ・スクリプトは、最高 3 つのタイプのサブエレメントを含む 1 つの <HAScript> エレメントから構成されます。

図 10 は、3 つの <screen> エレメントを含むサンプル・マクロ・スクリプトの概念視点を示しています。

図 10. マクロ・スクリプトの概念視点

上記の図は、主なタイプのサブエレメントのインスタンスが含まれている <HAScript> エレメント (HAScript) を 示しています。これらのサブエレメントは、<import> エレメント (Import)、<vars> エレメント (Variables)、 および 3 つの <screen> エレメント (Screen1、Screen2、および Screen3) です。

すべてのマクロ・スクリプトは、上記のような構造を持っています。ただし、大部分のマクロ・スクリプトには、もっと多くの screen があります。 上記のマクロで 50 個の screen がある場合、上記の図の外観はほぼ同じですが、Screen3 の後に、追加の screen (Screen4、Screen5 から、Screen50 まで) が続きます。 (ただし、screen が保管される順序は、必ずしも、マクロの再生時に screen が実行される順序を表しているわけではありません。)

<HAScript> エレメントは、マクロ・スクリプトのマスター・エレメントです (HAScript は、Host Access Script を意味します)。 このエレメントは、マクロ全体を囲み、その開始タグには、マクロ全体に適用できる情報 (例えば、マクロの名前) を含む属性が入っています。 <HAScript> エレメントの例については、図 12 を参照してください。

<import> エレメントは、Java クラスのインポートに使用され、オプションです。 Java クラスのインポートは、上級トピックであり、Java クラスのインポート型の作成で説明します。

<vars> エレメントは、標準データ型 (boolean、integer、double、string、または field) のいずれかに属する変数を宣言し、初期化するのに使用されます。 標準変数の使用は、上級トピックであり、変数とインポートした Java クラスで説明します。

<screen> エレメントは、マクロ画面の定義に使用されます。 <screen> エレメントは、<HAScript> 内にある最も重要なエレメントです。 上記の図 10 で分かるように、マクロ・スクリプトは、主に <screen> エレメント (例えば、図中の Screen1、Screen2、および Screen3) から構成されます。 また、マクロ・スクリプト内のその他の種類の XML エレメントの大部分も、<screen> エレメント内で指定されます。

マクロ・タブの概要

マクロ・エディターの操作に慣れるために、この節では、マクロ・エディターの「マクロ (Macro)」タブと、前の節で説明されている <HAScript> エレメントとの非常に単純な比較で成り立っています。

マクロ・エディターには、4 つのタブがあります。「マクロ (Macro)」、「画面 (Screens)」、「リンク (Links)」、および「変数 (Variables)」です。最初のマクロ・タブは、<HAScript> エレメントと非常に密接に対応します。 実際に、マクロ・タブは、<HAScript> エレメントの開始タグの属性に保管される情報用のグラフィカル・ユーザー・インターフェースです。

したがって、<HAScript> エレメントはマクロ・スクリプトのマスター・エレメントであり、マクロ全体に適用される情報 (例えば、マクロ名) がその属性に含まれるので、同様に、マクロ・タブは、マクロ・エディターの最初のタブであり、同じグローバル情報の一部にアクセスできます。

図 11 は、マクロ・タブが選択された状態のマクロ・エディターを示しています。

図 11. マクロ・エディターのマクロ・タブ

上記の図では、マクロ・タブには、「マクロ名 (Macro Name)」、「記述 (Description)」、およびその他の情報の入力フィールド、および複数のチェック・ボックスがあります。 次の 2 つのフィールドに注目してください。

図 12 は、図 11 のマクロ・タブに表示されているのと同じ情報およびいくつかの追加情報が含まれている、サンプル <HAScript> エレメントを示しています。 コード・エディターでは、<HAScript> エレメントは 1 行に書き込まれますが、ここでは、属性が見えるように複数行で書かれています。

図 12. サンプル <HAScript> エレメント
<HAScript
     name="ispf_ex1"
     description=" "
     timeout="60000"
     pausetime="300"
     promptall="true"
     author=""
     creationdate=""
     supressclearevents="false"
     usevars="false"
     ignorepauseforenhancedtn="false"
     delayifnotenhancedtn="0">

...

</HAScript>

上記の図の <HAScript> エレメントには、図 11 に表示されているマクロ・タブの各入力フィールドに対応する属性があることに注目してください。 例えば、<HAScript> エレメント内の name 属性 (name="ispf_ex1") は、マクロ・タブのマクロ名フィールドに対応します。 同様に、<HAScript> エレメント内の usevars 属性 (usevars="false") は、マクロ・タブの「変数と演算式を使用する」チェック・ボックスに対応します。

マクロ画面とそのサブコンポーネント

ここでは、マクロ画面とその主なサブコンポーネントについて説明します。 マクロ画面の定義は、定義が必要な別の用語、すなわちアプリケーション画面によって決まります。

アプリケーション画面

アプリケーション画面は、ホスト・アプリケーションによって Host On-Demand セッション・ウィンドウ上に表示される、意味のある文字配置です。

おそらくお気付きのように、アプリケーション画面の概念はすでに十分理解しています。 アプリケーション画面の一例は、図 13 に表示されている「ISPF 基本オプション・メニュー (ISPF Primary Option Menu)」です。 (これと同じアプリケーション画面は、図 5 に表示されています。)

図 13. サンプル・アプリケーション画面「ISPF 基本オプション・メニュー (ISPF Primary Option Menu)」

上記の図では、このアプリケーション画面には、一番上の行にメニュー選択項目 (MenuUtilitiesCompilersOptions など)、一番下の行にファンクション・キーの割り当て (F1=Help、F2=Split など)、上部付近にタイトル (ISPF Primary Option Menu)、左側にオプションのリスト (0 から V)、およびオプション番号または文字を入力する入力フィールド (Option ===>) が表示されています。 ユーザーが入力すると (例えば、3 (Utilities を表す) を入力した後、Enter キーを入力すると)、ISPF アプリケーションは、セッション・ウィンドウからこれらの表示項目をすべて除去し、別のアプリケーション画面を表示します。

マクロ画面

マクロ画面は、特定のアプリケーション画面へのアクセスを管理する方法をマクロ・ランタイムに指示する、1 組の命令です。 マクロ画面には、次のものが含まれています。

この時点では、概念はあまり直観的ではありませんが、同じアプリケーション画面を参照する複数のマクロ画面が同じマクロに存在する場合があります。 マクロ画面が相互にリンクされる方法によって、マクロ・ランタイムは、マクロの再生時に、同じアプリケーション画面に複数回アクセスして、アクセスごとに異なるマクロ画面を処理する場合があります。

また、1 つのマクロ画面が、複数のアプリケーション画面を参照する場合もあります。 複数のアプリケーション画面が互いに類似している場合、マクロ開発者は、類似したすべてのアプリケーション画面を処理するマクロ画面を作成することができます。

それにもかかわらず、各マクロ画面は、なんらかのアプリケーション画面に対応します。 マクロを記録する際には、マクロ・オブジェクトは、記録中に、ユーザーがアクセスするアプリケーション画面ごとにマクロ画面を作成し、保管します。 同じアプリケーション画面に複数回アクセスする場合、マクロ・オブジェクトは、アクセスごとにマクロ画面を作成し、保管します。 同様に、記録されたマクロを再生する際には、マクロ・ランタイムは、再生中に、アクセスするアプリケーション画面ごとに 1 つのマクロ画面を処理します。

マクロ画面の概念視点

マクロ画面は、次の 3 つの必須サブエレメントを含む 1 つの <screen> エレメントから構成されます。

これらのサブエレメントは必須であり、それぞれ 1 つしか指定できません。

図 14 は、<screen> エレメントの概念視点を示しています。

図 14. <screen> エレメントの概念視点

上記の図は、<screen> エレメント (Screen1) に 3 つの必須サブエレメント (<description> エレメント (記述)、<actions> エレメント (アクション)、および <nextscreens> エレメント (有効な次画面 ) が含まれていることを示しています。

すべての <screen> エレメントは、これらの 3 つのサブエレメントを使用して上記のような構造を持っています。 (4 番目のオプションのサブエレメント <recolimit> エレメントについては、本書のこれ以降の部分で説明します。)

<screen> エレメントは、マクロ画面のマスター・エレメントです。 このエレメントには、その特定のマクロ画面に属している他のすべてのエレメントが含まれています。また、開始タグには、マクロ画面全体に適用できる情報 (例えば、マクロ画面の名前) が入っている属性も含まれています。

<description> エレメントには、<description> エレメントが属している <screen> エレメントが、特定のアプリケーション画面に関連していることを、マクロ・ランタイムが認識できるようにするディスクリプターが含まれています。 このディスクリプターと <description> エレメントについては、画面記述と画面認識で説明しています。

<actions> エレメントには、マクロ・ランタイムがアプリケーション画面で実行する各種アクション (例えば、アプリケーション画面からのデータの読み取りや、キー・ストロークの入力) が含まれています。 これらのアクションと <actions> エレメントについては、マクロ・アクションで説明しています。

<nextscreens> エレメント (図 14 内の Valid Next Screens) には、現行のマクロ画面の後で表示される可能性があるすべての <screen> エレメントの画面名のリストが含まれています。 <nextscreens> エレメントと、そのエレメントの中に入っているエレメントについては、画面認識、パート 2で説明しています。

画面タブの概要

このセクションでは、マクロ・エディターの「画面 (Screens)」タブと、直前のセクションで説明されている XML <screen> エレメントとの関連を示します。 図 15 は、画面タブが選択された状態のマクロ・エディターを示しています。

図 15. マクロ・エディターの画面タブ

上記の図では、画面タブに次の項目が入っています。

現在、一般タブが選択されています。

画面タブには、次の 2 つの「画面名 (Screen Name)」フィールドがあることに注目してください。

画面タブの一番上にある画面名リスト・ボックスでは、使用したいマクロ画面の名前 (例えば、Screen1) をクリックします。マクロ・エディターは、そのマクロ画面に属する情報をサブタブに表示します。 例えば、図 15 では、リスト・ボックスは、マクロ画面名 Screen1 を表示し、サブタブは、Screen1 に属する情報を表示します。ユーザーがリスト・ボックス内の別のマクロ画面名 (おそらく、Screen10) を選択した場合、マクロ・エディターは、マクロ画面 Screen10 に属する情報をサブタブに表示します。

一般タブの下の画面名入力フィールドには、現在選択されているマクロ画面に割り当てたい名前を入力します。 Screenx のような画面名 (ここで、x は整数を表します。例えば、Screen1) は、一時的な名前であり、マクロ・オブジェクトがマクロ画面を作成するときにその画面に指定する名前です。 この名前をそのまま使用することも、もっと覚えやすい記述名に置き換えることもできます。 (すべてのマクロ画面に、Screen3、Screen10、Screen24 のような名前がある場合、どのマクロ画面が何を実行するかを覚えるのは困難です。)

画面タブ上のサブタブ (「一般 (General)」、「記述 (Description)」、および「アクション (Actions)」) は、直前のセクションで説明されている XML <screen> エレメントの主要部分に対応します。 具体的には、次のとおりです。

しかし、<nextscreens> サブエレメントはどうでしょうか。 使いやすくするために、<nextscreens> エレメントに属する情報は、上位の「リンク (Links)」タブに表示されます。 図 15 の画面タブのすぐ右に、リンク・タブが表示されています。

図 16 は、Screen1 という名前のサンプル <screen> エレメントの XML 開始タグと終了タグを示しています。

図 16. <screen> エレメントの開始タグと終了タグ
   <screen name="Screen1" entryscreen="true" exitscreen="false" transient="false">
   ...
   </screen>

上記の図では、省略符号 (...) は、XML テキストの一部ではなく、簡単にするために、<screen> エレメント内に含まれている必須エレメントが省略されていることを示しています。 開始タグ内の属性は、図 15 の一般タブ上のフィールドに対応していることに注意してください。 例えば、name 属性 (name="Screen1") は、一般タブ上の画面名入力フィールドに対応し、entryscreen 属性 (entryscreen="true") は、一般タブ上の「入り口画面 (Entry Screen)」リスト・ボックスに対応します。

図 17 は、囲まれているエレメントを含めて、<screen> エレメント全体の XML テキストを示しています。

図 17. サンプル XML <screen> エレメント
   <screen name="Screen1" entryscreen="true" exitscreen="false" transient="false">
      <description>
         <oia status="NOTINHIBITED" optional="false" invertmatch="false" />
      </description>
      <actions>
         <mouseclick row="4" col="15" />
         <input value="3[enter]" row="0" col="0" movecursor="true"
                   xlatehostkeys="true" encrypted="false" />
      </actions>
      <nextscreens timeout="0" >
         <nextscreen name="Screen2" />
      </nextscreens>
   </screen>

上記の図では、<screen> エレメントに、必須の <description>、<actions>、および <nextscreens> エレメントが入っていることに注目してください。