ZNSPACE:pc nspace
ZN:pc nspace
引数
引数 |
説明 |
pc |
オプション — 後置条件式 |
nspace |
既存のネームスペースの名前に評価する文字列式 |
説明
ZNSPACE nspace は、現在のネームスペースを nspace 値に変更します。nspace は、明示的なネームスペースでも暗黙のネームスペースでもかまいません。
ZNSPACE の使用の際、以下のメソッドでユーザの支援ができます。
-
現在のネームスペースの名前を返すには、以下のように $NAMESPACE 特殊変数または $ZNSPACE 特殊変数を返すか、または %SYSTEM.SYSOpens in a new tab クラスの NameSpace()Opens in a new tab メソッドを呼び出します。
WRITE $SYSTEM.SYS.NameSpace()
-
現在のプロセスで使用できるネームスペース (明示的および暗黙) をすべてリストするには、以下のように %SYS.NamespaceOpens in a new tab クラスの ListAll()Opens in a new tab メソッドを呼び出します。
DO ##class(%SYS.Namespace).ListAll(.result)
ZWRITE result
ListAll() が暗黙のネームスペースをリストする場合は、キャレット (^) 区切り文字を使用してシステム名を区切ります。
すべてのローカル・ネームスペースと (オプションで) リモートでマッピングされたネームスペースをすべてリストするには、以下のように %SYS.NamespaceOpens in a new tab クラスの ListOpens in a new tab クエリを呼び出します。
SET ListRemote=1
SET stmt=##class(%SQL.Statement).%New()
SET status=stmt.%PrepareClassQuery("%SYS.Namespace","List")
IF status'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(status) QUIT}
SET rset= stmt.%Execute(ListRemote)
DO rset.%Display()
このクエリは、各ネームスペースの名前、そのステータス (利用可否)、およびリモート・システムにマップされているかどうかを返します。
これらのリストはどちらも、ユーザがアクセス特権を持っていないものも含め、すべてのネームスペースをリストします。
-
ネームスペースが定義されているかどうかをテストするには、以下のように %SYS.NamespaceOpens in a new tab クラスの Exists()Opens in a new tab メソッドを使用します。
WRITE ##class(%SYS.Namespace).Exists("USER"),! ; an existing namespace
WRITE ##class(%SYS.Namespace).Exists("LOSER") ; a non-existent namespace
これらのメソッドは、"インターシステムズ・クラス・リファレンス" を参照してください。
UNIX® システムでは、システム全体の既定のネームスペースはシステム構成オプションとして設定されます。Windows システムでは、コマンド行スタートアップ・オプションを使用して設定されます。
ネームスペースの名前付け規約およびネームスペース名変換については、"ObjectScript の使用法" の “構文規則” の章の "ネームスペース" を参照してください。ネームスペースの使用については、"サーバ側プログラミングの入門ガイド" の "ネームスペースとデータベース" を参照してください。ネームスペースの作成および変更については、"システム管理ガイド" の "ネームスペースの構成" を参照してください。
現在のネームスペースの変更
ZNSPACE コマンド、%CD ユーティリティ (DO ^%CD) を使用するか、特殊変数 $NAMESPACE または $ZNSPACE を設定することで、現在のネームスペースを変更することができます。ターミナル・プロンプトから、より拡張されたエラー・チェック機能を備えた、ZNSPACE、または %CD を使用することをお勧めします。
現在のネームスペースを一時的に変更する場合、処理を実行してから前のネームスペースに戻し、NEW $NAMESPACE に続けて SET $NAMESPACE を使用します。NEW $NAMESPACE および SET $NAMESPACE を使用することによって、ルーチンが終わったときまたは予期しないエラーが発生したときに前のネームスペースに自動的に戻すネームスペース・コンテキストを確立します。
暗黙のネームスペース
暗黙のネームスペースでは、システム名とディレクトリ・パスでネームスペースを指定します。これには、以下の 3 つの形式があります。
-
"^^." は、現在のネームスペースを指定します。これを使用すると、ネームスペースのプロンプトを明示的なネームスペースから対応する暗黙のネームスペースに変更できます。
-
"^^dir" は、現在のシステム上にあるネームスペース・ディレクトリ・パス dir を指定します。
-
"^system^dir" は、指定したリモート・システム上にあるネームスペース・ディレクトリ・パス dir を指定します。
dir にはディレクトリ・パスを指定します。詳細は、以下の例を参照してください。
Windows の例 :
ZNSPACE "^^c:\InterSystems\IRIS\mgr\user\"
WRITE $NAMESPACE
Linux の例 :
ZNSPACE "^RemoteLinuxSystem^/usr/IRIS/mgr/user/"
WRITE $NAMESPACE
現在のネームスペースのフル・パス名を返すには、以下の例に示すように、NormalizeDirectory()Opens in a new tab メソッドを呼び出します。
WRITE ##class(%Library.File).NormalizeDirectory("")
引数
pc
オプション — オプションの後置条件式。InterSystems IRIS は、後置条件式が True (0 以外の数値に評価される) の場合にコマンドを実行します。InterSystems IRIS は、後置条件式が False (0 に評価される) の場合はコマンドを実行しません。詳細は、"ObjectScript の使用法" の "コマンド後置条件式" を参照してください。
nspace
新しいネームスペースの名前に評価される有効な文字列式。nspace は、明示的なネームスペースでも暗黙のネームスペースでもかまいません。
ネームスペース名は、大文字と小文字を区別しません。InterSystems IRIS は常に、明示的なネームスペース名をすべて大文字、暗黙のネームスペース名をすべて小文字で表示します。
nspace が存在しない場合、システムは <NAMESPACE> エラーを生成します。ネームスペースへのアクセス特権を持っていない場合、システムは <PROTECT> エラーを生成した後に、データベース・パスを表示します。例えば、%Developer ロールには %SYS ネームスペースへのアクセス特権がありません。このロールを持っていて、このネームスペースにアクセスしようとすると、InterSystems IRIS は <PROTECT> *c:\intersystems\iris\mgr\ というエラーを返します (Windows システムの場合)。
例
以下の例では、"accounting" と呼ばれるネームスペースが既に存在すると想定しています。そうでない場合は、<NAMESPACE> エラーが返されます。
ターミナルで、次のように入力します。
USER>ZNSPACE "Accounting"
ACCOUNTING>
例に示されているように、ターミナル・プロンプトは既定で現在のネームスペース名を表示します。ネームスペース名は常に、大文字で表示されます。
以下の例はネームスペースの存在をテストし、次に ZNSPACE を使用して現在のネームスペースを設定し、TerminalPrompt()Opens in a new tab メソッドを使用してターミナル・プロンプトを、指定されたネームスペース、または USER に設定します。
WRITE !,"Current namespace is ",$NAMESPACE
SET ns="ACCOUNTING"
IF 1=##class(%SYS.Namespace).Exists(ns) {
WRITE !,"Changing namespace to: ",ns
ZNSPACE ns
DO ##class(%SYSTEM.Process).TerminalPrompt(2)
WRITE !,"and ",$NAMESPACE," will display at the prompt"
}
ELSE {
WRITE !,"Namespace ",ns," does not exist"
SET ns="USER"
WRITE !,"Changing namespace to: ",ns
ZNSPACE ns
DO ##class(%SYSTEM.Process).TerminalPrompt(2)
WRITE !,"and ",$NAMESPACE," will display at the prompt"
}
既定のディレクトリでのネームスペース
選択したネームスペースに、リモート・マシンの既定のディレクトリが存在する場合、ZNSPACE は、ユーザのプロセスの現在のディレクトリをそのネームスペースのディレクトリに変更しません。したがって、ユーザの現在のネームスペースは、選択したネームスペースとなりますが、現在のディレクトリは、ZNSPACE コマンドを発行する前のディレクトリのままです。
暗黙のネームスペースのマッピング
ZNSPACE は、暗黙のネームスペースからの追加の既定マッピングを作成します。これらのマッピングは、通常の (明示的な) ネームスペースに対するものと同じです。これらにより、プロセスは、IRISSYS データベースと IRISLIB データベース (IRIS\mgr\ ディレクトリと IRIS\mgr\irislib ディレクトリ) に物理的に置かれている % ルーチンと % グローバルを見つけて実行できます。
$NAMESPACE 特殊変数または $ZNSPACE 特殊変数を設定すること、または暗黙的なネームスペースを使用して %CD ルーチンを実行することは、ZNSPACE コマンドを発行することと同じです。
% ルーチン・マッピング
プロセスが ZNSPACE コマンドを使用してネームスペースを切り替える場合、通常はシステム・ルーチンのパス・マッピングがリセットされます。これは、通常の (明示的な) ネームスペースと暗黙的なネームスペースの両方に当てはまります。唯一の例外は、プロセスが暗黙的なネームスペースから暗黙的なネームスペースに切り替えられるときで、その場合、既存のマッピングは保存されます。暗黙的なネームスペースに関する詳細は、"グローバルの使用法" の "グローバル構造" を参照してください。
システム・ルーチンのこの再マッピングは、%SYSTEM.ProcessOpens in a new tab クラスの SysRoutinePath()Opens in a new tab メソッドを使用してオーバーライドできます。これは、既存のシステム・ルーチンのオーバーライドに使用できます。一般的に、これは、% ルーチンのデバッグ時に追加のマッピングを作成するために使用します。プロセスは、IRISSYS データベースに対する Write 権限を持っている必要があります。このメソッドを使用する際には、特に注意が必要です。
Caution:
インターシステムズが提供したシステム・ルーチンのマッピングは、変更しないことを強くお勧めします。変更すると、インターシステムズが提供する現在または今後のライブラリ・ルーチンやメソッドが破壊される可能性があります。
% グローバル・マッピング
ユーザが初めて ZNSPACE (またはそれに相当するコマンド) を使用して暗黙のネームスペースに移動すると、システムは次のようにその暗黙のネームスペースのマッピングを作成します。InterSystems IRIS はまず、その暗黙のネームスペースで既存の % グローバルにマップします。そして、他のすべての % グローバルを IRISSYS にマップします。
暗黙的なネームスペースに対してこのマッピングが作成されると、マッピングは共有メモリに保存されます。つまり、それ以降、その暗黙的なネームスペースにユーザが移動するときは、この既存のマッピングが使用されることになります。
暗黙的なネームスペースのグローバル・マッピングを更新するには、この共有メモリ・ストレージをクリアする必要があります。システムの再起動は、共有メモリをクリアするための 1 つの方法です。
アプリケーション・コード内でのネームスペースの変更
オブジェクトと SQL コードは 1 つのネームスペースで動作していると見なすため、オブジェクト・インスタンスや SQL カーソルを開いたままネームスペースを変更すると、コードが正常に実行されない場合があります。通常は、さまざまなオブジェクト、SQL、および CSP サーバは、アプリケーション・コードを正しいネームスペースで実行するように自動的に確認するため、明示的にネームスペースを変更する必要はありません。
また、ネームスペースの変更は、他のコマンドに比べ高い処理能力を要するので、アプリケーション・コードはできるだけこれを回避します。
関連項目