Symfoware Server WebDBtoolsユーザーズガイド - FUJITSU -
目次 索引 前ページ次ページ

第3章 データベース連携

3.3 拡張タグの基本要素

WebScriptは、フォーマットファイルに記述されるHTMLタグとHTML拡張タグのうち、拡張タグ部分を、サーバサイドの処理で動的なHTMLに変換します。拡張タグの基本要素および主なタグの利用方法の概要について説明します。構文の詳細は、“WebScript拡張タグ”を参照してください。

■フォーマットファイルのタグ形式と拡張タグの操作規

WebScriptは、フォーマットファイル中のHTMLおよびHTML拡張タグを処理します。タグは以下の形式をしています。
<タグ名 [パラメタ1[パラメタ2] ・・・] ] >

パラメタは、“パラメタ値”、“パラメタ名=パラメタ値”、“パラメタ名”のどれかの形式をとります。パラメタ名は、決められた文字列(キーワード)から構成されます。パラメタ値は任意の値です。

拡張タグは、タグ名の先頭に、「!」が付きます。

HTMLタグ例:<INPUT TYPE="txt" NAME="var" VALUE="value1">
拡張タグ例:<!DO "SELECT COL1,COL2 FROM SCM.TBL1 WHERE COL1=\'KEY01\'" RESULT=rslt>

拡張タグには、定数や変数の基本項目と変数を処理する機能があります。拡張タグの変数には、型がなく、動的に文字列か数値が設定されます。

例1:変数への値の設定

<!SETVAR>は、拡張タグの変数に値を代入する拡張タグです。例では2つのパラメタを指定しています。

<!SETVAR a 10>  ―――― 拡張タグ変数aに数値定数10を代入
<!SETVAR b 20>  ―――― 拡張タグ変数bに数値定数20を代入
<!SETVAR str "My Dog"> ― 拡張タグ変数strに文字列定数"My Dog"を代入
<!SETVAR v1 a>  ―――― 拡張タグ変数v1に変数aの内容を代入
<!SETVAR v2 str>  ――― 拡張タグ変数v2に変数strの内容を代入

拡張タグには、変数、演算、関数、制御構造などの要素があります。すべての要素で、以下の規則が適用されます。

例2:文字列の代入での二重引用符の利用

変数v3にMy Dogを代入

<!SETVAR v3 My Dog> ――(構文誤り)
<!SETVAR v3 "My Dog"> ― (正)
<!SETVAR v3 'My Dog'> ――(構文誤り:My Dogを変数と解釈する)
<!SETVAR v3 '"My Dog"'> ―(正:引用符は1つのパラメタという意味で利用される)

例3:引用符の利用

変数v3に、変数aと変数bの値を加えた値を代入

<!SETVAR v3 a + b> ―――(構文誤り)
<!SETVAR v3 "a + b"> ――(変数v3には文字列"a + b"が代入される)
<!SETVAR v3 'a + b'> ―――(正)

例4:引用符と二重引用符の利用

変数strに入っている文字列の4文字目から4文字がDogsなら、outstrに値を設定

<!SETVAR str "My Dogs"> 
<!IF 'substr(str,3,4) eq "Dogs"'>
  <!SETVAR outstr str>
<!/IF>

■基本要素の種

WebScriptの拡張タグは、以下に示す言語要素をもっています。

大分類

小分類

機能

変数

ユーザ
変数

グローバル変数

フォーマットファイル間でも有効な変数

ローカル変数

フォーマットファイル内の変数

システム変数

WebScriptであらかじめ与えられている変数

定数

文字列

文字の処理(結合、比較など)が可能

数値

数値の処理(比較、四則演算)が可能

変数の変換

置換

タグ内にWebScript変数の値を埋め込む

REPLACE,HREPLACE

タグとタグの間にWebScript変数の値を埋め込む

値の種類

単値

アトミックな値(これ以上分解できない値)

リスト

複数の値(配列と同様に要素に値を複数もつ)

代入

 

変数への値の設定

演算、参照

 

変数参照、四則演算、論理式、
リスト生成、文字列処理

関数

文字列

文字列の変換、部分取出しなど

数学

三角関数、べき乗、指数、対数、ルート、絶対値

リスト

結合、分解、ソート、リスト要素処理

時間

GMT、LOCAL時間取得

変数

変数定義判定

HTML

文字のHTML表現のサポート

制御構造

IF,ELSE,ELSEIF

判定

FOR

条件ループ

FOREACH

リスト処理条件ループ

WHILE

条件ループ

BREAK

FOR、FOREACH、WHILE 抜出し

CONTINUE

FOR、FOREACH、WHILE 現処理スキップ

THROW

例外通知

CATCH

例外取出し

ABORT

処理中止

データベース

DO

データベースのデータ操作や定義などの操作

TRANSACTION

トランザクションのコミットとロールバック

エラー処理

ERRORHANDLE

エラー処理モード変更

Cookie

SETCOOKIE

COOKIEパッケージ変数設定

■WebScriptの定数、変

◆定数

WebScriptの定数には、数値定数および文字列定数があります。文字列定数は、二重引用符(")または引用符(')で囲んで表現します。数値定数には、10進、8進、16進があります。WebScript内部では、数値を、実数の倍精度の浮動小数点で表現しています。

例:数値定数
100

例:文字列定数
"WebScript"

◆変数

変数には、ユーザ変数(グローバル変数、ローカル変数)とシステム変数があります。

グローバル変は、フォーマットファイル間のWebScriptセションで、利用できます。ローカル変は、対象フォーマットファイル内だけで有効です。システム変は、WebScriptにより既定の形式の変数で、QUERY、COOKIEおよびSYSTEMの各パッケージ変数があります。
QUERYパッケージ変は、WebクライアントからGETのURL、POSTのFORMで送信された値です。COOKIEパッケージ変は、Webクライアントから送られてきたCOOKIEの値です。SYSTEMパッケージ変は、WebScriptで定められている変数です。

QUERYパッケージ変数の例:QUERY::var(<INPUT TYPE="text" NAME="var" 
VALUE="value1">という要素の例)
COOKIEパッケージ変数の例: COOKIE::name (nameという名前のCOOKIEの例)
SYSTEMパッケージ変数の例: SYSTEM::DB_ERRORCODE(エラーメッセージの変数の例)

グローバル変数とローカル変数は、重複しない任意の名前を利用できます。

変数は以下の利用ができます。

◆代入

変数への値の代入は、<!SETVAR>拡張タグにより行います。

<!SETVAR outVar inName>
outVar変数にinNameの定数や変数の内容を設定します。

例:

<!SETVAR  city  '"tokyo"'>      cityに"tokyo"が設定されます。
<!SETVAR  city  '1'>      cityに1が設定されます。

■変数の置換と値の解

WebScriptは、“パラメタ値”に、拡張タグの変数を記述し、タグ内に記述した変数を置換する機能があります。パラメタ値に拡張タグの変数を記述する場合には、先頭に“$”を付け、変数名を括弧で囲みます。以下の2つの条件を満たしている場合に、括弧は省略できます。

例:animalを"Dog"、numberを100に指定した場合

括弧の省略不可:$(animal)#100 = $animal#100 →(展開結果:Dog#100)

括弧の省略:$(animal)$(number) = $animal$number →(展開結果:Dog100)

括弧の省略不可:$(animal)100 →(展開結果:Dog100)

括弧の省略不可:$(animal)_100 →(展開結果:Dog_100)

フォーマットファイルの変数の置換は、以下のような3段階の過程で処理されます。

  1. パラメタの分解
    タグのパラメタを空白を区切りとして分解します。
    <!SETVAR v1 '$a + $b'>

    タグ:!SETVAR、第1パラメタ:v1, 第2パラメタ: '$a + $b'

  2. 変数の置換
    先頭に$のついた変数を実際の値に置き換えます。二重引用符内であっても置換が行われます。
    aの値が20、bの値が30とします。
    '$a + $b'

    '20 + 30'

  3. WebScriptの言語による値の解釈
    変数の置き換えが済んだ結果を解釈し,拡張タグを処理します。
    '20 + 30'

    50
    拡張タグの実行で、v1には50が代入されます。

ただし、共通の規則により、二重引用符で囲まれた、パラメタは、解釈はされず1つの文字列となります。以下に例を示します。

<!SETVAR v1 "$a + $b"> 
        ↓(拡張タグ変数の展開)
<!SETVAR v1 "20 + 30">  ―― 変数aの値と変数bの値が展開される
<!SETVAR v1 "20 + 30">  ――"20 + 30"は、二重引用符で囲んでいるため
                             v1には、"20 + 30"という文字列が入ります。

変数の置換は、フォーマットファイル中に記述したHTML構文中も同様に行われます。

例:

<INPUT TYPE=text NAME="$varname" value="$val"> (varnameがitem, valueが10の場合)
       ↓
<INPUT TYPE=text NAME="item" value="10">

■変数のHTML置

フォーマットファイル中に記述したHTML構文中に、WebScriptの変数を埋め込むことができます。変数を、HTMLタグ内に記述する場合は、変数の先頭にドル記号“$”を付加します。

例:

<INPUT TYPE="text" NAME="$varname" VALUE="$val"> (varnameがitem, valが10の場合)
        ↓
<INPUT TYPE="text" NAME="item" VALUE="10">

■変数のHTML変

WebScriptの変数を、HTMLのタグとタグの間に展開するための拡張タグとして、<!REPLACE>拡張タグと<!HREPLACE>拡張タグがあります。

例:

<!SETVAR var001 '"Hello"'>
<B><!REPLACE var001></B>

■値の種(コンテキス

WebScriptの変数に型は存在しません。変数の書かれている場所の文脈により、型が動的に決まります。これをコンテキストと呼びます。コンテキストは、数値、文字などの単値またはリストのどれかになります。

◆単

アトミックな値(これ以上分解できない値)で、数値の単値と文字列の単値があります。

単値生成の例:数値

<!SETVER ATM01 100>

単値生成の例:文字列

<!SETVER ATM02 "WebScript">

◆リストとリストの処理

配列同様に複数の値を保持するデータで、リストの要素は、単値またはリストです。リストは、要素の番号または要素に付けたキーで参照できます。

リスト生成の例:

<!SETVAR LIST01 '("red", "blue", "green")'>

リスト生成の例:

<!SETVAR 'EXAMJOHN{mathematics}' 100>
<!SETVAR 'EXAMJOHN{geometory}' 50>
<!SETVAR 'EXAMMARRY{mathematics}' 80>
<!SETVAR 'EXAMMARRY{geometory}' 90>
<!SETVAR 'EXAMALL[0]' EXAMJOHN>
<!SETVAR 'EXAMALL[1]' EXAMMARRY>

リスト参照の例:

LIST01[1]             (blueが参照される)

リスト参照の例:

EXAMJOHN[1]           (50が参照される)
EXAMALL[1][1]         (90が参照される)
EXAMALL[1]{geometory} (90が参照される)

■演

以下の演算があります。演算の意味については、“演算子”を参照してください。

!:否定、-:符号変更、*:積、/:商、%:剰余、+:和、-:差

<,>,<=,>=,==,!=:数値比較記号、

lt,gt,le,ge,eq,ne:文字列比較記号

.:文字列結合

&&:and条件, ||:or条件, ( ):演算順序変更

例:

<!SETVAR animal '"dog"'>
<!SETVAR count  '010'>
<!SETVAR count  'count+100'>
<INPUT TYPE="text" NAME="$animal$count" VALUE="snoppy">
          ↓
<INPUT TYPE="text" NAME="dog110" VALUE="snoppy">

■組込み関

文字列、数学、リスト、時間、変数の定義判定、HTML表現などの関数があります。詳細は、“関数”を参照してください。

例:

<!SETVAR start '3'>
<!SETVAR len '2'>
<!SETVAR str '"abcdefghi"'>
<!SETVAR sstr 'substr( str, start, len )'>
<!REPLACE sstr>

■制御構

制御構造として以下のものがあります。詳細は、“WebScript拡張タグ”を参照してください。

<!IF>、<!ELSE>、<!ELSEIF>:条件判定文
<!FOR>、<!WHILE>、<!FOREACH>:条件ループ
<!BREAK>、<!CONTINUE>、<!THROW>、<!CATCH>、<!ABORT>:制御移動

■データベー

<!DO>拡張タグは、データベースをSQL文およびRDBコマンドで処理し、結果を得る拡張タグです。検索時は実行結果と結果データが、そのほかは実行結果が出力されます。

検索結果は、表イメージを2次元のリストに格納します。リストのキーには、列名が付けられています。

例:伝票表から「伝票番号」と「商品」を検索します。

<!DO "SELECT 伝票番号,商品 FROM STOCKS.伝票表" RESULT=r>
  <TABLE>
  <!FOREACH r t>
      <TR>
          <TD><!REPLACE t{伝票番号}</TD>
          <TD><!REPLACE t{商品}</TD>
      </TR>
  <!/FOREACH>
  </TABLE>

データベースのSQL文は、トランザクションにより実行されます。トランザクションには以下の機能があります。

排他制御については、“アプリケーション開発ガイド(埋込みSQL編)”の“排他制御”を参照してください。

WebScriptを利用してデータベースの処理を実行する場合は、以下のように処理を行う必要があります。

<!TRANSACTION>拡張タグは、トランザクションのCOMMITやROLLBACKを実行する拡張タグです。<!TRANSACTION>拡張タグは、トランザクション処理の拡張用機能であり、現在はそれぞれ、<!DO "COMMIT">、<!DO "ROLLBACK">タグと同様に機能します。
<!TRANSACTION>拡張タグは、トランザクションをデータベースの操作用のSQLと分けて、トランザクションの範囲を明示するような場合(トランザクションの範囲のコメント性の強調)に利用できます。それ以外は、<!DO "COMMIT">、<!DO "ROLLBACK">タグを利用してください。

■エラー処

エラーが発生しても異常終了せず、エラー解析処理することができます。環境パラメタファイルに、エラー処理が指定されていない場合に実行します。

例:

<!ERROHANDLE ON TYPE=DB>
<!DO "SELECT 伝票番号,商品 FROM STOCKS.伝票表" RESULT=r>
<!IF 'SYSTEM::DB_ERRORCODE ne "00000"'>
    <!SETVAR ans "failure">
    <!SETVAR errormsg SYSTEM::DB_ERRORMSG>
    <!DO "ROLLBACK">
<!ELSE>
    <!SETVAR ans "success">
<!/IF>
<!ERRORHANDLE DEFAULT>

■Cookie

HTTPヘッダのSet-Cookie:に値を設定します。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2007