当前位置:网站首页>Use %Status value
Use %Status value
2022-08-03 12:34:00 【User 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: 这是一条错误信息!
边栏推荐
猜你喜欢
从器件物理级提升到电路级
子结点的数量
项目概述、推送和存储平台准备
为冲销量下探中低端市场,蔚来新品牌产品定价低至10万?
基于php志愿者服务平台管理系统获取(php毕业设计)
YOLOv5 training data prompts No labels found, with_suffix is used, WARNING: Ignoring corrupted image and/or label appears during yolov5 training
信创建设看广州|海泰方圆亮相2022 信创生态融合发展论坛
业界新标杆!阿里开源自研高并发编程核心笔记(2022最新版)
Key points for account opening of futures companies
How does Filebeat maintain file state?
随机推荐
pandas连接oracle数据库并拉取表中数据到dataframe中、筛选当前时间(sysdate)到一天之前的所有数据(筛选一天范围数据)
From scratch Blazor Server (6) - authentication based on strategy
Last blog for July
R语言ggplot2可视化:使用ggpubr包的ggline函数可视化折线图、设置add参数为mean_se和dotplot可视化不同水平均值的折线图并为折线图添加误差线(se标准误差)和点阵图
分享一款实用的太阳能充电电路(室内光照可用)
特征工程学习笔记
如图,想批量读取mysql,批量处理,有哪个地方参数需要改变呢?
图像融合GAN-FM学习笔记
可重入锁详解(什么是可重入)
JUC(三):锁核心类AQS ing
使用工作队列管理器(四)
基于英雄联盟的知识图谱问答系统
Feature dimensionality reduction study notes (pca and lda) (1)
Blog records life
海外代购系统/代购网站怎么搭建——源码解析
bash for loop
What knowledge points do you need to master to learn software testing?
pandas连接oracle数据库并拉取表中数据到dataframe中、生成当前时间的时间戳数据、格式化为指定的格式(“%Y-%m-%d-%H-%M-%S“)并添加到csv文件名称中
【Verilog】HDLBits题解——Verification: Reading Simulations
浅谈程序员的职业操守