第7章 WebScript言語
7.8 演算子
!:否定、-:符号変更、*:積、/:商、%:剰余、+:和、-:差
<,>,<=,>=,==,!=:数値比較記号、
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表現などの関数があります。詳細は、“第8章 関数”を参照してくだ さい。
例:
<!SETVAR start '3'>
<!SETVAR len '2'>
<!SETVAR str '"abcdefghi"'>
<!SETVAR sstr 'substr( str, start, len )'>
<!REPLACE sstr>
制御構造
制御構造として以下のものがあります。詳細は、“第6章 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実行時は、Symfoware/RDB
のデフォルトのモードで排他制御が行われます。
- データベースの処理範囲に行われた排他制御は、トランザクションのCOMMIT、ROLLBACKのどちらかの命令 により解放されます。
- データベースの更新を伴う処理を行った結果は、COMMITかROLLBACKを実行した時点で決まります。COMMIT を実行した場合は、すべての更新結果が反映されます。ROLLBACKを行った場合は、すべての更新結果が反 映されません。
参照
排他制御については、“アプリケーション開発ガイド(埋込みSQL編)”の“排他制御”を参照してください。
WebScriptを利用してデータベースの処理を実行する場合は、以下のように処理を行う必要があります。
- <!DO>タグで、データベースの処理を行う命令を実行した場合は、フォーマットファイルの処理の終了までに、必ず
<!DO "COMMIT">, <!DO "ROLLBACK">によりトランザクションを終了させる必要があります。
- トランザクションを終了させる命令には、以下のタグもあります。
<!TRANSACTION "COMMIT"> ――― <!DO "COMMIT">と同じ
<!TRANSACTION "ROLLBACK"> ――― <!DO "ROLLBACK">と同じ
<!ABORT> ――― 本タグで、内部的に<!DO "ROLLBACK">が実行されます。
- 個別セションの場合は、複数のフォーマットファイルで一連の処理(トランザクション)を実行する場合があります。
この場合は、少なくとも、一連のフォーマットファイルの最後のフォーマットファイルで、必ず<!DO "COMMIT">,
<!DO "ROLLBACK">によりトランザクションを終了させる必要があります。
<!TRANSACTION>拡 張 タ グ は 、 ト ラ ン ザ ク シ ョ ン のCOMMITやROLLBACKを 実 行 す る 拡 張 タ グ で す 。<!
TRANSACTION>拡張タグは、トランザクション処理の拡張用機能であり、現在はそれぞれ、<!DO "COMMIT">、<!
DO "ROLLBACK">タグと同様に機能します。
拡張タグは、トランザクションをデータベースの操作用の と分けて、トランザクションの範囲を
WebScriptでは、データベースのアクセス結果を、ブラウザで表示可能なHTMLに変換します。結果は、データベースの 内容をテキスト形式に変換したものを、WebScriptのリスト変数に作成してHTMLに埋め込みます。
バイナリデータをBLOBから取り出す場合は、結果を画像に変換する機能により、HTMLに画像として埋め込みます。
数値・文字データ検索
数値、文字データの検索(バイナリ以外のデータ)については、データベースの結果をテキストに変換して、HTMLに埋 め込みます。
以下に、伝票番号と商品からなる伝票表から、数値データを取り出す場合の、フォーマットファイルの記述と処理の推移 を示します。
(1)利用者が開発したフォーマットファイルを読込み、データベースの検索処理(SQL文)を取り出します。
(2)取り出した拡張タグ命令のSQL文をデータベースサーバで実行し、結果を得ます。結果の集合を変数(r)に取り出
し、データベースのデータをテキスト形式に変換します。
(3) 取 り 出 し た 拡 張 タ グ 命 令 で 、 デ ー タ 取 出 し 処 理 (<!FOREACH>) を 実 行 し ま す 。 利 用 者 が 埋 込 み 命 令 (<!
REPLACE>)で指示した位置に、各列の検索結果を埋め込んだHTMLを作成し、ブラウザに返却します。
イメージデータの検索
バイナリデータ(BLOB型の列)については、データベースの結果を画像とみなし、検索結果を画像として処理できる形 式に変換し、HTMLに画像データとして埋め込みます。
以下に、BLOB型の列に会社外観というイメージデータを含む表を、会社表から会社外観のデータを取り出し、その結果を GIF形式で得る場合の、フォーマットファイルの記述と処理の推移を示します。
(1)利用者が開発したフォーマットファイルを読み込みます。
(2)結果は、拡張タグのないHTML形式に変換します。
(3)HTMLに変換された結果、WebScriptのwit_mediaコマンドに処理を依頼します。
(4)依頼の引数にあるSQL文から、対象のBLOB型の列のデータ検索を実行して、結果を受け取ります。
(5)wit_mediaコマンドの引数に渡されたイメージのタイプ(本例ではGIF)に応じて、結果をHTMLの画像データに変換
してブラウザに返します。
データベース処理のための拡張タグの処理
WebScriptは、データベース処理のために、データベースアクセスタグがあります。データベースアクセスタグでは、以下 の処理を行うことができます。
・ データベース構築のためのRDBコマンド
・ データベースの更新処理のためのSQL文
・ データベース定義処理のためのSQL文
・ トランザクションのためのSQL文
・ データベースの格納構造情報検索
データベースアクセスタグの利用方法の例を以下に示します。例では、伝票番号と商品からなる伝票表の定義、伝票表の
(1)拡張タグから処理するSQL文を取り出します。
(2)データベースサーバに、順次、SQL文の実行を依頼します。
(3)フォーマットファイルの実行結果をブラウザに通知します。
データベースの格納情報検索拡張タグは、データベースの定義結果を確認するためのものです。
格納構造情報の取得方法の例を以下に示します。例では、定義した伝票表のDSO名とタイプを取得しています。
(1)利用者が開発したフォーマットファイルを読み込み、格納構造情報を取り出します。
(2)取り出した拡張タグ命令のSQL文を、データベースサーバで実行し、結果を得ます。
結果の集合を、WebScript変数(r)に取り出します。データベースのデータはテキスト形式に変換されます。
(3)取り出した拡張タグ命令のデータ取出し処理(<!FOREACH>)を、実行します。検索結果の各行を処理して、利用者
が埋込み命令(<!REPLACE>)で指示した位置に、各列の値を埋め込んだものを作成します。この結果をHTMLに変換 して、ブラウザに返却します。
イントラネット内での利用
イントラネット内の利用者の特長は、以下のとおりです。
- 利用者は特定されるが、利用者数は業務により異なる
- ネットワークおよび業務に対してアカウントをもつ
- 利用者は、ある程度のモラルをもって、アクセスを守ることが期待できる(パスワードの保護は必要であるが、ネッ トワークの送信内容盗聴レベルの保護は必要ない場合が多い)
Webセキュリティは、Webサイトのドキュメント機密性の内容に応じた設定が必要です。利用者の管理には、一般的な Webレベルの、WebサーバのアクセスコントロールによるWebドキュメント保護が必要です。
この利用形態では、Webサーバ内のドキュメントアクセス管理の対策が必要です。ただし、情報の内容によって、この ような管理は必要ない場合もあります。
このような利用形態の場合、WebScriptのページは公開せず、業務ごとに利用者保護を行ってください。Webセキュリ ティの認証が正しい場合だけ、WebScriptセションを利用可能となるように運用してください。以下にこのイメージを示 します。
ローカルなネットワーク内での利用
ローカルな環境での利用者の特長は、以下のとおりです。
- 情報利用の関連者に特定される
- 対象ネットワークおよびWebサーバ環境にアカウントをもつ場合がある
- 利用者は特定され、ネットワークの送信内容盗聴レベルの保護は不要になる
このような利用形態の場合、利用者がユーザIDとパスワードをブラウザから動的に指定するWebScriptの運用も考え られます。以下にこのイメージを示します。
3.6 拡張タグの使用例
WebScriptのアプリケーションを作成する場合に役立つ、いくつかの使用例とその簡単な説明を紹介します。サンプルア プリケーションは、製品に添付されており、WebDBtoolsをインストールしたあとのディレクトリ中のsampleディレクトリにあり ます。
ここで説明しているサンプルアプリケーションは、次のデータベースの構造を対象としています。
・ スキーマ名:WL_SCHEMA
・ 表名:製品表
・ 表の構造:
製品名 VARCHAR(50) UNIQUE NOT NULL
カテゴリ VARCHAR(50)
機能 VARCHAR(100) 型番 VARCHAR(20) 数量 INTEGER
価格 INTEGER
説明 VARCHAR(500) 写真 BLOB(30K)