第9章 環境パラメタ
A.1 WebScript ヒント集
付録 A WebScript ヒント集
WebScriptを利用する場合に、ヒントとなる項目について説明します。
共有セションでの情報の受け渡し
共有セションでは、グローバル変数の参照はできません。共有セションで、あるアクセスから次のアクセスへ情報を受け 渡したい場合には、別の方法を用いることが必要です。このために、便利な方法が、Cookieを用いることです。
Cookieを使用する例は、“3.6.11 共有セション”を参照してください。
日本語文字列の受渡し
正しく動作させるために、以下の指針に従ってください。
・ <A>タグのパラメタHREFにWebScriptコマンドを指定し、パラメタを指定した場合、そのパラメタの値をURLencode関
数にて変換してください。
・ <FORM>タグのパラメタMETHODにPOSTを指定した場合のパラメタの値は、ブラウザが自動的にエンコードを行い
ます。
検索結果数の取得
<!DO>タグを使用して検索する場合、検索結果数を取得するには、取得した結果のリストに対し、listlen関数を実行して
ください。
例
<!DO "SELECT * FROM SCM.TBL1 WHERE ..." RESULT=rslt>
全部で<!HREPLACE 'listlen(rslt)'>件のデータが検索されました。
<!FOREACH>と<!FOR>について
リストの全要素をループする方法は、以下の2つです。
【方法1】
<!FOREACH list x>
... xを使った処理 ...
<!/FOREACH>
【方法2】
<!FOR i 0 'listlen(list)-1'>
... list[i]を使った処理 ...
<!/FOR>
2つの方法は、ほとんど変わりませんが、方法1の場合、ループの中でxの値を変更すると、対応するlistの要素の値も変 更されます。
<!FOREACH>タグは、リストのループに対する最適化処理を行っています。リストのサイズが大きい場合は、方法1の方 が速く処理できることがあります。
パッケージについて
WebScriptでは、グローバル変数はパッケージに属しています。明示的にパッケージを指定しなくても、デフォルトのパッ ケージ("")に属しますが、できるだけアプリケーションを表すパッケージを使用するようにしてください。
たとえば、エンドユーザが、個別セション内で2つのアプリケーション「appA」と「appB」を共に使うことを考えます。両方の アプリケーションで、デフォルトのパッケージを使用している場合、2つのアプリケーションで同じグローバル変数名を使用 すると、変数が衝突して、予期しない動作を引き起こす可能性があります。
アプリケーションappAでは、すべてのフォーマットファイルのヘッダ部分で
<!PACKAGE "appA">
と宣言し、アプリケーションappBでは
<!PACKAGE "appB">
と宣言しておけば、同じグローバル変数名が使われた場合も、衝突する心配はありません。
可変キー値について
WebScript言語では、リストのキーの値に、定数文字列しか指定できません。大抵のアプリケーションでは、この定数文字 列の指定で十分です。もし、キー値を可変にする必要がある場合は、$を使用して変数を置き換えます。
例
<!DO "SELECT * FROM SCM.TBL1 WHERE ..." RESULT=rslt>
列 $QUERY::cNameの値は以下のとおりです。
<UL>
<!FOREACH rslt t>
<LI><!REPLACE 't{$QUERY::cName}'></LI>
<!/FOREACH>
</UL>
付録 B WebScript フォーマットファイル解釈の詳細
WebScriptフォーマットファイルの解釈の詳細について、説明します。