文章目录

第三十五章 Caché 变量大全 $ZNSPACE 变量

包含当前命名空间名称。

大纲
$ZNSPACE
描述

$ZNSPACE包含当前命名空间的名称。通过设置$ZNSPACE,可以更改当前名称空间。

要获取当前命名空间名称,请执行以下操作:

DHC-APP>SET ns=$ZNSPACE
 
DHC-APP>WRITE ns
DHC-APP

还可以通过调用%SYSTEM.SYS类的Namespace()方法来获取当前命名空间的名称,如下所示:

DHC-APP>SET ns=$SYSTEM.SYS.NameSpace()
 
DHC-APP>WRITE ns
DHC-APP

可以使用%SYS.Namespace类的Existes()方法测试命名空间是否已定义,如下所示:

DHC-APP>WRITE ##class(%SYS.Namespace).Exists("USER")
1
DHC-APP>WRITE ##class(%SYS.Namespace).Exists("LOSER")
0

对于UNIX®系统,默认命名空间建立为系统配置选项。对于Windows系统,它是使用命令行启动选项设置的。

命名空间名称不区分大小写。InterSystems IRIS始终以全大写字母显示显式名称空间名称,以全小写字母显示隐含的名称空间名称。

要获取指定进程的命名空间名称,请使用%SYS.ProcessQuery类的方法,如下例所示:

DHC-APP>WRITE ##CLASS(%SYS.ProcessQuery).%OpenId($JOB).NameSpaceGet()
DHC-APP
设置当前命名空间

可以使用ZNSPACE命令、SET $NAMESPACESET $ZNSPACE%cd实用程序更改当前名称空间。

  • 在终端命令提示符下,ZNSPACE命令是更改名称空间的首选方式。SET $ZNSPACE在功能上与ZNSPACE命令相同。

  • 在代码例程中,新建$NAMESPACE,然后设置$NAMESPACE = NAMESPACE是更改当前名称空间的首选方式。通过使用new $NAMESPACESET $NAMESPACE,可以建立一个名称空间上下文,该上下文在方法结束或发生意外错误时自动恢复到前一个名称空间。

可以使用SET $ZNSPACE更改进程的当前命名空间。将新命名空间指定为字符串文字或计算结果为带引号的字符串的变量或表达式。可以指定显式名称空间(“NAMESPACE”)或隐式名称空间(“^SYSTEM^DIR”或“^^DIR”)。

如果指定当前命名空间,则SET $ZNSPACE不执行任何操作,也不返回任何错误。如果指定了一个未定义的名称空间,则SET $ZNSPACE会生成一个<NAMESPACE>错误。

不能new $ZNSPACE特殊变量。

示例

在以下示例中,如果当前命名空间不是USER,则SET $ZNSPACE命令会将当前命名空间更改为USER。请注意,由于if测试,命名空间必须全部用大写字母指定。

/// d ##class(PHA.TEST.SpecialVariables).ZNSPACE()
ClassMethod ZNSPACE()
{
	SET ns="USER"
	IF $ZNSPACE=ns {
		WRITE !,"命名空间已经 ",$ZNSPACE 
	} ELSEIF 1=##class(%SYS.Namespace).Exists(ns) {
		WRITE !,"命名空间是 ",$ZNSPACE
		SET $ZNSPACE=ns
		WRITE !,"将命名空间设置为 ",$ZNSPACE 
	} ELSE { 
		WRITE !,ns," 不是定义的命名空间" 
	}
	QUIT
}
DHC-APP>d ##class(PHA.TEST.SpecialVariables).ZNSPACE()
 
命名空间是 DHC-APP
将命名空间设置为 USER

此示例要求UnnownUser已分配%DB_IRISSYS%DB_USER角色。