1 つのステータス値で報告される複数のエラー
1 つのステータス値が複数のエラーを表す場合、前述の手法で得られるのは最後のエラーの情報のみです。ステータス値で表されるすべてのエラーに関する情報を取得するには、エラーの詳細の配列を (2 つ目の引数として参照によって) 返す $SYSTEM.Status.DecomposeStatus() を使用します。以下に例を示します。
Do $SYSTEM.Status.DecomposeStatus(tSC,.errorlist)
//then examine the errorlist variable
変数 errorlist は、エラー情報が含まれる配列です。以下に、部分的な例を示します (読みやすいように人為的に改行が追加されています)。
ZWRITE errorlist
errorlist=2
errorlist(1)="ERROR #5659: Property 'Sample.Person::SSN(1@Sample.Person,ID=)' required"
errorlist(1,"caller")="%ValidateObject+9^Sample.Person.1"
errorlist(1,"code")=5659
errorlist(1,"dcode")=5659
errorlist(1,"domain")="%ObjectErrors"
errorlist(1,"namespace")="SAMPLES"
errorlist(1,"param")=1
errorlist(1,"param",1)="Sample.Person::SSN(1@Sample.Person,ID=)"
...
errorlist(2)="ERROR #7209: Datatype value '' does not match
PATTERN '3N1""-""2N1""-""4N'"_$c(13,10)_" >
ERROR #5802: Datatype validation failed on property 'Sample.Person:SSN',
with value equal to """""
errorlist(2,"caller")="zSSNIsValid+1^Sample.Person.1"
errorlist(2,"code")=7209
...
各エラー・メッセージをログに記録したい場合は、前述のロギングの例を以下のように変更できます。
If $$$ISERR(tSC) {
// if error, log error message so users can see them
Do $SYSTEM.Status.DecomposeStatus(tSC,.errorlist)
For i=1:1:errorlist {
Do ..LogMsg(errorlist(i))
}
}
Note:
$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