当前位置:网站首页>使用 %Status 值
使用 %Status 值
2022-08-03 12:18:00 【用户7741497】
许多类使用 %Status
数据类型类来表示状态信息,并且它们的方法返回表示成功或错误的 %Status
值(状态)。如果状态表示一个错误(或多个错误),则状态值还包括有关错误的信息。
还可以返回自己的状态值。
本文讨论状态值以及如何使用它们。
使用状态值的基础知识
如上所述,许多 类中的方法返回一个状态以指示成功或错误。例如,%Library.Persistent中的
%Save()` 方法返回一个状态。对于任何此类方法,请务必获取返回值。然后检查状态,然后适当地继续。基本工具如下:
- 要检查状态是表示成功还是错误,请使用以下任一方法:
$$$ISOK
和$$$ISERR
宏,在包含文件%occStatus.inc
中定义。此包含文件在所有对象类中自动可用。$SYSTEM.Status.IsOK()
和$SYSTEM.Status.IsError()
方法,它们在终端(不能使用宏)中特别方便。
- 要显示错误详细信息,请使用
$SYSTEM.OBJ.DisplayError()
或$SYSTEM.Status.DisplayError()
。这些方法彼此等效。他们将输出写入当前设备。 - 要获取包含错误详细信息的字符串,请使用
$SYSTEM.Status.GetErrorText()
。
示例
/// d ##class(PHA.TEST.AdvancedConcepts).Status()
ClassMethod Status()
{
s object = ##class(Sample.Person).%New()
s object.Name = "yao,xin"
s tSC = object.%Save()
if $$$ISERR(tSC) {
d $SYSTEM.OBJ.DisplayError(tSC)
q
}
}
DHC-APP>d ##class(PHA.TEST.AdvancedConcepts).Status()
错误 #5659: 需要属性'Sample.Person::SSN([email protected],ID=)'
错误 #7209: 数据类型值''与PATTERN '3N1"-"2N1"-"4N'不匹配
> 错误 #5802: 属性'Sample.Person:SSN'上的数据类型验证失败,值等于""
下面是一个显示 $SYSTEM.Status.GetErrorText()
用法的部分示例:
If $$$ISERR(tSC) {
// if error, log error message so users can see them
Do ..LogMsg($System.Status.GetErrorText(tSC))
}
注意:一些 ObjectScript
程序员使用字母 t
作为前缀来表示临时变量,因此可能会在代码示例中看到 tSC
用作变量名,意思是“临时状态代码”。你可以随意使用这个约定,但是这个变量名并没有什么特别之处。
/// w ##class(PHA.TEST.AdvancedConcepts).Status1()
ClassMethod Status1()
{
s object = ##class(Sample.Person).%New()
s object.Name = "yao,xin"
s tSC = object.%Save()
if $$$ISERR(tSC) {
q $System.Status.GetErrorText(tSC)
}
}
DHC-APP>d ##class(PHA.TEST.AdvancedConcepts).Status()
错误 #5659: 需要属性'Sample.Person::SSN([email protected],ID=)'
错误 #7209: 数据类型值''与PATTERN '3N1"-"2N1"-"4N'不匹配
> 错误 #5802: 属性'Sample.Person:SSN'上的数据类型验证失败,值等于""
状态值中报告的多个错误
如果一个状态值表示多个错误,则这些技术只为提供最新的信息。要获取有关由状态值表示的所有错误的信息,请使用 $SYSTEM.Status.DecomposeStatus()
,它返回错误详细信息的数组(通过引用,作为第二个参数)。例如:
Do $SYSTEM.Status.DecomposeStatus(tSC,.errorlist)
//then examine the errorlist variable
变量errorlist
是一个包含错误信息的数组。下面显示了一个部分示例,其中包含一些人工换行符以提高可读性:
/// w ##class(PHA.TEST.AdvancedConcepts).Status2()
ClassMethod Status2()
{
s object = ##class(Sample.Person).%New()
s object.Name = "yao,xin"
s tSC = object.%Save()
if $$$ISERR(tSC) {
d $SYSTEM.Status.DecomposeStatus(tSC,.errorlist)
zw errorlist
}
}
DHC-APP>w ##class(PHA.TEST.AdvancedConcepts).Status2()
errorlist=2
errorlist(1)="错误 #5659: 需要属性'Sample.Person::SSN([email protected],ID=)'"
errorlist(1,"caller")="%ValidateObject+10^Sample.Person.1"
errorlist(1,"code")=5659
errorlist(1,"dcode")=5659
errorlist(1,"domain")="%ObjectErrors"
errorlist(1,"namespace")="DHC-APP"
errorlist(1,"param")=1
errorlist(1,"param",1)="Sample.Person::SSN([email protected],ID=)"
errorlist(1,"stack")=$lb("e^%ValidateObject+10^Sample.Person.1^3","e^%SerializeObject+3^Sample.Person.1^1","e^%Save+8^Sample.Person.1^5","e^zStatus2+3^PHA.TEST.AdvancedConcepts.1^1","e^^^0")
errorlist(1,"tail")="0 "_$lb($lb(7209,"","3N1""-""2N1""-""4N",,,,,,,$lb("zSSNIsValid+1^Sample.Person.1","DHC-APP",$lb("e^zSSNIsValid+1^Sample.Person.1^1","e^%ValidateObject+11^Sample.Person.1^2","e^%SerializeObject+3^Sample.Person.1^1","e^%Save+8^Sample.Person.1^5","e^zStatus2+3^PHA.TEST.AdvancedConcepts.1^1","e^^^0")),"0 "_$lb($lb(5802,"Sample.Person:SSN","",,,,,,,$lb("EmbedErr+1^%occSystem","DHC-APP",$lb("e^EmbedErr+1^%occSystem^1"))))))/* 错误 #7209: 数据类型值''与PATTERN '3N1"-"2N1"-"4N'不匹配- > 错误 #5802: 属性'Sample.Person:SSN'上的数据类型验证 失败,值等于"" */
errorlist(2)="错误 #7209: 数据类型值''与PATTERN '3N1""-""2N1""-""4N'不匹配"_$c(1 3,10)_" > 错误 #5802: 属性'Sample.Person:SSN'上的数据类型验证失败,值等于"""""
errorlist(2,"caller")="zSSNIsValid+1^Sample.Person.1"
errorlist(2,"code")=7209
errorlist(2,"dcode")=7209
errorlist(2,"domain")="%ObjectErrors"
errorlist(2,"embeddederror")=1
errorlist(2,"embeddederror",1)="0 "_$lb($lb(5802,"Sample.Person:SSN","",,,,,,,$lb("EmbedErr+1^%occSystem","DHC-APP",$lb("e^EmbedErr+1^%occSystem^1"))))/* 错误 # 5802: 属性'Sample.Person:SSN'上的数据类型验证失败,值等于"" */
errorlist(2,"embeddedstatus")="0 "_$lb($lb(5802,"Sample.Person:SSN","",,,,,,,$lb("EmbedErr+1^%occSystem","DHC-APP",$lb("e^EmbedErr+1^%occSystem^1"))))/* 错误 #5 802: 属性'Sample.Person:SSN'上的数据类型验证失败,值等于"" */
errorlist(2,"namespace")="DHC-APP"
errorlist(2,"param")=2
errorlist(2,"param",1)=""
errorlist(2,"param",2)="3N1""-""2N1""-""4N"
errorlist(2,"stack")=$lb("e^zSSNIsValid+1^Sample.Person.1^1","e^%ValidateObject+11^Sample.Person.1^2","e^%SerializeObject+3^Sample.Person.1^1","e^%Save+8^Sample.Person.1^5","e^zStatus2+3^PHA.TEST.AdvancedConcepts.1^1","e^^^0")
如果想记录每条错误消息,可以修改前面的记录示例,如下所示:
/// w ##class(PHA.TEST.AdvancedConcepts).Status3()
ClassMethod Status3()
{
s object = ##class(Sample.Person).%New()
s object.Name = "yao,xin"
s tSC = object.%Save()
if $$$ISERR(tSC) {
d $SYSTEM.Status.DecomposeStatus(tSC,.errorlist)
for i = 1 : 1 : errorlist {
w errorlist(i),!
}
}
}
DHC-APP>w ##class(PHA.TEST.AdvancedConcepts).Status3()
错误 #5659: 需要属性'Sample.Person::SSN([email protected],ID=)'
错误 #7209: 数据类型值''与PATTERN '3N1"-"2N1"-"4N'不匹配
> 错误 #5802: 属性'Sample.Person:SSN'上的数据类型验证失败,值等于""
注意:如果再次调用 $SYSTEM.Status.DecomposeStatus()
并传入相同的错误数组,则任何新错误都会附加到数组中。
返回状态值
还可以返回自己的自定义状态值。要创建状态值,请使用以下构造:
$$$ERROR($$$GeneralError,"your error text here")
或等效地:
$SYSTEM.Status.Error($$$GeneralError,"your error text here")
例如:
quit $SYSTEM.Status.Error($$$GeneralError,"Not enough information for request")
要包含有关其他错误的信息,请使用 $SYSTEM.Status.AppendStatus()
修改状态值。例如:
set tSC=$SYSTEM.Status.AppendStatus(tSCfirst,tSCsecond)
quit tSC
/// w ##class(PHA.TEST.AdvancedConcepts).Status3()
ClassMethod Status4(flag) As %Status
{
q:(flag = 1) 100
q:(flag = 0) $$$ERROR($$$GeneralError,"这是一条错误信息!")
}
/// w ##class(PHA.TEST.AdvancedConcepts).Status5(0)
ClassMethod Status5(flag)
{
s sc = ..Status4(flag)
if $$$ISERR(sc) {
d $SYSTEM.Status.DecomposeStatus(sc,.errorlist)
zw errorlist
w "GetErrorCodes:"_$System.Status.GetErrorCodes(sc),!
w "GetOneErrorText:"_$System.Status.GetOneErrorText(sc),!
w "GetOneStatusText:"_$System.Status.GetOneStatusText(sc),!
q $System.Status.GetErrorText(sc)
}
}
DHC-APP>w ##class(PHA.TEST.AdvancedConcepts).Status5(0)
errorlist=1
errorlist(1)="错误 #5001: 这是一条错误信息!"
errorlist(1,"caller")="zStatus4+2^PHA.TEST.AdvancedConcepts.1"
errorlist(1,"code")=5001
errorlist(1,"dcode")=5001
errorlist(1,"domain")="%ObjectErrors"
errorlist(1,"namespace")="DHC-APP"
errorlist(1,"param")=1
errorlist(1,"param",1)="这是一条错误信息!"
errorlist(1,"stack")=$lb("e^zStatus4+2^PHA.TEST.AdvancedConcepts.1^1","e^zStatus5+1^PHA.TEST.AdvancedConcepts.1^1","e^^^0")
GetErrorCodes:5001
GetOneErrorText:错误 #5001: 这是一条错误信息!
GetOneStatusText:这是一条错误信息!
错误 #5001: 这是一条错误信息!
边栏推荐
- 五、函数的调用过程
- php microtime encapsulates the tool class, calculates the running time of the interface (breakpoint)
- "Digital Economy Panorama White Paper" Financial Digital User Chapter released!
- Random forest project combat - temperature prediction
- R语言ggplot2可视化:使用patchwork包的plot_layout函数将多个可视化图像组合起来,ncol参数指定行的个数、byrow参数指定按照行顺序排布图
- 基于英雄联盟的知识图谱问答系统
- pandas连接oracle数据库并拉取表中数据到dataframe中、筛选当前时间(sysdate)到一天之前的所有数据(筛选一天范围数据)
- 海外代购系统/代购网站怎么搭建——源码解析
- R语言拟合ARIMA模型并使用拟合模型进行预测推理、使用autoplot函数可视化ARIMA模型预测结果、可视化包含置信区间的预测结果
- R语言使用ggpubr包的ggtexttable函数可视化表格数据(直接绘制表格图或者在图像中添加表格数据)、使用tab_add_vline函数自定义表格中竖线(垂直线)的线条类型以及线条粗细
猜你喜欢
4500字归纳总结,一名软件测试工程师需要掌握的技能大全
Explain the virtual machine in detail!JD.com produced HotSpot VM source code analysis notes (with complete source code)
Five super handy phone open-source automation tools, which is suitable for you?
苹果发布 AI 生成模型 GAUDI,文字生成 3D 场景
word标尺有哪些作用
3年软件测试经验,不懂自动化基础...不知道我这种测试人员是不是要被淘汰了?
nacos app
肝完Alibaba这份面试通关宝典,我成功拿下今年第15个Offer
广州番禺:暑期防溺水,安全不放假
TiKV & TiFlash 加速复杂业务查询丨TiFlash 应用实践
随机推荐
《数字经济全景白皮书》金融数字用户篇 重磅发布!
深入理解MySQL事务MVCC的核心概念以及底层原理
基于Sikuli GUI图像识别框架的PC客户端自动化测试实践
一次内存泄露排查小结
漫谈缺陷管理的自动化实践方案
基于php校园医院门诊管理系统获取(php毕业设计)
Mysql重启后innodb和myisam插入的主键id变化总结
安防监控必备的基础知识「建议收藏」
Knowledge Graph Question Answering System Based on League of Legends
链游NFT元宇宙游戏系统开发技术方案及源码
基于php志愿者服务平台管理系统获取(php毕业设计)
Last blog for July
苹果发布 AI 生成模型 GAUDI,文字生成 3D 场景
特征降维学习笔记(pca和lda)(1)
shell编程条件语句
bash if条件判断
Autumn recruitment work
3年软件测试经验,不懂自动化基础...不知道我这种测试人员是不是要被淘汰了?
Five, the function calls
信创建设看广州|海泰方圆亮相2022 信创生态融合发展论坛