"プロシージャ" とは、特定の作業を実行し、値を返すことのできるスクリプト コマンドの集まりのことです。スクリプトでは独自のプロシージャを定義することができ、定義したプロシージャを何度でも呼び出すことができます。
プロシージャの定義は、プロシージャを呼び出す .asp ファイル自体に記述することができます。また、いくつかのよく使うプロシージャを 1 つの共有 .asp ファイルで定義し、これらのプロシージャを呼び出す側の .asp ファイルで #include ディレクティブを使用して、共有 .asp ファイルをインクルードすることもできます。さらに、これらの機能aECOM コンポーネントにカプセル化することもできます。
プロシージャの定義は <SCRIPT> タグと </SCRIPT> タグの間に記述することができますが、宣言したスクリプト言語の規則に従う必要があります。<SCRIPT> は、主要スクリプト言語以外の言語でプロシージャを記述する場合に使用します。ただし、主要スクリプト言語でプロシージャを記述する場合は、スクリプトのデリミタ (<% と %>) を使用します。
HTML の <SCRIPT> タグを使用する場合は、スクリプトがサーバー側で処理されるようにするために、2 つの属性を使用する必要があります。<SCRIPT> タグを使用する場合の構文は、次のとおりです。
<SCRIPT LANGUAGE=JScript RUNAT=SERVER> procedure definition </SCRIPT>
RUNAT=SERVER 属性は、Web サーバーに対し、スクリプトをサーバー上で処理することを指示します。この属性を設定しない場合、スクリプトはクライアント ブラウザで処理されます。LANGUAGE 属性は、このスクリプト ブロックで使用するスクリプト言語を指定します。サーバーに対応するスクリプト エンジンがインストールされていれば、任意の言語を指定できます。VBScript を指定するには、値 VBScript を使用します。JScript を使用するには、値 JScript を使用します。LANGUAGE 属性を指定しない場合、このスクリプト ブロックは主要スクリプト言語で記述されているものとして解釈されます。
スクリプト ブロック内のコマンドは、選択したスクリプト言語で記述された 1 つまたは複数の完結したプロシージャを形成する必要があります。たとえば、次のコマンドは、JScript のプロシージャ MyFunction を定義します。
<HTML> <SCRIPT LANGUAGE=JScript RUNAT=SERVER > function MyFunction() { Response.Write("You called MyFunction().") } </SCRIPT>
重要 サーバー側の <SCRIPT> タグの内側には、完結したプロシージャを構成しないスクリプト コマンドは記述しないでください。完結したプロシージャを構成しないコマンドを記述した場合は、コードが次の順序で実行されるため、予期しない結果を招くことがあります。既定の言語以外のスクリプト ブロックは、表示された順、次にインライン コード、最後に既定言語内のスクリプト ブロックの順に実行されます。また、プロシージャの内部では ASP の出力ディレクティブ <%= %>
を使用しないでください。代わりに、Response.Write を使用し、コンテンツをブラウザに送信します。
プロシージャを呼び出すには、コマンド内にそのプロシージャの名前を記述します。JScript のプロシージャを VBScript から呼び出す場合は、プロシージャ名の後にかっこを付ける必要があります。 プロシージャが引数を持たない場合は、空のかっこを使用してください。JScript から VBScript または JScript のプロシージャを呼び出す場合は、プロシージャ名の後に必ずかっこを付ける必要があります。
VBScript では、プロシージャを呼び出すときにキーワード Call も使用できます。ただし、呼び出そうとしているプロシージャが引数を持つ場合は、引数のリストをかっこで囲む必要があります。キーワード Call を省略する場合は、引数リストのかっこも必ず省略する必要があります。Call 構文を使って組み込み関数またはユーザー定義関数を呼び出す場合、その関数の戻り値は破棄されます。
次の例は、2 つの異なるスクリプト言語 (VBScript と JScript) を使って、プロシージャの作成と呼び出しを行っています。
<%@ LANGUAGE=VBScript %> <HTML> <BODY> <!-- Call the JScript procedure from within VBScript--> <% call printDate() %> <!--Call the VBScript procedure from within VBScrip--> <% Echo %> <BR> </BODY> </HTML> <%Sub Echo%> <!--Note: this will not output anything unless the page is called with a query string like http://localhost/test.asp?x=1%20have&y=a%20cunning&z=plan --> <% Response.Write "<TABLE BORDER=1>" & _ "<TR><TH>Name</TH><TH>Value</TH></TR>" Set objQueryString = Request.QueryString For Each strSelection In objQueryString Response.Write "<TR><TD>" & strSelection & "</TD><TD>" & _ objQueryString(strSelection) & "</TD></TR>" Next Response.Write "</TABLE>" End Sub %> <SCRIPT LANGUAGE=JScript RUNAT=SERVER> function printDate() { var x x = new Date() Response.Write(x.toString()) Response.Write("<BR>") } </SCRIPT>
注 VBScript から JScript 関数を呼び出す場合、大文字と小文字は区別され "ません"。
VBScript でプロシージャに配列全体を渡すには、配列名の後に空のかっこを付けて指定します。 JScript の場合は、空の角かっこを付けて指定します。