マクロと組み合わせた ZIE Host Access Toolkit 製品
別製品の ZIE Host Access Toolkit に組み込まれているクラスを使用して、マクロ変数の動的作成、マクロ・アクションの実行、およびマクロの実行が可能です。ここでは、ZIE Host Access Toolkit 製品の使用例を示します。
<HAScript name="Logon" description="" timeout="60000" pausetime="300"
promptall="true" author="" creationdate="" supressclearevents="false"
usevars="true" >
<screen name="Screen1" entryscreen="true" exitscreen="false" transient="false">
<description>
<oia status="NOTINHIBITED" optional="false" invertmatch="false" />
</description>
<actions>
<prompt name="'UserID:'" description="" row="20" col="16" len="8"
default="" clearfield="false" encrypted="false" movecursor="true"
xlatehostkeys="true" assigntovar="" varupdateonly="false" />
<input value="'[tab]'" row="0" col="0" movecursor="true"
xlatehostkeys="true" encrypted="false" />
<prompt name="'Password:'" description="" row="21" col="16" len="8"
default="" clearfield="false" encrypted="true" movecursor="true"
xlatehostkeys="true" assigntovar="" varupdateonly="false" />
<input value="'[enter]'" row="0" col="0" movecursor="true"
xlatehostkeys="true" encrypted="false" />
</actions>
<nextscreens timeout="0" >
<nextscreen name="Screen2" />
</nextscreens>
</screen>
<screen name="Screen2" entryscreen="false" exitscreen="true" transient="false">
<description>
<oia status="NOTINHIBITED" optional="false" invertmatch="false" />
<numfields number="7" optional="false" invertmatch="false" />
<numinputfields number="1" optional="false" invertmatch="false" />
</description>
<actions>
<message title="" value="'Welcome!'" />
</actions>
<nextscreens timeout="0" >
</nextscreens>
</screen>
</HAScript>
// Assume macro is an instantiated Macro with the appropriate listeners set up.
// (See the Javadoc for the Macro bean and the Macro variables demo program,
// MacroVariablesDemo.java, in the ZIE Host Access Toolkit samples directory
// for details.)
// Assume macroString is a String containing the previous macro script
macro.setMacro(macroString);
MacroScreens ms = macro.getParsedMacro();
ms.createVariableString("$userid$", null); //creates a variable $userid$ with
//initial value of ""
MacroScreen mscrn = ms.get(0); //get the first screen
MacroActions mas = mscrn.getActions(); //get the actions from the first screen
MacroActionPrompt map = (MacroActionPrompt)mas.get(0); //get the first prompt action
map.setAssignToVar("$userid$"); //assign the prompt response to the variable $userid$
MacroScreen mscrn2 = ms.get(1); //get the second screen
MacroActions mas2 = mscrn2.getActions(); //get the actions from the second screen
MacroActionMessage mam = (MacroActionMessage)mas2.get(0); //get the message action
mam.setMessage("'Welcome ' + $userid$ + '!'"); //change the message to now be a
//personalized message using $userid$
macro.setParsedMacro(ms); //reset the macro with the updated MacroScreens
macro.play(); //play the macro with the changes for variables
//create a variable $datetimestamp$ with initial value ""
ms.createVariableString("$datetimestamp$", null);
//create new extract to get date and time from second row of screen
MacroActionExtract mae = new MacroActionExtract(2, 35, 2, 71, "'datetimeextract'");
//assign the date and time string to $datetimestamp$
mae.setAssignToVar("$datetimestamp$");
//add the extract after the first message
mas2.add(mae);
//create a new message to display the date and timestamp
MacroActionMessage mam2 = new MacroActionMessage(
"'You have logged on at ' + $datetimestamp$", "'Date Time Stamp'");
//add the message after the extract
mas2.add(mam2);
MacroActionExtract mae = new MacroActionExtract(2, 35, 2, 71, "'datetimeextract'");
mae.setAssignToVar("$datetimestamp$");
ms.createVariableString("$datetimestamp$", null);
mas2.add(mae);
MacroActionMessage mam2 = new MacroActionMessage("'You have logged on at ' +
$datetimestamp$", "'Date Time Stamp'");
mas2.add(mam2);
MacroActionExtract が MacroActions に追加される前に $datetimestamp$ が作成されるので、前記のシーケンスは有効です (MacroActions は、 元は MacroScreens から取り出されたものなので、既に MacroScreens と関連付けられています)。前記のシーケンスの最後に createVariable() メソッドが呼び出される場合、 シーケンスは無効になります。これは、MacroActionExtract と MacroActionMessage が MacroActions に追加されて MacroScreens に関連付けられた時点では、 変数 $datetimestamp$ は使用可能でないからです。
MacroScreens メソッド isUseVars() のデフォルト値は false です。ただし、MacroScreens に対して createVariable() メソッドの 1 つを 呼び出した場合、isUseVars() は自動的に true を戻します。変数を作成せず、属性から変数と算術式がスキャンされるようにしたい場合は (例えば、 チェーニングした子マクロを作成していて、子マクロが自身の変数を 持たず、親からの変数を期待している場合)、MacroScreens に対して setUseVars(true) を 呼び出す必要があります。
MacroActionInput mai = new MacroActionInput();
mai.setRow("$rowvar$ + 1");
int row = mai.getRow();
VariableException クラスを使用して、無効な式 (例: "45 *") や 正しくない演算オペランド (例: "'3a' * 2") などの例外を検出できます。
プログラム式マクロ MacroVariablesDemo.java を使用するサンプル・プログラムが、ZIE Host Access Toolkit の samples ディレクトリーにあります。