• 検索結果がありません。

SYSTEM パッケージ変数

ドキュメント内 WebDBtoolsユーザーズガイド (ページ 105-112)

第7章 WebScript言語

7.6 SYSTEM パッケージ変数

変数名に関する規約については、“6.1.2 命名規約”を参照してください。

7.3.2 パッケージ

グローバル変数およびシステム変数は、どれか1つの「パッケージ」に属します。同じ名前をもつ変数でも、属するパッケー ジが異なれば、それらは異なる変数として取り扱われます。

パッケージに属する変数の指定

パッケージ(package)に属する変数varを指定するには、「::」を用いて「package::var」と表記します。

指定した名前のパッケージが存在しない場合は、エラーになります。

パッケージ名に関する規約については、“6.1.2 命名規約”を参照してください。

変数の特定方法

パッケージによって修飾されない変数名varが指定された場合、どの変数が参照されるかのルールについて、以下に示 します。

・ ローカル変数varが存在する場合は、ローカル変数が参照されます。

・ カレントパッケージに属する変数varが存在する場合は、その変数が参照されます。

・ どちらも存在しない場合は、新しいローカル変数varが作成され、その変数が参照されます。

カレントパッケージ

任意の時点で、「カレントパッケージ」と呼ばれるパッケージが定まっています。パッケージ名を指定しないでグローバル 変数を指定した場合は、カレントパッケージに属する変数が参照されます。

フォーマットファイルの解釈がスタートするときのカレントパッケージは、「""(空文字)」です。カレントパッケージは、<!

PACKAGE>タグによって変更することができます。

パッケージ参照の例

以下のex1.html、ex2.html、ex3.htmlおよびex4.htmlはフォーマットファイルです。

【ex1.html】

<HEAD>

<TITLE>Package Example 1</TITLE>

<!PACKAGE "mypkg">

</HEAD>

<BODY>

<!VAR abc SCOPE="GLOBAL" VALUE="global-abc">

<!HREPLACE 'abc'> → 表示は「global-abc」です。

【ex2.html】(同じパッケージからの呼び出し)

<HEAD>

<TITLE>Package Example 2</TITLE>

<!PACKAGE "mypkg">

</HEAD>

<BODY>

<!HREPLACE 'abc'> → まずローカル変数abcを参照しようとしますが定義されて いないので、ex1.htmlで宣言されたグローバル変数abcが 採用されます。

表示は「global-abc」です。

(ローカル変数abcの値を宣言する)

<!VAR abc VALUE="local-abc" SCOPE="LOCAL">

ローカル変数abcは、ex1.htmlで宣言したグローバル変数abcとは違うものになります。

<!HREPLACE 'abc'> → パッケージ名による修飾がないので、ローカル変数abcを 参照します。表示は「local-abc」です。

ex1.htmlで宣言したグローバル変数を参照したい場合は、パッケージ名で修飾します。

<!HREPLACE 'mypkg::abc'> → これはグローバル変数のabcなので、表示は「global-abc」

となります。

【ex3.html】(別パッケージからの呼び出し)

<HEAD>

<TITLE>Package Example 3</TITLE>

<!PACKAGE "anotherpkg">

(ex1.htmlとは別のパッケージを宣言)

</HEAD>

<BODY>

<!VAR abc VALUE="another-abc" SCOPE="GLOBAL">

<!HREPLACE 'abc'> → このフォーマットファイルのローカル変数abcを参照しよう としますがローカル変数abcは宣言されていないので、カ レントパッケージのグローバル変数abcを参照します。

表示は「another-abc」です。

カレントパッケージ以外のグローバル変数を参照する方法は以下のとおりです。

<!HREPLACE 'mypkg::abc'> → これはmypkgパッケージのグローバル変数abcを指します。

表示は「global-abc」です。

【ex4.html】(パッケージ指定のない場合)

<HEAD>

<BODY>

<!VAR abc VALUE="global-non-abc" SCOPE="GLOBAL">

<!VAR abc VALUE="local-non-abc" SCOPE="LOCAL">

<!HREPLACE 'abc'> → ローカル変数abcを指します。

表示は「local-non-abc」です。

グローバル変数abcを指すためには、パッケージで修飾しなければ なりませんが、パッケージ名が宣言されていないので、デフォルトの パッケージである空文字列で修飾します。

<!HREPLACE '::abc'> → グローバル変数abcを参照します。

表示は「global-non-abc」です。

7.4 QUERY パッケージ変数

Webクライアントから送られてくる変数です。

GET methodの場合にURLの一部として指定されるか、またはPOST methodの場合にヘッダのあとに送信されるもので す。

値の有効範囲はローカルです。次のフォーマットファイルを処理するときに、同じ変数が存在することは、一般には保証 されません。また、変数が存在している場合でも、値が同じであることは、一般には保証されません。

Webクライアントから、key=value が送信されると、変数QUERY::keyの値がvalueになります。同一のkeyに対して、複数の valueが指定された場合には、QUERY::keyがリストになります。ただし、その場合の順序は保証されません。また、フォー マットファイル内で、値を設定することはできません。

SolarisおよびLinuxの場合の例を以下に示します。Windows(R)の場合は、例の一部を以下のように変更してください。

・ wit_fmtr → wit_fmtr.exe 例1

<A HREF="/cgi-bin/wit_fmtr?WIT_html=fmt1.html&myVar0=value0">

これによって呼び出されたフォーマットファイル fmt1.htmlの中では、

変数QUERY::myVar0に、値"value0"が設定されます。

例2

<FORM ACTION="/cgi-bin/wit_fmtr" METHOD="POST">

<INPUT TYPE="hidden" NAME="WIT_html" VALUE="fmt2.html">

<INPUT TYPE="checkbox" NAME="cb" VALUE="item1">item1<BR>

<INPUT TYPE="checkbox" NAME="cb" VALUE="item2">item2<BR>

<INPUT TYPE="submit" VALUE="OK">

</FORM>

これによって呼び出されたフォーマットファイル fmt2.htmlの中では、

変数QUERY::cbに設定される値は、ユーザがチェックボックスをどのように チェックしたかによって、以下となります。

- 何もチェックしなかった場合は、「未定義値」

- item1だけをチェックした場合は、「単値"item1"」

- item1、item2をチェックした場合は、「リスト("item1","item2")」

7.5 COOKIE パッケージ変数

Webクライアントから送られてきたcookieの値です。

たとえばnameという名前をもつcookieの値は、変数COOKIE::nameに設定されます。

値の有効範囲はローカルです。次のフォーマットファイルを処理するときに、同じ変数が存在することは、一般には保証 されません。また、変数が存在している場合でも、値が同じであることは、一般には保証されません。

同一の名前nameに対して、複数の値をWebScriptセションが受け取った場合は、COOKIE::nameがリストになります。た だし、その場合の順序は保証されません。また、フォーマットファイル内で値を設定することはできません。

なお、Webクライアント側にcookieを送信する場合は、<!SETCOOKIE>タグを使用してください。

7.6 SYSTEM パッケージ変数

QUERYおよびCOOKIE以外に、WebScriptが用意する変数が属するパッケージです。システムパッケージに変数を作る

ことはできません。

値の有効範囲はローカルです。次のフォーマットファイルを処理するときに、同じ変数が存在することは、一般には保証 されません。また、変数が存在している場合でも、値が同じであることは、一般には保証されません。

SYSTEM::DB_ERRORCODE

データベースエラーコードを参照する変数です。

<!DO>タグによるSQL文の実行、<!ABORT>タグまたは<!TRANSACTION>タグによるトランザクション処理を実行した 場合に、エラーが発生したかどうかを識別する変数です。

フォーマットファイル内で値を設定することはできません。

参照

エラーコードとして、SQLSTATE値を指定します。SQLSTATE値については、“SQLリファレンス”の“SQLSTATE値”を参 照してください。

エラーコードの値を識別する場合は、その値を文字列として扱ってください。

アプリケーション環境パラメタのDBErrorHandleで、データベースのエラー処理を行うことを指定していない場合は、<!

ERRORHANDLE>拡張タグで、データベースタイプにONを指定して、エラー処理を行うことを指定する必要があります。

例 SQLSTATE値が"3F000"の場合

<!ERRORHANDLE ON TYPE=DB>

<!DO "SELECT NAME FROM SCM.SAMPLE" RESULT=DATA>

<!IF 'SYSTEM::DB_ERRORCODE ne "00000"'>

<!IF 'SYSTEM::DB_ERRORCODE eq "3F000"'>

: <!/IF>

:

<!/IF>

<!ERRORHANDLE DEFAULT TYPE=DB>

SYSTEM::DB_ERRORMSG

データベースエラーメッセージを参照する変数です。

<!DO>タグによるSQL文の実行、<!ABORT>タグまたは<!TRANSACTION>タグによるトランザクション処理を実行した

場合に、エラーの内容を通知するエラーメッセージが設定されます。

フォーマットファイル内で値を設定することはできません。

例 SELECT文でのエラー原因メッセージの出力

<!DO "SELECT NAME FROM SCM.SAMPLE" RESULT=DATA>

<!IF 'SYSTEM::DB_ERRORCODE ne "00000"'>

<!HREPLACE SYSTEM::DB_ERRORMSG>

<!ABORT>

<!/IF>

SYSTEM::LAST_DB_ERRORCODE データベースエラーコードを参照する変数です。

Symfoware Serverのログインから現在までの、最後に出力されるSQLのエラーコードの値です。ログイン直後の値

本変数の値は、変更できます。

使用例については、“SYSTEM::LAST_DB_ERRORMSG”を参照してください。

SYSTEM::LAST_DB_ERRORMSG

データベースエラーメッセージを参照する変数です。

Symfoware Serverのログインから現在までの、最後に出力されるSQLのエラーメッセージの値です。ログイン直後の値

は、""(空文字列)です。ただし、wit_gwdコマンドで、WIT_error=yesが指定され、ログインでエラーが発生した場合は、

ログインエラーのエラーメッセージが設定されます。

本変数の値は、変更できます。

<!ERRORHANDLE ON>

<!SETVAR SYSTEM::LAST_DB_ERRORCODE "normal">

<!DO "INSERT ~">

<!DO "INSERT ~">

<!DO "INSERT ~">

<!IF 'SYSTEM::LAST_DB_ERRORCODE ne "normal"'>

エラーが発生しました。<!REPLACE SYSTEM::LAST_DB_ERRORMSG><BR>

<!/IF>

SYSTEM::WL_ERRORCODE

WebScriptエラーコードを参照する変数です。

WebScriptの動作中に、エラーを検出した場合、メモリアロケーションエラーまたは通信エラーが発生した場合のエラー コードが設定されます。設定されるエラーコードの詳細は、“付録C WebScriptエラーコード一覧”を参照してください。

フォーマットファイル内で値を設定することはできません。

アプリケーション環境パラメタのWLErrorHandleで、WebScriptのエラー処理を行うことを指定していない場合は、<!

ERRORHANDLE>拡張タグで、WebScriptタイプにONを指定してエラー処理を行うことを指定する必要があります。

SYSTEM::LOGIN_NAME

ログインユーザIDを参照する変数です。

セションのログインユーザIDを参照することができます。

フォーマットファイル内で値を設定することはできません。

SYSTEM::LOGIN_SYSTEM

ログイン中のRDBシステム名を参照する変数です。

セションのRDBシステム名を参照することができます。

フォーマットファイル内で値を設定することはできません。

SYSTEM::LOGIN_DATABASE

アクセス対象のデータベース名を参照する変数です。

ログイン直後の値は、ログインしたときのデータベース名です。

データベース設定文の設定が成功した場合、本変数の値は、データベース設定文に指定されたデータベース名に変更 されます。

本変数の値を変更することはできません。

SYSTEM::LOGIN_SCHEMA

表名の指定時で、スキーマ名を省略した場合に、スキーマ名を参照する変数です。

ログイン直後の値は、ログインしたときのユーザIDです。

ドキュメント内 WebDBtoolsユーザーズガイド (ページ 105-112)