FAQ - 技術的質問: CSP

FAQのトップページに戻る


IDQuestion
031CSPでライセンスログインする方法
032WindowsXPのクライアントからCSPアプリケーションを実行した際に、ハイパーイベントが動作しません
093CSP検索ページの項目名をカラム名ではなく、別の名前にしたいのですが
094CSPを表示中、ブラウザの戻るを押すと「ページの有効期限切れエラー」が表示されました。これを防ぐことはできますか?
095CSPからJOBコマンドでプログラムを実行したとき、プログラムを実行しているプロセスのライセンスはどのように消費されますか?
096CSP経由で、イメージファイルをCachéに保存したり、Cachéからダウンロードをする方法を教えてください。
099CSPでエラーが起きたときの情報はどこかにログされているのでしょうか?
100Red Hat Enterprise Linux AS 4 とApache の構成でCSPサンプルページにアクセスすると403 Forbidden エラーになってしまいます。何か設定が必要でしょうか?
156CSPアプリケーションやハイパーイベントのタイムアウトを設定するにはどうしたら良いですか?
158ターミナルからCSPをコンパイルしたいと思います。どのような方法がありますか?
171Windows2003/IIS6でCSPが動作しません。
174JavaScript内からCachéのMACルーチンを呼び出す方法を教えて下さい。

それぞれの項目についてのお問い合わせは、各項目内のをクリックしてください。

 

Question : 031

CSPでライセンスログインする方法

CSPアプリケーションの「許可する認証の有効/無効」 の設定が 「認証なし」に設定されているアプリケーションで、ライセンスログインを行いたい場合、
$SYSTEM.License.Login(UserIdentifier)関数ではなく %CSP.Session.Login(username,password,type)を使用します。

第3引数typeでログインのタイプを選べます。

0(デフォルト):SQLユーザとしてログインし、ライセンスログインも実施
1:ライセンスログインだけ実施
2:SQLログインだけ実施

ライセンスログインだけ実施する場合はパスワードに""を指定してください。

例:)

Set res=%session.Login("username","",1)

詳細はクラスライブラリ %SessionクラスのLoginメソッドを参照してください。

| Back to Top

Caché5.0.xQuestion : 032

WindowsXPのクライアントからCSPアプリケーションを実行した際に、ハイパーイベントが動作しません

【以下はCaché5.0に関する記述です】

WindowsXP SP1以降では、CSPハイパーイベント(#server())を実行するのに必要な、Java仮想マシンが含まれていません。ハイパーイベントを実行するためには、Java実行時環境(JRE/JVM)を別途導入する必要があります。

CSPでサポートしているブラウザは
http://www.intersystems.co.jp/support/cache_50/csp/gsp/gsp_os.html#GSP_os_webbrowsers
でご確認いただけます。

なお、バージョン5.0.11以降ではJava仮想マシンを必要とせずにハイパーイベントを実行することができるようになりましたので、それ以降のバージョンでは仮想マシンをインストールする必要はありません。

| Back to Top

Question : 093

CSP検索ページの項目名をカラム名ではなく、別の名前にしたいのですが

csp:searchタグのwhere属性、select属性の値を、「カラム名」から「カラム名 as 別名」に変更します。

例えば

<csp:search name= ... where="Name" select="Name,Company" ...

<csp:search name= ... where="Name as 氏名" select="Name as 依頼者名,Company as 会社名" ...
のように変更しますと別名の日本語が表示されます。

| Back to Top

Question : 094

CSPを表示中、ブラウザの戻るを押すと「ページの有効期限切れエラー」が表示されました。これを防ぐことはできますか?

CSPの場合、ページの有効期限は、既定では、

Thu, 29 Oct 1998 17:04:19 GMT

に設定されています。

これを「無期限」に変更することで、このエラーを防ぐことができます。

設定を変更したいCSPページで、以下の4行を挿入します。

<script language="CACHE" Method="OnPreHTTP" ReturnType="%Library.Boolean">
Set %response.Expires=""
Quit 1
</script>

他にも、%response.Expiresに設定する値を変更することで、その有効期限を変更することができます。

この詳細につきましては
ドキュメント→クラスリファレンス情報→%CSP.Response→Property Expires
をご確認ください。

| Back to Top

Question : 095

CSPからJOBコマンドでプログラムを実行したとき、プログラムを実行しているプロセスのライセンスはどのように消費されますか?

技術的な説明の前にCachéのライセンスポリシーについて説明します。

インターシステムズのライセンスポリシー上は、1人のユーザー(または人と同等と考えられるデバイス)は、1つのライセンス単位(1LU)で同時12接続まで稼動することが可能です。

Cachéシステムは、上記ライセンスポリシーに則った形でライセンスの消費をカウントしようとします。

しかし、残念ながら全ての状況に対して、正確なライセンス数のカウントが可能ではありません。

例えば、CSPのライセンスは、何の処置も施さない場合、CSPの”セッション単位”で1ライセンス単位を消費します。

これは、ライセンスポリシーには合致しません。

この理由は、CSP経由のアクセスでは、ユーザーを特定する手段がないためです。

さらに、JOBコマンドで実行されるプログラムは、CSPのセッション管理とは異なる別プロセスとして実行されるため、別ライセンス単位を消費します。

上記ライセンスポリシーに合わせるために、同一ライセンスであることを明示的に指定する方法が用意されています。

使用法は以下の通りです。

=====================================

(1) JOBコマンド発行元のCSPのセッション情報からライセンスIDを取得する。

set lid=%session.LicenseId

CSPではセッション毎のセッション情報を%sessionオブジェクトが管理しています。

ライセンスIDとは、Cacheがライセンス消費を管理するために必要となるIDで、CSPのセッション情報(%sessionオブジェクト)のLicenseIdプロパティより取得できます。

(2) (1)で取得できたライセンスIDを使い、ライセンスログインを行う。

Do $SYSTEM.License.Login(lid)

ライセンスIDを使用して、CSPのセッションとCSPからJOBコマンドで起動されたプロセスが同一のライセンス情報を使用してることを明示的に指定します。

| Back to Top

Question : 096

CSP経由で、イメージファイルをCachéに保存したり、Cachéからダウンロードをする方法を教えてください。

次の手順で可能です。

(1) Cachéで %Stream型のプロパティをもったクラスを用意する
(2) アップロードされたデータを %request.MimeData で受け取り、CopyFromAndSave メソッドを使ってコピーする

サンプルプログラムの使い方は次のとおりです。

・User.test.xmlをUSERネームスペースにインポート
・test.csp, test2.cspをC:\cachesys\csp\user にコピー(V5.0.x)
・test.csp, test2.cspをC:\InterSystems\Cache\csp\user にコピー(V5.1以降)

・http://localhost/csp/user/test.csp を実行

次のページで、アップロードされた画像が表示されます。
詳しくは、test.csp, test2.cspのコードをご覧ください。

| Back to Top

Question : 099

CSPでエラーが起きたときの情報はどこかにログされているのでしょうか?

CSP内で発生したエラーなどは、自動的に%Library.SysLogTableで定義されたクラスのインスタンスとして登録されます。

また、ログ情報を参照・登録するための%Library.SysLogというクラスが存在します。

SysLogテーブルは下記のリンクから参照できます。

http://localhost:portno/csp/sys/%25SysLog.cls

このログ機能はCSP画面内で起きたアプリケーションプログラムによるエラーなどを自動で記録しています。

この時、エラーの発生したプロセスのPID、ネームスペース、実行ルーチン、時刻などが自動的に記録されます。 (例:OnPreHTTP()メソッド実行時に起きたエラー情報 など)

このほかに、%Library.SysLogクラスのLog()メソッドを利用して、自由にユーザ定義のエラー情報をログに追記できます。

例:ユーザ定義のログを登録する方法(パラメータは一部省略しています。)

Do ##class(%Library.SysLog).Log(1,"CMT","ここにメッセージ”,.ByRef,"ルーチン名")

---- 以下引数の一部紹介 (詳細はクラスリファレンスをご参照ください) -----

  • 第1引数→ログレベルを0〜3で指定します。
    (0はログしない、1はエラーメッセージなど、2はエラーが起きた状況を詳細にログする場合、3はクライアントから送信されるTCP/IPの送信情報などを含む場合)
  • 第2引数→CMT:(CacheMessageTransport) または HTTP(Webサーバ経由)
  • 第3引数→エラーメッセージを指定します。(文字列)
  • 第4引数→エラーメッセージを変数で参照渡しとして渡せます。
  • 第5引数→実行ルーチン名を指定

| Back to Top

Question : 100

Red Hat Enterprise Linux AS 4 とApache の構成でCSPサンプルページにアクセスすると403 Forbidden エラーになってしまいます。何か設定が必要でしょうか?

SELinuxの機能が有効になっているとファイルアクセス時にセキュリティコンテキストのチェックで permission エラーになります。

CSP のページについても同様に permission エラーになっているため、 Apache にて 403 Forbidden エラーになります。

以下の設定でSELinuxの機能を無効にすることで回避できます。

設定ファイル /etc/selinux/config の SELINUX=disableに設定し OSの再起動を行います。

例)

  # This file controls the state of SELinux on the system.
  # SELINUX= can take one of these three values:<
  # enforcing - SELinux security policy is enforced.
  # permissive - SELinux prints warnings instead of enforcing.
  # disabled - SELinux is fully disabled.
  SELINUX=disabled
  # SELINUXTYPE= type of policy in use. Possible values are:
  # targeted - Only targeted network daemons are protected.
  # strict - Full SELinux protection.
  SELINUXTYPE=targeted

| Back to Top

Caché5.1.x~Question : 156

CSPアプリケーションやハイパーイベントのタイムアウトを設定するにはどうしたら良いですか?

CSP ウェブゲートウェイ管理ページにアクセスし、[サーバ応答タイムアウト] (Server Response Timeout)を変更します。

※CSPウェブゲートウェイ管理ページ
 システム管理ポータルより、[構成]-[CSPゲートウェイ管理] からアクセス可能です。
 または、http://localhost:port/csp/bin/Systems/Module.cxw

CSPゲートウェイ全体の既定値を変更するには、

[デフォルトパラメータ]-[サーバ応答タイムアウト] を変更します。

各個別Cachéサーバへの設定値を変更するには、

[サーバ接続]-(該当サーバ編集)-[サーバ応答タイムアウト] を変更します。

| Back to Top

Question : 158

ターミナルからCSPをコンパイルしたいと思います。どのような方法がありますか?

ターミナルで、以下のコマンドを実行することにより指定のファイルをコンパイルすることができます。

do $SYSTEM.CSP.LoadPage("/csp/user/test.csp")

また、以下のコマンドにより、指定ディレクトリ直下のすべてのcspファイルを一度にコンパイルすることができます。

do $SYSTEM.CSP.LoadPageDir("/csp/user")

| Back to Top

Question : 171

Windows2003/IIS6でCSPが動作しません。

Windows2003 の Microsoft IIS 6 では、動的なウェブページを生成するアプリケーション(CSPもこれに該当します)に対して設定が必要となります。

これは、セキュリティ上の理由から既定ではすべてのISAPI拡張が禁止されているためです。

ウェブサーバとCachéサーバとの通信を行うCSPゲートウェイでは、このISAPIインターフェースを使用しています。

以下では、IIS6でCSPアプリケーションを動作させるために最低限必要なISAPIの使用許可を行う手順を示します。

この手順を実施しても、CSP以外の認可されていないISAPIアプリケーションに実行許可が付与されることはありません。

Microsoftインターネットインフォメーションサービスのインストール済み環境にCachéをインストールした場合、CSPアプリケーションの実行に必要な設定は自動で行われます。

Cachéインストール後に以下の手順に従い、CSPゲートウェイに対してISAPI拡張の実行を許可することでCSPアプリケーションがIIS上で動作するようになります。

  1. スタートメニューを開きます。
  2. 設定 -> コントロールパネル -> 管理ツール -> インターネットインフォーメーションサービス(IIS)マネージャ を選択します。
  3. 左側パネルで、"Web サービス拡張" をクリックします。
  4. タスク にある "新しい Web サービス拡張を追加 " をクリックします。
  5. 拡張名 に CSP と入力します。
  6. "追加" ボタンを押します。
  7. "参照" ボタンを押して、Cachéインストールディレクトリを表示します。
  8. インストールディレクトリ以下にある \csp\bin フォルダを表示します。
  9. cspms.dll を選択して、"開く" ボタンを押し、ファイルの追加 画面に戻ったら "OK" で追加します。
  10. もう一度、"追加" -> 参照 を押して CSPmsSys.dll を追加します。
  11. "拡張の状態を許可済みに設定する" にチェックして、"OK" を押します。
  12. Web サービスの拡張 一覧に、手順5 で指定した拡張名が登録されており、状態が "許可" になっていることを確認します。

以上で、必要な作業は完了です。以後は、http://localhost/csp/bin/cspmssys.dllへアクセスすることでCSPゲートウェイの管理画面にアクセスできるようになります。

IISのインストール前にCachéをインストールしていた場合は、CSPの動作に必要な設定がIIS上に行われません。

この場合、Cachéを再インストール(上書きインストール)することで必要な設定を自動的に行わせることができます。

(ただし、この場合でも上記作業は別途必要となります)。

| Back to Top

Question : 174

JavaScript内からCachéのMACルーチンを呼び出す方法を教えて下さい。

ページが一旦ブラウザにロードされた後で、Javascriptからルーチンを同期呼び出ししたい場合は、#server を使用したハイパーイベントをご使用頂けます。

この場合、#serverでは直接ルーチン/ラベルをコールすることはできませんので、一旦ルーチンを呼び出すメソッドを定義して、その中でルーチンを呼び出して頂く必要があります。

※ハイパーイベントの中で出力された文字列は、Javascriptのコードとしてブラウザに返され、実行されます。

http://docs.intersystems.com/cache20082j/csp/docbook/DocBook.UI.Page.cls?KEY=GCSP_tagbased#GCSP_C105214

例)

<!-- フォームの記述 -->
<form name="f1">
<input type="button" value="test" onclick="runMyRoutine();">
</form>

<!-- ボタンクリックで最初に呼び出されるJavascript関数 -->
<script language="javascript">
function runMyRoutine() {
	#server(..MyMethod())#;
}
</script>

<!-- Javascriptの#serverから呼び出されるCacheメソッド -->
<script language="cache" method="MyMethod" arguments="" returnvalue="">
	// ここでルーチンを実行する
	Do MyTab^MyRoutine("abc","def")
</script>

| Back to Top