第9章 環境パラメタ
B.1 WebScript フォーマットファイル解釈の詳細
付録 B WebScript フォーマットファイル解釈の詳細
WebScriptフォーマットファイルの解釈の詳細について、説明します。
特殊なパラメタ
- パラメタ値の中の「\」に続く文字は、特別な意味をもつことがあります。
\\ → 「\」が1つとして扱われます。
\' → 「'」が1つとして扱われます。
引用符で囲まれた部分の終了とはなりません。
\" → 「"」が1つとして扱われます。
引用符で囲まれた部分の終了とはなりません。
\$ → 「$」が1つとして扱われます。
\半角英字 →「\」が1つと半角英字1つの2文字を意味します。
- 上に示した以外の円記号+文字(日本語を含む)は、不定な値となります。
例
<!DO "SELECT * FROM SCM.TBL1 WHERE C1=\'A\' AND C2=\'B\'" RESULT=rslt>
↓ (SELECT文は以下のようになる) SELECT * FROM SCM.TBL1 WHERE C1='A' AND C2='B'
- 引用符文字自体をパラメタ値の中に含める場合は、以下のどちらかの方法で指定してください。
- パラメタ値を、別の引用符で囲む(例:'abc"def') - 「\」でエスケープする (例:"abc\"def")
- パラメタ値が英字、数字、「-」または「.」以外の文字を含む場合は、パラメタ値を引用符で囲みます。
【正しい例】 <!IF 'a == b'>
【誤った例】 <!IF a == b>
変数/リスト要素の値による置き換え($の処理)
変数/リスト要素の値による置き換えについて、説明します。
変数/リスト要素の置換
- パラメタ値の文字列の一部分に、WebScript変数またはリスト要素の値を使用する場合、その変数またはリスト要素を
「$(」と「)」で囲むことで、置き換えることができます。
- 「$(」の直後および「)」の直前に、空白を入れてはいけません。ただし、リスト要素の場合、[ ]の中に書くことができ るのは数値定数だけです。
- 「$()」は、ネストすることはできません。
例1
変数xがabcで、パラメタ値が"ABC $(x) xyz"の場合 ↓
"ABC abc xyz"と同じ意味になります。
例2
リスト要素y[3] {column4}がAAAで、パラメタ値が"xxx $(y[3]{column4}) ttt"の場合 ↓
"xxx AAA ttt"と同じ意味になります。
「(」と「)」の省略
- 置き換えるものがリスト要素ではなく、「)」を置くべき場所の直後が、「_」、英字または数字のどれでもない場合、
「(」と「)」を省略することができます。
例1
変数x → abc
パラメタ値 → "ABC $x xyz"
例2
変数x → abc
パラメタ値 → "$x?xyz"
↓
$xの後ろが「_」、英字または数字ではないため(この場合「?」)、"abc?xyz"と同じ意味になります。
注意
フォーマットファイルでは、パラメタ分割が確定したあとに、変数の置換が解釈されます。したがって、以下の例のよう な場合に注意してください。
例
変数z → value1 BAR=value2 ↓
<!TAG1 F00=$z>と<!TAG1 F00=value1 BAR=value2>とは異なりますので、注意してください。
置き換え対象はパラメタ値だけです。<!TAG2 $paramName=value>のような記述はできません。
値の解釈
変数/リスト要素の置き換えが行われた後の値の解釈について説明します。
HTMLタグの場合
- HTMLタグの場合、指定された値をもつタグが、フォーマットファイルを処理してできる結果のHTML文書に書き
込まれます。以下のような変換が行われます。
- パラメタ値に含まれる「"」は、「"」で置き換えられます。
- パラメタ値に含まれる「'」は、「'」で置き換えられます。
例
<!SETVAR x "a'b c">
<INPUT VALUE="$x">
↓
<INPUT VALUE="a'b c">
WebScriptタグの場合
- パラメタの解釈は、各パラメタによって決まっていますが、&#ddや<などによる表現は、HTML文書とは異なり、
解釈されません。
- 解釈方法の種類を、以下に示します。
- 【定数文字列】
引用符の種類にかかわらず、指定されたままの文字列の値 - 【左辺値】
引用符の種類にかかわらず、指定された文字列が表す変数/リスト要素 - 【そのほか】
[STEP1]
- パラメタ値が二重引用符で囲まれている場合は、その文字列自体をSTEP1の値とします。--- (a)
- パラメタ値が二重引用符で囲まれていない場合(引用符で囲まれている場合を含む)は、文字列をWebScript言 語によって解釈したものをSTEP1とします。--- (b)
- パラメタ値を二重引用符で囲むかどうかは、パラメタへ分割した時点で決まります。
例
<!SETVAR aaa '"foo"'>
<!REPLACE $aaa>
ここで、<!REPLACE>の第一パラメタは、パラメタ分割の時点で「二重引用符で囲まれていない」と判断されるので、変数
/リスト要素の値による置き換え後に"foo"となっても、STEP1では、(b)として扱われます。
[STEP2]
- パラメタによって指定されているコンテキストによって、STEP1の値を変換します。
- 文字列コンテキスト:STEP1の値を文字列に変換します。
- 数値コンテキスト:STEP1の値を数値に変換します。
- 一般コンテキスト:STEP1の値はそのままです。
値の評価例
以下に示す例は、上から順に評価されます。
<!UNDEFVAR abc>
<!SETVAR foo "abc">
・ abcという変数は定義されていません。
・ fooの値は、"abc"という文字列です。
<!SETVAR bar foo>
・ <!SETVAR>の第二パラメタは、一般コンテキストとして解釈されます。
・ STEP1は、(b)であるからWebScript言語によって解釈されます。この場合、fooは変数なので、その値が評価されて、
文字列"abc"となります。
・ STEP2は何もしないので、第二パラメタの評価結果は文字列"abc"となります。
・ barの値は、文字列"abc"となります。
<!SETVAR bar "foo">
・ STEP1では(a)が適用されるので、値は文字列"foo"です。
・ barの値は、文字列"foo"となります。
<!SETVAR bar "$foo">
・ 変数/リスト要素の値による置き換えにより、第二パラメタは"abc"となります。
・ barの値は、文字列"abc"となります。
<!SETVAR bar $foo>
・ 変数/リスト要素の値による置き換えにより、第二パラメタはabcとなります。
・ STEP1で(b)が適用され、abcはWebScript言語で評価されます。変数として定義されていないので、値は未定義値と
なります。STEP2でもそのままです。
・ barの値は未定義値となります。
<!SETVAR tbl "MYTABLE">
<!DO "SELECT CLM1 FROM SCM.$tbl">
・ 変数/リスト要素の値による置き換えにより、<!DO>の第一パラメタは "SELECT CLM1 FROM MYTABLE"となりま す。
・ STEP1で文字列になります。STEP2でも変わりません。
<!DO 'SELECT CLM1 FROM SCM.$tbl'>
・ 変数/リスト要素の値による置き換えにより、<!DO>の第一パラメタは 'SELECT CLM1 FROM MYTABLE'となりま す。
・ 値の解釈のSTEP1では(b)が適用されるので、WebScript言語での文法エラーとなります。
<!SETVAR x "abc">
<!REPLACE "$x def">
・ 変数/リスト要素の値による置き換えにより、<!REPLACE>の第一パラメタは"abc def"となります。
・ 値の解釈の評価の場合、このパラメタの指定は、文字列コンテキストなので、評価結果は文字列"abc def"となります。
<!REPLACE "$( x )def">
・ 「$(」の後ろおよび「)」の前に、空白があるので、エラーとなります。
<!REPLACE "$xdef">
・ xdefという変数は定義されていないため、未定義値を文字列とになり、空文字列となります。
<!SETVAR y 123>
<!SETVAR ya "abc">
<!REPLACE "$ya">
・ yaが評価されて、文字列"abc"となります。
<!REPLACE "$(y)a">
・ yが評価されて、文字列"123a"となります。
<!REPLACE "$(x$y)">
・ x$yは、変数でもリスト要素でもないため、エラーとなります。
付録 C WebScript エラーコード一覧
WebScriptのエラーコードについて説明します。
C.1 WebScript エラーコード一覧
WebScriptのエラー発生時に、“SYSTEM::WL_ERRORCODE”に設定されるエラーコードについてその内容と利用者の
対処を以下に説明します。
エラーコード エラー内容と利用者の対処
00 内容 正常です。
01 内容 タグの構文にエラーがあります。
対処 フォーマットファイル中のタグの記述を正しく修正してください。
02 内容 タグのパラメタ値が不当です。
対処 フォーマットファイル中のタグのパラメタ値を正しく修正してください。
03 内容 タグおよび関数の処理中にコード変換エラーが発生しました。
対処 フォーマットファイル中のタグや関数の引数に記述したデータを正しく修正 してください。
04 内容 タグの処理中に無限ループが発生しました。
対処 フォーマットファイル中のループの終了条件を正しく修正してください。
05 内容 タグの処理中にメモリ不足が発生しました。
対処 サーバ内の割当てメモリ量を適切に増加してください。
07 内容 パッケージ名が不当です。
対処 フォーマットファイル中のパッケージ変数名を正しく指定してください。
08 内容 共有セションでグローバル変数は使用できません。
対処 フォーマットファイルで使用しているグローバル変数を除くか、個別セション を利用してください。
09 内容 指定された変数は、更新できません。
対処 フォーマットファイル中の更新不可変数の更新処理を削除してください。
10 内容 ループのネストが深すぎます。
対処 フォーマットファイル中のループのネストの深さを100以下にしてください。
11 内容 WebScript言語の文法に誤りがあります。
対処 フォーマットファイル中のWebScriptの拡張タグの構文を正しく修正してくだ さい。
12 内容 存在しない関数名が指定されました。
対処 フォーマットファイル中の関数名を正しく修正してください。
13 内容 リストの添字の値が不当です。
対処 フォーマットファイル中のリストの添字の値を正しく修正しください。
14 内容 関数の引数が不当です。
対処 フォーマットファイル中の関数に渡している引数を正しく修正してください。
15 内容 関数の演算でオーバフローが発生しました。
対処 フォーマットファイル中の関数への引数の値を正しく修正してください。
エラーコード エラー内容と利用者の対処
対処 フォーマットファイル中の関数への引数の値を正しく修正してください。
17 内容 関数の演算で有効桁数がすべて失われました。
対処 フォーマットファイル中の関数への引数の値を正しく修正してください。
18 内容 関数の演算で有効桁数の一部が失われました。
対処 フォーマットファイル中の関数への引数の値を正しく修正してください。
19 内容 リスト変数データに異常が発生しました。
対処 フォーマットファイル中のリスト変数に対する誤った操作を正しく修正してく ださい。