Symfoware Server WebDBtoolsユーザーズガイド - FUJITSU - |
目次
索引
![]() ![]() |
付録A WebScriptヒント集 |
WebScriptを利用する際に、ヒントとなる以下の項目について説明します。
WebScriptでは、変数の埋込みの手段として、以下の2つを提供しています。
タグのパラメタまたはその一部として、変数の値を使用したい場合は、ドル記号で置き換えます。
例
<A HREF="$myURL"> |
タグ以外の場所に、変数の値を使用する場合は、<!REPLACE>タグまたは<!HREPLACE>タグを用います。
例
<!SETVAR cost 5000> 宿舎までの交通費は<!HREPLACE cost>円です。 |
<!HREPLACE>タグは、STYLE=HTMLを指定した<!REPLACE>タグと同等です。通常の使用では、<!HREPLACE>タグを使用すれば十分で、<!REPLACE>タグを使用する必要はほとんどありません。
なお、タグ自身またはタグのパラメタ名の部分を、変数の値で置き換えることはできません。
大きなメモリ領域を、2つ以上の変数で参照したい場合があります。メモリの参照方法により、性能が変わります。以下に例を示します。
<!DO "SELECT * FROM SCM.TBL1 WHERE ..." RESULT=rslt> |
この3番目のデータ (先頭のデータを0番目と数えるものとします) を変数xに入れる場合、以下の2種類の方法があります。
(1) <!SETVAR x rslt[3]> (2) <!SETVAR x rslt[3] REF> |
(1)では、3件目のデータ全体が、xにコピーされます。各データのサイズが大きい場合は、性能が悪くなります。
(2)のようにREFパラメタを使用すると、データがコピーされません。xがrslt[3]の指しているデータを指すだけです。
したがって、(2)の方法が、よいことがわかります。
共有セションでは、グローバル変数の参照はできません。共有セションで、あるアクセスから次のアクセスへ情報を受け渡したい場合には、別の方法を用いることが必要です。このために、便利な方法が、Cookieを用いることです。
Cookieを使用する例は、“共有セション”を参照してください。
正しく動作させるために、以下の指針に従ってください。
<A>タグのパラメタHREFにWebScriptコマンドを指定し、パラメタを指定した場合、そのパラメタの値をURLencode関数にて変換してください。
<FORM>タグのパラメタMETHODにPOSTを指定した場合のパラメタの値は、ブラウザが自動的にエンコードを行います。
<!DO>タグを使用して検索する場合、検索結果数を取得するには、取得した結果のリストに対し、listlen関数を実行してください。
例
<!DO "SELECT * FROM SCM.TBL1 WHERE ..." RESULT=rslt> 全部で<!HREPLACE 'listlen(rslt)'>件のデータが検索されました。 |
リストの全要素をループする方法は、以下の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> |
目次
索引
![]() ![]() |