Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

CSP に関するよくある質問

トラブルシューティング

Question:

zenutils.js などの js ファイルに関する Zen エラーは、どのように解決すればよいでしょうか?

Answer:

CSP ゲートウェイを介して .js ファイルを処理するように Web サーバを構成する必要があります。これは、セキュリティ上の問題により、外部 Web サーバを構成するオプションが選択されている場合でも、Caché インストーラでは実行されません。詳細は、"CSP ゲートウェイ構成ガイド" を参照してください。オペレーティング・システムおよびユーザ構成オプションのセクションを見つけてください。次にユーザ・オプション内で、“CSP ファイル拡張子のマップセクション” と “CSP へのファイルの種類の追加登録” という 2つのセクションの片方または両方を (オプションに応じて) 見つけてください。

Apache Web サーバで、以下のコードを httpd.conf ファイルに追加します (他の方法もありますが、これが最も簡単です)。

<Location /csp>
CSP On 
SetHandler csp-handler-sa 
</Location>

IIS7 では、以下の操作を行います。

  1. コントロール パネルを開きます。[管理ツール][IIS マネージャ] を選択します。

  2. 左側のメニューで、ご使用のコンピュータ名[サイト][既定の Web サイト] の順に展開して、[csp] をクリックします。

  3. 画面の右側で、[ハンドラー マッピング] をダブルクリックします。

  4. 既存のマッピングをスクロールして、パス列に *.js と表示されているマッピングがあることを確認します。

*.js がない場合は、以下のようにして追加します。

  1. [モジュール マップの追加] をクリックします。

    Request Path: *.js 
    Module: CSPms 
    Name: CSP_js (or whatever else you want – any unused name works) 
    
  2. [要求の制限] をクリックします。

    Mapping: Uncheck Invoke handler only if request is mapped to
    Verbs: Select All verbs
    Access: Select Script
    
  3. *.gif*.jpg、および *.svg について、以上の手順を繰り返します。

IIS6 では、以下の操作を行います。

  1. コントロール パネルを開きます。[管理ツール][IIS マネージャ] を選択します。

  2. 左のメニューで、ご使用のコンピュータ名[Web サイト][既定の Web サイト] の順に展開して、[csp] をクリックします。

  3. [CSP] を右クリックして、[プロパティ] を選択します。

  4. [仮想] タブで [構成] をクリックします。

  5. リストをスクロールして、*.js が含まれていることを確認します。

*.js がない場合は、以下のようにして追加します。

  1. [モジュール マップの追加] をクリックします。

    Request Path: *.js 
    Module: CSPms 
    Name: CSP_js (or whatever else you want – any unused name works) 
    
  2. [要求の制限] をクリックします。

    Mapping: Uncheck Invoke handler only if request is mapped to
    Verbs: Select All verbs
    Access: Select Script
    
  3. *.gif*.jpg、および *.svg について、以上の手順を繰り返します。

Question:

CSP ページをデバッグするには、どのようにすればいいでしょうか?

Answer:

ドキュメント "スタジオの使用法" の "スタジオ・デバッガの使用" の章で説明されている組み込みのスタジオ・デバッガを使用します。

[デバッグ]→[ブレークポイントの表示] を使用してブレークポイントを設定しないでください。エラーの原因になりやすいようです。

  1. CSP ページをデバッグするには、[ツール]→[オプション]→[コンパイラ]→[生成されたソースコードを保存] オプションにチェックを付ける必要があります。

  2. [ワークスペース] ウィンドウを開いて、CSP フォルダに CSP ページがない場合は追加します。

  3. CSP をコンパイルして、ツールバーの [他のコードを表示] アイコンをクリックします (または [表示]→[他のコードを表示] を選択します)。これにより .cls ファイルおよび .int ファイルが表示されるようになります。例えば、ファイル A.CSP によって CSP.A.CLS および CSP.1.INT が生成されます。

  4. .cls または .int ファイルで、ブレークポイントを設定したいコード行を右クリックし、[デバッグ]→[ブレークポイント]→[ブレークポイント切り替え] を選択します (または行を選択して F9 を押します)。

  5. [デバッグ]→[デバッグターゲット]→[ZEN または CSP ページ] を選択します。ドロップダウン・リストから、デバッガを実行するターゲットの CSP ページを選択して、[OK] をクリックします (CSP ページを [ワークスペース] ウィンドウにドラッグすると、ドロップダウン・リストに表示されます)。

  6. [デバッグ] ツールバーの [進む] ボタンをクリックします。

例えば、「A から B」のようなフローを使用している場合、ページ A を表示して、ページ B へのリンクをクリックします。ページ B にバグがある場合は、以下のように実行します。

  1. A.CSP および B.CSP が [ワークスペース] ウィンドウに表示されていることを確認します。

  2. 両方のファイルをコンパイルします。

  3. [表示]→[ツールバー]→[デバッグ] を選択して、[デバッグ] ツールバーを開きます。

  4. [デバッグ]→[デバッグターゲット]→[ZEN または CSP ページ] を選択します。ドロップダウン・リストから、A.CSP を選択して、[OK] をクリックします。

  5. B.CSP を開いて、[表示]→[他のコードを表示] を選択し、csp.B.CLS を開きます。

  6. csp.B.CLS で、OnPageBODY() メソッドの最初の行を右クリックして、[デバッグ]→[ブレークポイント]→[ブレークポイント切り替え] を選択します。

  7. [デバッグ] ツールバーの [進む] ボタンをクリックします。

  8. ページ A が表示されます。

  9. ページ B を表示するリンクをクリックします。

  10. ページ B のブレークポイントでデバッガが停止します。

Question:

なぜ、以下のコードはコンパイルしないのですか?

<script language="Cache" runat="server">
    write "<script language=javascript>", !
    write "int x = 10; alert(x);", !
    write "</script>"
</script>
Answer:

スクリプト・タグで runat="server" を使用して CSP ページをコンパイルするとき、コンパイラは ObjectScript を実行し、それを HTML に変換してページに表示します。ただし、<script language="cache" runat="server"> タグを読み取った後は、ObjectScript コードの最後を示すために </script> 終了タグを検索し、この場合、write 文を検出します。これをコンパイルするために取得するには、</script> タグを以下のように 2 つの write 文に分割します。

<script language="Cache" runat="server">
    write "<script language=javascript>", !
    write "int x = 10; alert(x);", !
    write "</script",">", !
</script>
Question:

&js<alert(“Error!”);> を使用して警告ボックスを表示する場合、警告ボックスではなく、テキスト alert(“Error!”) が表示されます。なぜでしょうか?

Answer:

この行を runat="server" コード・セクション、または runat="server" ブロックから呼び出されるメソッド内に記述したことが原因である可能性があります。ページをロードするときに JavaScript を実行するには、前の回答で示した<script language="javascript”> タグを追加します。

&js<alert("Error!")> コードは、ロードされたページから JavaScript イベントを経由して、サーバ側メソッド内部で動作します。

Question:

警告ボックスに ObjectScript 変数を含めるには、どのようにすればよいでしょうか?

Answer:

#()# 構文を使用します。ご使用の ObjectScript メソッド内部から、以下を実行します。

 s error = "Bad password"
 &js<alert(#(..QuoteJS(error))#);>

%CSP.PageOpens in a new tab クラスから提供されている QuoteJS は、適切に引用符が付いた JavaScript 文字列を返します。また、返された結果に含まれるすべての引用符を適切にエスケープします。

Question:

以下のエラーが発生しました。

HTTP Request failed.Unable to process hyperevent.

これはどういう意味ですか?

Answer:

ハイパーイベント・エラーは、ブラウザが CSP ブローカ・アプレットと通信しようとするけれども通信できない場合に発生します。これは、コード、または構成の問題に関係します。問題が自分のコードかどうか判断するには、http://localhost:57772/csp/samples/zipcode.cspOpens in a new tab をロードします (ここで、57772 は、Caché Web サーバのポート番号です。必要に応じて 57772 を実際の Web サーバ・ポートで置き換えます。外部 Web サーバを実行している間は、これを除外します (http://localhost/csp/samples/zipcode.cspOpens in a new tab)。Caché がリモートでインストールされている場合は、localhost を IP アドレスまたはマシン名で置き換えます)。

郵便番号のページで、[#server] をクリックし 02142 などの郵便番号を [Zip] ボックスに入力し、Tab キーを押します。ハイパーイベント・エラーが発生しない場合は、構成は適切に行われており、発生したハイパーイベント・エラーの原因はコードにあると考えられます。

問題がコードにあると考えられる場合、以下の 2 点を確認します。ページがロードされているときに、絶対に #server 呼び出しを使用しないでください。<body> タグの OnLoad イベントで、直接的に、または OnLoad で呼び出される JavaScript メソッドから、#server を呼び出さないでください。また、runat="server" コード・ブロックの &js<> 行内部からの呼び出しも実行しないでください。ページをロードするときにメソッドを呼び出す必要がある場合は、runat="server" ブロック内部で ObjectScript 構文を使用します。

<script language="cache" runat="server">
    // if method is located in the page or in a class the page inherits from
    d ..mymethod()
    // if class cannot be called using dot syntax
    d ##class(User.MyClass).mymethod()
</script>
Question:

ルーチンでの問題を指摘するエラー・メッセージを受け取りましたが、INT ルーチンを見つけることができません。どこにあるのでしょうか?

Answer:

現在の設定によって、CSP ページのコンパイル時にソース・コードを保存しない場合があります。Caché でこのソース・コードを保存するようにするには、以下の 2 つのうち 1 つを実行します。

  • スタジオから、[生成されたソース・コードを保存] にチェックを付けて、CSP ページをコンパイルします。スタジオで、[ツール]→[オプション]→[コンパイラ]→[一般フラグ] をクリックします。[生成されたソース・コードを保存] チェック・ボックスに、チェックを付けます。次に、[ビルド]→[コンパイル] をクリックして、CSP ページをコンパイルします。

  • ターミナルから、生成されたソース・コードを保存するために k フラグを使用して、CSP ページをコンパイルします。ターミナル で、適切なネームスペースにいることを確認します。適切なネームスペースでない場合は、Zn “<namespace>” を入力してネームスペースを変更します。CSP ページをコンパイルするには、「Do $System.CSP.LoadPage(“/csp/<namespace>/<pagename>.csp”, “ck”)」を入力します。次に例を示します。

     Do $System.CSP.LoadPage("/csp/samples/james.csp", "ck")
    

生成されたソース・コードを検索するには、以下の操作を実行します。

スタジオを開き、適切なネームスペースにいることを確認します。[ファイル]→[開く] をクリックします。[ファイルの種類] の一覧から、[中間ルーチン (*.int)] をクリックします。csp.<csp_page_name>.x.INT を検索します。x は、一連のこのルーチンの番号を示しています。容量の大きい CSP ページは、複数の INT ルーチンに分割されます。エラーを含むファイル数は、最初に受け取ったエラー・メッセージに表示されています。

Question:

CSP ページを実行すると、ブラウザに #(variable)# が表示されます。なぜ、変数のデータと置換されていないのでしょうか?

Answer:

これは、ご使用の CSP ページが Caché CSP コンパイラによって適切に解析されていないことを示しています。http://localhost/csp/<namespace>/page.csp にアクセスして、Web サーバを介してページを実行していることを確認してください。

Question:

CSP ページをロードしようとすると、Invalid Character というエラー・メッセージが表示されます。なぜでしょうか?

Answer:

Web サーバを使用してページをロードしていない場合、ブラウザは CSP 構文を表す方法を知らないため、このエラーが発生しても不思議ではありません。ユーザの URL が C:/install-dir/csp/user/mypage.csp などと表示される場合、Web サーバを使用してページをロードしていません。

URL は http://localhost:57772/csp/user/mypage.csp または http://localhost/csp/user/mypage.csp のようなものになるはずです。

これらのメッセージは、#server()# 呼び出しが、ObjectScript メソッド呼び出しに適切に変換されなかったために生じた可能性もあります。ご使用のブラウザで右クリックして、ページのソースを表示します。ソースに #server が含まれている場合、ユーザの構文に誤りがある可能性があります。#server(...methodname())# のように、適切な構文になるようにしてください。

文字列をメソッドに渡している場合、文字列は二重引用符 (“”) に囲まれる必要があります。一度 CSP ページが HTML にコンパイルされると、すべての #server()# 呼び出しは csprunservermethod() への呼び出しに変換されます。

Question:

なぜ CSP タグは解析されないのでしょうか?

Answer:

Web サーバが、CSP ページを解析用の CSP ゲートウェイに適切に渡していないためです。

Question:

CSP はエラーを記録しますか。ログに記録される内容を増やすにはどうすればよいでしょうか。また、ログの保存場所はどこですか。

Answer:
  • カスタム・エラー・ページ内でのエラーなどの内部エラーがある場合は、BACK^%ETN エラー・ログにログが記録されます。このログでカスタム・エラー・ページに関係しない内部エラーを受け取った場合、コアの CSP エンジンに問題がある可能性が高いため、インターシステムズのサポート窓口Opens in a new tabにお問い合わせください。

  • ユーザが独自のログ機能を追加するユーザ定義のエラー・ページを呼び出すことで、他のエラーも記録されます。

Question:

CSP ページをロードするとき、以下のエラーが表示されます。

ERROR #5924 : エラーが発生しましたが指定されたエラーページが表示できませんでした。Web マスタに通知してください。

これはどういう意味で、どうすればいいのですか?

Answer:

このエラーは、多数の異なる問題が原因で発生する可能性があります。エラー・ログから、実際のエラーに関する具体的な情報を入手してください。ターミナルで、以下のコマンドを入力します。

 d ^%ER

結果のエラー・ログを表示するには、管理ポータルの [アプリケーションエラーログの表示] ページ (システム, システムログ, アプリケーションエラーログの表示) に進み、適切なネームスペースに対するエラーにチェックを付けます。エラーは、日付別のフォルダに保存されています。

カスタム・エラー・ページを設定している場合、このエラー・メッセージは、ご使用のカスタム・エラー・ページには呼び出しているページのエラーを処理する機能がないことを示している可能性があります。また、カスタム・エラー・ページ自体が、エラーを生成している可能性もあります。このエラーを追跡するには、カスタム・エラー・ページを一時的に停止して、CSP ページをロードしてみてください。

CSP ページがローカルで正常に動作しても、他のコンピュータから呼び出されると正常に動作 しない 場合は、ユーザが Caché のシングル・ユーザ・バージョンを使用しているか、Caché のライセンスを持っていない可能性があります。リモート・マシンから CSP ページを呼び出す場合は、Caché の完全なバージョンと、ライセンスが利用できる有効なキーの両方が必要です。インターネットでダウンロードしたバージョンに、Caché キーを追加しても、すべての機能を使用することはできません。完全なバージョンを入手する必要があります。"付録 B エラーの注釈" のエラー 5924 も参照してください。

Question:

CSP ページを表示しようとしても、何も表示されないか、ログイン画面が表示され、有効なユーザ名とパスワードを入力してもログインできません。何が問題でしょうか?CSP ゲートウェイが、適切な Caché インスタンスと通信するように構成されている、または、事前に構成されるように Caché に同梱のプライベート Apache インストールを使用していることは確かです。

Answer:

セキュリティ・イベントの監査を %SYS ネームスペースからオンにしていることを確認してください。 少なくとも、Login、Logout、および LoginFailure を監査する必要があります。

  1. ターミナルで、%SYS ネームスペースに「Do ^SECURITY」と入力します。

  2. [監査の設定][イベント監査の構成]、および [監査イベントの作成] を選択します。

  3. %SYSTEM/%Login/Login」、「%SYSTEM/%Login/Logout」、および「%SYSTEM/%Login/LoginFailure」を入力します。

再び CSP ページへのアクセスを試み、監査ログをチェックして、エラーがあるか確認します。通常、これによって問題が何なのかがわかります。例えば、サービスが無効化されている、パスワードが間違っている、あるいは、この CSP アプリケーションを実行する権限がない、などです。監査についての詳細は、"Caché システム管理ガイド" の “監査” の章を参照してください。

セッションとライセンス

Question:

頻繁にログインしなければならないのはなぜですか?

Answer:

以前のリリースでは、アプリケーションでセッションを共有する場合、アプリケーションではセッション・オブジェクトを介してのみ認証とデータを共有できました。

セッションを共有するには、以下の 2 つの方法があります。

  • セッション Cookie パス経由。

  • アプリケーションのページへのリンクに CSPSHARE=1 を配置。

タイムアウトしたセッションは破棄され、その認証は失われます。既存のページを再ロードする場合、ユーザは再度ログインする必要があります。セッション Cookie パス経由で接続されているアプリケーションも "ログイン" されます。これは、ユーザがこれらのアプリケーションのうちの、いずれかのアプリケーションのページに移動するときに、そのユーザは新しくログインしたセッションを取得するためです。

CSPSHARE=1 を使用してセッションを共有している場合はそうではありません。例えば、セッション X にログインされる SMP というアプリケーションを起動するとします。次に EMP という別のアプリケーションへのリンクをクリックします。このリンクには CSPSHARE=1 が含まれています。EMP は認証済みのセッション X に配置されるため、ログインする必要がありません。しばらくすると、セッション X はタイムアウトし、破棄されます。SMP と EMP はセッションを失います。

ここで、SMP のページが含まれるタブをクリックすると、前のように再度ログインするように求められます。SMP は認証済みのセッション Y に配置されます。次に、EMP のページが含まれるタブをクリックします。ここで SMP と EMP の間には接続がありません。EMP は再度ログインするように求められ、認証済みのセッション Z に配置されます。

CSPSHARE は、セッションを共有する方法としては不安定で、簡単に切断されます。一度切断されると、複数のログインが続く可能性があります。

このリリースでは、セッション・オブジェクトを介してデータを共有する必要があると判断した場合にのみ、セッション共有を使用します。認証の共有のみが必要 (データ共有は不要) な場合は、他のオプションを使用してください。

セッションの共有 : セッションの共有が必要な場合、最善の方法は、すべてのアプリケーションに、同一のセッション Cookie パス (完全に一致する必要があります) を使用して名前を付けることです。アプリケーションの名前を /csp/sys/tool/smp/csp/sys/tool/emp などに変更することが必要になる場合があります。

セッションの共有が必要な場合に、すべてのアプリケーションに同一のセッション Cookie パスを使用して名前を付けられないときは、CSPSHARE 要素を使用します。ただし、タイムアウト後の複数のログインなど、以前の特異性が現れることになります。CSPSHARE は、最後の手段として使用してください。

認証の共有 : 認証情報の共有が必要な設計になっていても、セッション・データの共有は必要ない場合は、新規認証機能のいずれかを使用します。

  • ログイン Cookie (アプリケーションに入ったときに認証を共有)

    ログイン Cookie には、最後にログインしたユーザに関する情報が保持されています。ログイン Cookie が有効な場合、新しくアクセスされたアプリケーションは、その認証を使用しようとします。

    ログイン Cookie の場合、各アプリケーションは別々のセッションに配置されます。これらのセッションは、一度認証されたら独立したセッションになります。このため、1 つのセッションでログアウトやタイムアウトが行われても、他のセッションに影響を与えることはありません。

    非認証のログインは、ログイン Cookie に保存されません。アプリケーション A がユーザ Q にログインし、アプリケーション B が非認証としてログインし、アプリケーション C でログイン Cookie が使用されると、アプリケーション C は Q としてログインされます。

  • ブラウザ単位のグループ (認証を継続して共有)

    アプリケーションのグループが認証クラスタとして機能するようにする場合は、ブラウザ単位のグループを使用します。

    すべてのアプリケーションの認証が同期されます。1 つのアプリケーションがログアウトすると、すべてのアプリケーションがログアウトされます。1 つのアプリケーションがユーザ Q にログインすると、すべてのアプリケーションがユーザ Q にログインされます (唯一の例外として、いずれかのアプリケーションが非認証であると、それらのアプリケーションは認証に関する限り、考慮されず無視されます)。

Question:

CSP セッションを終了するには、どのようにすればいいのでしょうか?

Answer:

CSP セッションを終了するには、ObjectScript メソッドで %session.EndSession プロパティを 1 に設定します。CSP アプリケーションがタイムアウトした場合、ご使用の CSP クラスが自動的にセッションを終了します。

Question:

CSP セッションを閉じましたが、Caché により、まだライセンスを使用している状態であると報告されています。なぜでしょうか?

Answer:

1 ページだけを表示して、ログアウトした、またはセッションがタイムアウトした場合、CSP は、5 ~ -10 分の 猶予期間 を提供し、その間は、ライセンスが留保され、迅速に戻れば、同じライセンスを再取得できます。猶予期間は、以下のうちで長い方です。

  • セッションの終了 (タイムアウトまたはログアウト) から 5 分、または

  • セッションの開始から 10 分を保証する時間 (10 分の最小セッションの保証)

以下のテーブルは、ライセンスの解放方法およびタイミングをまとめたものです。

状況 ユーザが 1 ページを訪れた ユーザが複数ページを訪れた
コードが明示的に %session.EndSession を 1 に設定する (例えば、ユーザが Logout をクリックするとき) セッションが、猶予期間を受け取る。ライセンスは、猶予期間の期限が切れた時に解放される。 ライセンスが直ちに解放される
ブラウザが開いており、セッションがタイムアウトになっていない ライセンスが保持される ライセンスが保持される
ユーザがブラウザを終了したが、セッションがタイムアウトになっていない ライセンスが保持される ライセンスが保持される
セッションがタイムアウトになっている セッションが、猶予期間を受け取る。ライセンスは、猶予期間の期限が切れた時に解放される。 ライセンスが直ちに解放される

ここで、1 ページのみを表示した場合に猶予期間が機能するしくみを表す例を示します。

  • ユーザは 12:00 にログインし、12:15 にログアウトします。 猶予期間は 5 分間なので、ライセンスは 12:20 に解放されます。

  • ユーザは 12:00 にログインし、12:03 にログアウトします。 猶予期間は 10 分間なので、ライセンスは 12:10 に解放されます。

  • ユーザは 12:00 にログインし、12:10 にブラウザを終了します。 タイムアウトは 15 分に設定されるので、セッションは 12:25 に終了します。 猶予期間は 5 分なので、ライセンスは 12:30 に解放されます。

Question:

アプリケーションのタイムアウトを変更するには、どのようにすればいいのでしょうか?

Answer:

アプリケーションの既定のタイムアウトは、各ネームスペースで 900 秒 (15 分) と設定されています。

  • 特定のネームスペースで、すべての CSP ページに対する タイムアウト を変更する方法は以下のとおりです。

    1. Caché キューブから [管理ポータル] をクリックします。必要な場合は、ログインします。

    2. 管理ポータルのメイン・ページで、システム, セキュリティ, ウェブアプリケーション を選択します。

    3. [ウェブ・アプリケーション] ページで、構成対象の CSP アプリケーションに対して [編集] をクリックします。

    4. [デフォルトタイムアウト] フィールドに、新規の値を入力し (単位は秒)、[保存] をクリックします。

  • 特定のアプリケーションに対する Timeout を変更するには、ページ内で以下を入力します。x はタイムアウトの秒数です。

    s %session.AppTimeout = x
    
Question:

ユーザ CSP セッションがタイムアウトになるとき、クリーンアップ、またはロギングを実行したいと思っています。どのようにすればいいのでしょうか?

Answer:
  1. OnTimeout クラス・メソッドを持つイベント・クラスを作成します。

  2. 以下のうちの 1 つの方法で、アプリケーションに対するイベント・クラスとして、これを指定します。

    • 管理ポータルの [ウェブアプリケーション] ページ (システム, セキュリティ, ウェブアプリケーション) で、構成対象の CSP アプリケーションに対して [編集] をクリックします。[イベントクラス] フィールドに、User.MyEventClass など、使用するクラス名を入力します。

    • CSP ページで、%session.EventClass プロパティを使用して、以下を実行します。

      <script language="cache" runat="server">
      s %session.EventClass = "User.MyEventClass"
      </script>
  3. OnTimeout メソッドで、保存したいすべての情報を記録します。

    Note:

    ここで、ユーザは情報(警告やリダイレクト)をブラウザに返送することはできません。

Question:

ページ間で情報を渡すには、どのようにすればよいでしょうか?

Answer:

情報を渡すには、多くの方法があります。

  • 追加のパラメータとして、次のページへのリンクに情報を入れます。この追加のパラメータは、%request オブジェクトからアクセス可能です。

    http://myserver/csp/user/mypage.csp?id=3&name=bill
    

    情報にアクセスするには、%request.Get("id") を使用します。

    ページに直接、情報を表示するには、#(%request.Get("name"))# を使用します。

  • %response.Context 多次元プロパティを使用して、CSP エンジンによりすべてのリンクとフォームに自動的に追加される、一連の名前値の組み合わせを定義します。

  • %session オブジェクト内に、データを配置します。ユーザが 1 つのアプリケーションを同時に 2 つのブラウザで開くと、問題が発生します。

Question:

セッションがタイムアウトになったとき、他の Web ページをユーザに送信したいのですが、どのようにすればいいのでしょうか?

Answer:

一番簡単な方法は、タイムアウト後に発生するように metatag でリダイレクトの設定を行うことです。

<html>
<head>
<META HTTP-EQUIV="REFRESH" CONTENT="910;
 URL=youhavetimedout.csp">
</head>
<body>
<script language="cache" runat="server">
        %session.AppTimeout = 900
</script>
</body>
</html>

Question:

ページを 60 秒ごとに自動的に更新したいのですが、どのようにすればいいのでしょうか?

Answer:

CSP ページの最初で、以下の metatag を使用します。

META HTTP-EQUIV="REFRESH" CONTENT="60; URL=mypage.csp">

コマンドと構文

Question:

Caché 変数や式を CSP ページで表示するには、どうすればいいのでしょうか?

Answer:

“#(var)#” や “#(expression)#” を使用して、変数や式を実行時にページに組み込むことができます。次に例を示します。

#(name)# : name は設定されています。

#($G(%request.Get("Username")))# : URL から Username を取得します。

#(2+7+3)# : Web ページ上で 12 を表示します。

Question:

“#(var)#” と “##(var)##” の違いは何でしょうか?

Answer:

構文 “#()#” は、括弧内の式をその実行時値と置換します。構文 “##()##” は、ページがコンパイルされるときに変数や式をその値と置換します。

この違いを示すため、以下のコード・サンプルを CSP ページに配置してみましょう。

Runtime: #($P($H,",",2))#
Compile Time: ##($P($H,",",2))##

ブラウザでページを開き、何度かこのページを更新します。ページを更新するたびに、Runtime 値が変更されることに注意してください。Compile Time 値はページがコンパイルされる時間を保持します。ページがリコンパイルされたときにのみ、変更されます。

Question:

“#include” と “CSP:Include” の違いは何でしょうか?

Answer:

#include 指示文を使用すると、JavaScript、html、プレーン・テキスト、CSP などの任意のテキストをページに含めることができます。

<csp:include> タグには、適切にフォーマットされた CSP ページが含まれます。このタグは ServerSideRedirect を使用してこのページを挿入し、元のページの処理に戻ります。

Question:

CSP ページをコンパイルするには、どうすればいいのでしょうか?

Answer:

既定で、CSP ページが (タイムスタンプに基づいて) 変更されている場合、ブラウザはロード時に自動的に CSP ページをコンパイルします。また、スタジオやターミナルを使用して、CSP ページを手動でコンパイルすることもできます。いずれの場合でも、生成されたソース・コードを保持するかどうかを制御できます。

スタジオを使用して CSP ページをコンパイルする方法は、以下のとおりです。

  1. [ツール] メニューで [オプション] を選択し、[コンパイル] タブをクリックします。

  2. [生成されたソースコードを保存] チェック・ボックスにチェックを付け、[OK] をクリックします。

  3. [ビルド] メニューで [コンパイル] を選択して、CSP ページをコンパイルします。

ターミナルから CSP ページをコンパイルする方法は、以下のとおりです。

  1. ターミナルで、現在適切なネームスペースにいることを確認します。適切なネームスペースでない場合は、以下を入力してネームスペースを変更します。

    zn "<namespace>"
    
  2. do $System.CSP.LoadPage(“/csp/<namespace>/<pagename>.csp", "ck")」と入力します。

    次に例を示します。

    SAMPLES> do $System.CSP.LoadPage("/csp/samples/james.csp", "ck") 
    
Note:

“k” フラグは、“生成されたソース・コードを保存” するようにコンパイラに指示します。

Question:

フラグおよび修飾子とは何ですか?

Answer:

フラグのリストを表示するには、ターミナルで以下のコマンドを実行します。

 Do $System.OBJ.ShowFlags()
Note:

f フラグを使用すると、既存のオブジェクトは、コンパイル後には無効になります。クラスのコンパイル後もオブジェクトを有効にしたい場合は、v フラグを使用してください。

修飾子のリストを表示するには、ターミナルで以下のコマンドを実行します。

 Do $System.OBJ.ShowQualifiers()  
Question:

頻繁に使用するユーティリティ・メソッドがいくつかあります。##class(Package.Class).method() を使用せずに呼び出すことはできますか?

Answer:

それらのメソッドを特定のクラスに配置して、使用する CSP ページがそのクラスから継承されるようにします。そうすると、CSP ページはドット構文を使用してこれらのメソッドにアクセスできます。これを行うには、以下のように <csp:class> タグを使用します。

<csp:class super="%CSP.Page,App.Utils">
Question:

プライベート・ページとは何ですか?

Answer:

プライベート・ページは、適切なトークンを使用して他の CSP ページから呼び出されたときにのみ表示できます。プライベート・ページにブックマークを付けることはできず、ブラウザに URL を入力するだけでは表示することはできません。ページをプライベート・ページとして設定するには、以下のように <csp:class> タグを使用します。

<csp:class private=1>
Question:

すべてのページで使用したい JavaScript 関数とヘッダがあります。これをページに組み込むには、どのようにすればいいのでしょうか?

Answer:

新しい #include 構文を使用します。

<!--#include file="mystuff.inc"-->

これはテキスト形式のインクルード・ファイルで、Caché 5 の新機能です。ファイルのテキストは、ページがコンパイルされる前に自動的にページに組み込まれます。したがって、#()# 変数や <csp:query> クエリの結果、runat="server" コードなど、コンパイルする必要があるコードを組み込むことができます。

Question:

<csp:search> タグを使用し、ユーザが ID 以外でもフィールドを検索できるようにもしたいのですが、これは可能でしょうか?

Answer:

<csp:search> タグには WHERE 属性があります。この属性を使用して、検索するフィールドをコンマ区切りのリストで指定することができます。

<csp:search name=mySearch where="Name,Gender" CLASSNAME="Sample.Person">

他にも、<csp:search> 機能をカスタマイズするために使用できる複数の属性があります。詳細は、"CSP HTML タグ・リファレンス" の "<CSP:SEARCH>" エントリを参照してください。

構成

Question:

サブディレクトリ内のページを提供する CSP アプリケーションは、どのように構成するのですか?

Answer:

以下のように管理ポータルを使用して構成します。

  1. Caché キューブから [管理ポータル] をクリックします。必要な場合は、ログインします。

  2. 管理ポータルの [ウェブアプリケーション] ページ (システム, セキュリティ, ウェブアプリケーション) で、構成対象の CSP アプリケーションに対して [編集] をクリックします。

  3. [ウェブ・アプリケーション] ページで、構成対象の CSP アプリケーションに対して [編集] をクリックします。

  4. [ウェブ・アプリケーション編集] ページで、[繰り返し][はい] に設定します。

  5. [保存] をクリックします。

Question:

ユーザがブラウザで http://mydomain.com/banking/login.csp をポイントすると、CSP アプリケーションがロードされるようにしたいです。この場合、URL には /csp/ を含めたくありません。どのようにすればいいのでしょうか?

Answer:

管理ポータルを使用して、新規の CSP アプリケーション (例えば /myapp) を設定します。このプロセスは、"Caché Server Pages (CSP) の使用法" の "CSP 構成" の章の “CSP サーバの新規アプリケーションの定義” のセクションで詳細に説明しています。

Question:

Web サーバとは異なるマシンで Caché を起動しています。どのように構成すればいいのでしょうか?

Answer:

"Caché システム管理者ガイド" の “リモート・サーバへの接続” の章を参照してください。

その他

Question:

CSP アプリケーションでフレームを使用することはできますか?

Answer:

はい。しかし、フレームセット・ページには、.csp 拡張子を持つ名前を付ける必要があります。index.html というページを作成し、CSP ページを左フレームと右フレームにロードする場合、2 つのセッションを使用することとなるので、各 CSP ページに 1 つずつ、計 2 つの Caché ライセンスが必要となります。これは、セッション・オブジェクトを使用して情報を保存する場合に混乱を招く可能性があります。また、不必要なライセンスを使用することになります。

index.csp フレームセット・ページを呼び出すと、セッションもそのアプリケーションのライセンスも 1 つで済みます。フレーム内の両方の CSP ページは、このセッションと、セッションに保存されているすべての情報を共有します。

Question:

CSP で文字セットを使用するには、どうすればいいのでしょうか?

Answer:
Question:

どの HTTP ヘッダ情報がブラウザに送信されるのでしょうか?

Answer:

ヘッダ情報を表示するには、以下の 2 つの方法があります。

  • ターミナル で Show メソッドを使用して、ページを表示します。

      D $System.CSP.Show("/csp/user/mypage.csp")
    

    これにより、このページに対して生成された HTML ソースと HTTP ヘッダが表示されます。

  • %Net.HttpRequestOpens in a new tab クラスの Head メソッドを使用します。

        set http = ##class(%Net.HttpRequest).%New()
        set http.server = "localhost"
        set http.Port = 57772
        do http.Head("csp/samples/loop.csp")
        do http.HttpResponse.OutputToDevice()
        set http = "" 
    
Question:

CSP に加え、.csp 拡張子を使用する Crystal Reports も実行しています。Caché Server Pages を使用するには、どのようにすればいいのでしょうか?

Answer:

CSP と Crystal Reports は両方とも .csp ファイル拡張子を使用するため、Web サーバを介して両方を実行すると競合が発生します。後にインストールされたアプリケーションは正常に動作しますが、先にインストールされたアプリケーションは正常に動作しません。このような競合を回避するには、Web サーバ構成で CSP 用に 1 つの仮想ディレクトリを、Crystal Reports には別の仮想ディレクトリを作ります。

インターネット・サービス・マネージャ を使用して仮想ディレクトリを構成する方法は、以下のとおりです。

  1. [スタート] メニューから [設定]、[コントロール パネル]、[管理ツール] を選択し、[インターネット サービス マネージャ] をクリックします。

  2. 最初のノードを拡張し、[既定の Web サイト] を展開します。

  3. CSP が後にインストールされている場合、[Crystal] 仮想ディレクトリを右クリックし、[プロパティ] を選択します。

    Crystal Reports が後にインストールされている場合、[csp] 仮想ディレクトリを右クリックし、[プロパティ] を選択します。

  4. [プロパティ] ダイアログ・ボックスの [仮想ディレクトリ] タブで、右下にある [構成] ボタンをクリックします。

  5. [アプリケーションのマッピング] タブをクリックし、スクロール・ダウンしてリストの下方にある .csp マッピングを検索します。

  6. CSP を後にインストールした場合は、.csp 拡張子マッピングの [実行ファイル] を Crystal Reports の DLL である WSCInSAPI.dll に変更します。この DLL は Crystal のインストール・ディレクトリの WCS ディレクトリにあります (例えば、C:\Program Files\Seagate Software\WCS)。

    Crystal Reports を後にインストールした場合は、.csp 拡張子マッピングの [実行ファイル] を Caché のインストール・ディレクトリの /csp/bin にある CSPms.dll の位置に変更します (例えば、C:\CacheSys\CSP\bin)。

  7. [OK] をクリックします。

FeedbackOpens in a new tab