CSP ページ・クラスの作成
CSP ページ・クラスは要求を処理して HTML を生成し、その HTML をブラウザに直接書き込みます。CSP ベースの Web アプリケーションを作成する場合、主なタスクはページ・クラスの OnPage() コールバック・メソッドを定義することです。
基本情報
CSP ページ・クラスを作成する手順は以下のとおりです。
-
%CSP.PageOpens in a new tab のサブクラスを作成します。
-
このサブクラス内に、OnPage() コールバック・メソッドを実装します。このメソッドは、以下の変数にアクセスできます。
-
%request: 要求についての情報を持つプロパティが含まれます。この変数は %CSP.RequestOpens in a new tab のインスタンスです。
-
%session: ブラウザ・セッションについての情報が含まれます。この変数は %CSP.SessionOpens in a new tab のインスタンスです。
-
%response : 既定の HTTP 応答についての情報が含まれます。この変数は %CSP.ResponseOpens in a new tab のインスタンスです。
メソッドでは必要に応じてその情報を調べ、HTML ページを文字列として生成し、Write コマンドを使用してその文字列を書き込む必要があります。InterSystems IRIS® データ・プラットフォームは、標準の出力デバイス ($IO) を自動的にリダイレクトして、すべての Write 出力が HTTP クライアントに送り返されるようにします。
%CSP.PageOpens in a new tab は、HTML および JavaScript コンテキストで使用する文字列をエスケープおよびエスケープ解除するために使用できる便利なクラス・メソッドを提供します。
他のアプローチについては、"特殊な HTML 指示文" も参照してください。
-
-
オプションで、%CSP.PageOpens in a new tab のパラメータをオーバーライドします。これにより、以下を制御できるようになります。
使用可能なすべてのクラス・パラメータのリストは、"%CSP.PageOpens in a new tab" のドキュメントを参照してください。
-
オプションで、他のコールバック・メソッドをオーバーライドすると、別のときに処理を制御できます。
以下に例を示します。
Class GCSP.Basic Extends %CSP.Page
{
ClassMethod OnPage() As %Status
{
Set html="<!DOCTYPE html>"
_"<html lang=""en"" dir=""ltr"">"
_"<body>"
_"<h1>Basic Page</h1>"
// examine %request object and
// write more output...
Set html=html_"</body>"
_"</html>"
Write html //finally, write the page
Quit $$$OK
}
}
この例では、ページ全体を単一の文字列として連結してから書き込んでいます。これは、長い文字列長の制限を下回ることが予想されるページでは有効です。以下のバリエーションによっても、同じ HTML が生成されます。
Class GCSP.Basic Extends %CSP.Page
{
ClassMethod OnPage() As %Status
{
write "<!DOCTYPE html>"
_"<html lang=""en"" dir=""ltr"">"
_"<body>"
_"<h1>Basic Page</h1>"
// examine %request object and
// write some more html...
write "</body>"
_"</html>"
Quit $$$OK
}
}
全体的な外観が同じである必要のある複数のページが存在する場合、ページ開始、HTML メタデータを含む <head>、JavaScript、スタイル・シートへのリンク、ナビゲーション <div>、フッタ、ページ終了などを構築するのに、テスト可能なヘルパー・メソッドを個別に使用することをお勧めします。
既定の応答ヘッダの制御
CSP ページ・クラスのクラス・パラメータは、クライアントに送信される既定の HTTP 応答ヘッダを決定します。
ブラウザに返されるコンテンツのタイプを制御するには、CONTENTTYPE クラス・パラメータを指定します。以下に例を示します。
Parameter CONTENTTYPE = "application/vnd.ms-excel";
同様に、使用する文字セットを制御するには、CHARSET クラス・パラメータを指定します。
Parameter CHARSET = "UTF-8";
使用可能なすべてのクラス・パラメータのリストは、"%CSP.PageOpens in a new tab" のドキュメントを参照してください。
また、次に説明するように、OnPreHTTP() コールバック内の %response オブジェクトのプロパティを設定することで、応答の HTTP ヘッダも制御できます。
その他のコールバック
InterSystems IRIS® データ・プラットフォームで要求を処理する %CSP.PageOpens in a new tab クラスを決定する際、そのクラスの Page() メソッドが呼び出され、このメソッドによりこれらのコールバック・メソッドが以下の順序で呼び出されます。
-
OnPreHTTP()
-
上記の OnPage()
-
OnPostHTTP()
OnPreHTTP()
応答の HTTP ヘッダをきめ細かく制御するには、OnPreHTTP() を実装できます。
具体的には、選択した既定とは異なるものが必要な場合、ContentType プロパティなどの %response オブジェクトのプロパティを設定できます。
set %response.ContentType="text/html"
その後、InterSystems IRIS は、クライアントに書き込む際にこれらの値を使用します。
また、OnPreHTTP() メソッドでは、必要に応じて、リダイレクトを定義することもできます。以下のように Redirect プロパティを設定することで、通常のクライアント側のリダイレクトを作成できます。
set %response.Redirect="https://someotherurl"
または、別の CSP ページを呼び出す場合は、代わりに ServerSideRedirect プロパティを設定できます。これにより、CSP サーバで指定されたクラス内の Page() メソッドが呼び出されます。
set %response.Redirect="GCSP.OtherPage.cls"
サーバ側リダイレクトによって、ブラウザで表示される URL が変更されることはありません。
OnPostHTTP()
OnPostHTTP() メソッドは、HTTP 要求の処理が完了した後に任意の操作を実行する場所として提供されます。
リンクのベスト・プラクティス
HTML <A> アンカー・リンクを含める際は、%CSP.PageOpens in a new tab の Link() メソッドを使用して URL を作成します。このメソッドは URL エスケープを実行し、該当する場合には URL パラメータの暗号化も行います (ターゲット・ページの定義による)。
このメソッドには、以下のシグニチャがあります。
classmethod Link(link As %String, ByRef query As %String,
addQ As %Boolean = 0) as %String
以下はその説明です。
-
link は、ベース URL です。
-
query は任意の URL パラメータを含む多次元配列です。
-
addQ は、戻り値の最後に ? または & を (必要に応じて) 含めるかどうかを指定するブーリアン値です。このオプションによって、追加のクエリ・パラメータを付加できます。
以下に例を示します。
Set origurl="GCSP.EncryptPage2.cls"
Set urlparms("SAMPLEPARM")="sample value"
Set tURL = ##class(%CSP.Page).Link(origurl,.urlparms)
Set html="<p>Link to page 2: <a href="""_tURL_""">Link</a>"_"</p>"
%response オブジェクトの Context プロパティを使用して、すべてのリンクとフォームに自動的に値を挿入することもできます。詳細は、クラス・リファレンスを参照してください。
タグベースの開発 (従来のアプリケーション)
従来のアプリケーションにも .csp ファイルを含めることができます。これは、タグベースの開発で使用されます。タグベースの開発モデルでは、開発者は Web アプリケーションによりアクセスされるディレクトリ構造に含まれる .csp ファイルを作成します。ファイルには、サーバとの通信を可能にする HTML タグと特殊タグの組み合わせが含まれています。CSP コンパイラはファイルを読み取り、それらからクラス定義を生成します。次いでクラス定義は実際のランタイム HTML を生成します。タグベースの開発の詳細は、Caché/Ensemble ドキュメントの "Tag-based Development with CSPOpens in a new tab" を参照してください。