以下で使用する場合の Host On-Demand マクロの適応: ZIETrans

このマニュアルでは、Host On-Demand マクロの言語とその使用法を説明します。内容は、「Host On-Demand Macro Programming Guide Version 10」から抽出したもので、各セクションには、ZIETrans 内でのマクロのインプリメンテーションとエディターの使用法に適合するように、変更が加えられています。このセクションでは、ZIETrans 内で使用するために Host On-Demand マクロを適合させる方法を説明します。

Host On-Demand 環境でのマクロは通常、ユーザーのワークステーションで実行されます。ZIETrans Web 環境では、マクロは通常、中央サーバーで実行されます。このような違いにより、ZIETrans ではマクロで使用するデータについてのプロンプトを出す方法も別にする必要があります。このマニュアルでは、ユーザーのワークステーションでプロンプト・パネルを開く方法について説明しますが、ZIETrans では行われません。代わりに HCL ZIETrans は、HCL ZIETrans グローバル変数、ユーザー・リスト、 ZIETrans 統合オブジェクトの入力プロパティー、またはユーザーのワークステーションに送信される HTML 入力フォームを使用してユーザーから、マクロ・プロンプトのデータを検索します。同様に、ホスト画面から抽出されたデータは、HCL ZIETrans ユーザーのワークステーション上に即座に表示することはできません。その代わりデータは、HCL ZIETrans グローバル変数にコピー、HCL ZIETrans 統合オブジェクトの出力プロパティーにコピー、または HTML ページ内でユーザーのワークステーションに送信されます。HCL ZIETrans ランタイムのマクロ・エンジンによってこれら追加のマクロ対話機能を提供できるようにするため、HCL ZIETrans Toolkit は、HCL ZIETrans Toolkit とランタイムにマクロ・スクリプトについての追加情報を提供する XML の別のレイヤーで各 Host On-Demand マクロ・スクリプトをカプセル化します。

このマニュアルで説明する Host On-Demand マクロ・スクリプトは、<HAScript> タグで始まり、</HAScript> タグで終わります。HCL ZIETrans では、各 Host On-Demand マクロ・スクリプトが HCL ZIETrans の <macro> 開始タグと </macro> 終了タグの内側に入れられます。<macro> タグには、次の 4 つのエレメントがあります。
  • <associatedConnections> タグは、このマクロに関連付ける接続定義を定義します。
    • これにより、HCL ZIETrans アプリケーションをビルドおよび構成するときに、Toolkit でマクロ名のドロップダウン・リストを作成できるようにします。
    • このエレメントは、HCL ZIETrans ランタイム・マクロ・エンジンにより無視されます。
  • <extracts> タグは、HCL ZIETrans マクロ・エンジンに対して、マクロの実行中にホスト画面から抽出されるデータの処理方法を定義します。このエレメント内の情報は、マクロを使用して統合オブジェクトを作成する場合に、作成される統合オブジェクトの出力プロパティーのサイズとタイプを示すためにも使用されます。
    • マクロを実行アクションまたはマクロ・トランザクションを実行アクションによってマクロが再生される場合は、このエレメントによって、抽出データをグローバル変数に保管するか、または HTML ページによりユーザーのワークステーションに送信するかどうかが制御されます。
    • このマクロが HCL ZIETrans ランタイムのマクロ・エンジンの外部で再生される場合、このエレメントは無視されます。例えばマクロを、HCL ZIETrans 統合オブジェクトを介して Web サービスとして、または JSP ページのセットとして実行する場合、抽出されたデータは統合オブジェクトの出力プロパティーにコピーされ、これにより、それぞれ Web サービスまたは JSP ページで使用可能になります。
    • <extracts> タグはランタイムに統合オブジェクトによって使用されることはありませんが、<extracts> タグを使用して HCL ZIETrans マクロから統合オブジェクトを作成する方法を選択できます。特に、統合オブジェクトの出力プロパティーの構造は、このエレメントによって決まります。<extracts> エレメント内の情報は、Host On-Demand マクロ・スクリプト自体に含まれる実際の <extract> アクションと一致している必要があります。それ以外の場合は、ランタイムに抽出されるデータが統合オブジェクトの出力プロパティーに正しく適合せず、データを失う可能性があります。<extracts> タグには、データの各列の名前、幅、およびエレメント数が記録されるので、この点はデータのテーブルを抽出する場合に特に重要になります。Host On-Demand マクロの <extract> タグは同じ領域を示し、列出力プロパティーへのデータの構文解析が正しく実行されるようにする必要があります。
  • <prompts> タグには、HCL ZIETrans マクロ・エンジン用として、マクロの実行を完了するために必要なデータの処理方法が記述されます。このエレメント内の情報は、マクロを使用して統合オブジェクトを作成する場合に、作成される統合オブジェクトの入力プロパティーのサイズとタイプを示すためにも使用されます。
    • HCL ZIETrans マクロ・エンジンが画面のカスタマイズ中に (マクロを実行アクションかマクロ・トランザクションを実行アクションを使用して) マクロを実行している場合、このエレメントは、必要なデータをグローバル変数から取得するか、指定されたストリング・リテラルから取得するか、または HTML ページによりエンド・ユーザーから要求されるようにするかどうかを制御します。
    • このマクロが HCL ZIETrans ランタイムのマクロ・エンジンの外部で再生される場合、このエレメントは無視され、必要とされるすべてのデータはマクロが実行されている環境 (例えば、Web サービスや統合オブジェクト) によって供給されます。
    • <prompts> タグはランタイムに統合オブジェクトによって使用されることはありませんが、HCL ZIETrans マクロから統合オブジェクトを作成する方法を選択する場合には、<prompts> タグを使用します。特に、統合オブジェクトの入力プロパティーの構造はこのエレメントによって決まります。<prompts> エレメント内の情報は、Host On-Demand マクロ・スクリプト自体に含まれる実際の <prompt> アクションと一致している必要があります。それ以外の場合は、ランタイムに統合オブジェクトによって供給されるデータは、Host On-Demand マクロの <prompt> アクションで必要とされるデータとしては不十分となり、マクロが正しく再生されなくなります。
  • <HAScript> タグは、このマニュアルで説明する Host On-Demand マクロのスクリプトです。
次の例は、2 つの prompts と 1 つの extracts を含む単純なマクロの構造を示しています。
図 1. 単純なマクロ構造
<?xml version="1.0" encoding="UTF-8"?>
<macro>
    <associatedConnections default="main">
        <connection name="main"/>
    </associatedConnections>
    <extracts>
        <extract handler="default.jsp" index="-1" indexed="false"
            name="displayID" overwrite="true" save="true" separator=""
            showHandler="false" variableName="displayID"/>
    </extracts>
    <prompts>
        <prompt handler="default.jsp" name="password" separator=""
            source="handler" value="" variableIndex="0"
            variableIndexed="false" variableName="" welApplID="" welIsPassword="false"/>
        <prompt handler="default.jsp" name="userID" separator=""
            source="handler" value="" variableIndex="0"
            variableIndexed="false" variableName="" welApplID="" welIsPassword="false"/>
    </prompts>
    <HAScript author="" blockinput="false" creationdate=""
        delayifnotenhancedtn="0" description=""
        ignorepauseforenhancedtn="false" name="SignOn" pausetime="300"
        promptall="true" supressclearevents="false" timeout="60000" usevars="false">
        <screen entryscreen="true" exitscreen="false" name="Screen1" transient="false">
            <description uselogic="1 and 2">
                <oia invertmatch="false" optional="false" status="NOTINHIBITED"/>
                <string casesense="false" col="35" invertmatch="false"
                    optional="false" row="1" value=" Sign On "/>
            </description>
            <actions>
                <extract assigntovar="" continuous="false" ecol="79"
                    erow="4" name="displayID" planetype="TEXT_PLANE"
                    scol="70" srow="4" unwrap="false"/>
                <prompt assigntovar="" clearfield="false" col="53"
                    default="" description="" encrypted="false" len="10"
                    movecursor="true" name="userID" required="false"
                    row="6" title="" varupdateonly="false" xlatehostkeys="true"/>
                <mouseclick col="53" row="7"/>
                <prompt assigntovar="" clearfield="false" col="53"
                    default="" description="" encrypted="true" len="10"
                    movecursor="true" name="password" required="false"
                    row="7" title="" varupdateonly="false" xlatehostkeys="true"/>
                <input col="0" encrypted="false" movecursor="true"
                    row="0" value="[enter]" xlatehostkeys="true"/>
            </actions>
            <nextscreens timeout="0">
                <nextscreen name="Screen2"/>
            </nextscreens>
        </screen>
        <screen entryscreen="false" exitscreen="true" name="Screen2" transient="false">
            <description uselogic="1 and (2 and 3 and 4)">
                <oia invertmatch="false" optional="false" status="NOTINHIBITED"/>
                <cursor col="7" invertmatch="false" optional="false" row="20"/>
                <numinputfields invertmatch="false" number="1" optional="false"/>
                <string casesense="false" col="32" invertmatch="false"
                    optional="false" row="1" value=" i5/OS Main Menu " wrap="false"/>
            </description>
            <actions/>
            <nextscreens timeout="0"/>
        </screen>
    </HAScript>
</macro>
図 1 のサンプル・マクロは、マクロを実行するエンジンに応じて異なる方法でその環境と対話します。
  • このマクロが、接続イベントにおいてマクロを実行アクションとしてランタイム・マクロ・エンジンにより再生される場合は、例えば、HTML 入力フォームによりユーザー ID とパスワードの入力を求めるプロンプトがユーザーに対して出され、5250 ワークステーションのディスプレイ ID が HCL ZIETrans グローバル変数 displayID に保管されます。マクロ実行アクションについて詳しくは、「マクロとホスト端末」を参照してください。
  • 代わりにマクロが、JSP ページ、Web サービス、または開発者が提供するビジネス・ロジックを使用して HCL ZIETrans 統合オブジェクトにより実行される場合は、実行されるときに統合オブジェクトの getUserID メソッドおよび getPassword メソッドに必要な値が存在していなければ、そのマクロは失敗します。これは、統合オブジェクトがそれ自体のマクロ・エンジンを供給し、そこにおいて、すべての prompts が統合オブジェクトの getter からデータを取得し、すべての extracts がデータを統合オブジェクトの setter に配置するためです。統合オブジェクトの入力プロパティーと出力プロパティーの名前とタイプは、それぞれ <prompts> エレメントと <extracts> エレメント内のデータによって決まります。統合オブジェクトについて詳しくは、「マクロとホスト端末」を参照してください。
  • また、上述のマクロは、接続エディターの「マクロ」タブにある HCL ZIETrans 接続に関連付けられた接続マクロとしては実行されません。これは、接続マクロと切断マクロが、ランタイム・マクロ・エンジンではなく、HCL ZIETrans 接続管理サブシステムによって自動実行される特殊なマクロだからです。接続マクロで使用できるのは、その prompts のユーザー・リストのみです。接続マクロと切断マクロについて詳しくは、「マクロとホスト端末」を参照してください。