我想知道是否可以在没有用户互动的情况下使用“^%GOF”。我正在使用Caché2008。^%GO不是一个选项,因为它会减慢。我正在使用临时文件中的输入来自动回答问题,但它可能会失败(很少发生)。
我在%SYS中找不到此实用程序的例程。它在哪里?
谢谢,
答案:使用“%SYS.GlobalQuery:NameSpaceList”获取全局变量列表(系统全局变量除外)。
Set Rset = ##class(%ResultSet).%New("%SYS.GlobalQuery:NameSpaceList")
d Rset.Execute(namespace, "*", 0)
s globals=""
while (Rset.Next()){
s globalName=Rset.Data("Name")_".gbl"
if (globals=""){
s globals = globalName
}else{
s globals = globals_","_globalName
}
d ##class(%Library.Global).Export(namespace, globals, "/tmp/export.gof", 7)
唯一的缺点是,如果你的全局变量超过全局条目允许的最大值的命名空间,程序崩溃了。然后你应该拆分全局列表。
答案 0 :(得分:3)
我建议您查看输出格式为7的%Library.Global()类。
classmethod导出(Nsp As%String = $ zu(5),ByRef GlobalList As%String,FileName As%String,OutputFormat As%Integer = 5,RecordFormat As%String =“V”,qspec As% String =“d”,Translation As%String =“”)as%Status
使用OutputFormat和RecordFormat将全局列表GlobalList从命名空间Nsp导出到FileName。 OutputFormat可以采用以下值: 1 - DTM格式 3 - VAXDSM格式 4 - DSM11格式 5 - ISM / Cache格式 6 - MSM格式 7 - 缓存块格式(%GOF)
RecordFormat可以采用以下值: V - 可变长度记录 S - 流数据
您可以在课程文档中找到它:http://docs.intersystems.com/cache20082/csp/documatic/%25CSP.Documatic.cls
我从来没有使用它,但看起来它会起作用。
答案 1 :(得分:2)
将您的全局导出到文件
d $system.OBJ.Export("myGlobal.GBL","c:\global.xml")
从您的文件导入全局
d $system.OBJ.Load("c:\global.xml")
将项目导出为XML文件项目的扩展决定了什么 他们是类型,他们可以是以下之一:
如果您希望导出多个类,则用逗号或分隔 将项目(“item”)=“”作为数组传递或使用外卡 如果filename为空,则它将导出到当前设备。
- CLS - 班级
- CSP - 缓存服务器页面
- CSR - 缓存规则文件
- MAC - 宏例程
- INT - 无宏例程
- BAS - 基本例程
- INC - 包含文件
- GBL - Globals
- PRJ - Studio Projects
- OBJ - 对象代码
- PKG - 包装定义
链接到docbook
编辑:添加“-d”作为qspec值将抑制导出的终端输出。如果你想使用这个程序,它可能会妨碍。
答案 2 :(得分:1)
为了完整起见:
SAMPLES>s IO="c:\temp\test.gof"
SAMPLES>s IOT="RMS"
SAMPLES>s IOPAR="WNS"
SAMPLES>s globals("Sample.PersonD")=""
SAMPLES>d entry^%GOF(.globals)
SAMPLES>
- >导致c:\ temp \ test.gof导出。您可以在数组中定义最多65435个全局变量(在此示例中命名为globals)
但我建议你选择DAiMor的答案,因为这是更“现代”的方式。
答案 3 :(得分:0)
为避免最大字符串错误,您应该使用下标而不是逗号分隔字符串:
Set Rset = ##class(%ResultSet).%New("%SYS.GlobalQuery:NameSpaceList")
d Rset.Execute(namespace, "*", 0)
while (Rset.Next()) {
s globals(Rset.Data("Name"))="" // No need for _".gbl" in recent Cache
}
d ##class(%Library.Global).Export(namespace, .globals, "/tmp/export.gof", 7) // Note dot before globals