Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

%Status 値の操作

多くの InterSystems クラスは、%StatusOpens in a new tab データ型クラスを使用してステータス情報を表し、それらのメソッドは、成功またはエラーを表す %StatusOpens in a new tab 値 (ステータス) を返します。ステータスが 1 つのエラー (または複数のエラー) を表す場合、エラーに関する情報もステータス値に含まれます。

ユーザがユーザ独自のステータス値を返すこともできます。

このページでは、ステータス値とその操作方法について説明します。

ステータス値の操作の基本

前述したように、多くの InterSystems クラスのメソッドはステータス (成功またはエラーを示す) を返します。例えば、%Library.PersistentOpens in a new tab%Save() メソッドはステータスを返します。このようなメソッドでは、戻り値を必ず取得してください。その後、ステータスを確認して適切に処理を続行します。基本的なツールは以下のとおりです。

  • ステータスが成功またはエラーのどちらを表すかを確認するには、以下のいずれかを使用します。

    • $$$ISOK マクロと $$$ISERR マクロ。これらはインクルード・ファイル %occStatus.inc で定義されています。このインクルード・ファイルは、すべてのオブジェクト・クラスで自動的に利用可能です。

    • $SYSTEM.Status.IsOK() メソッドと $SYSTEM.Status.IsError() メソッド。これらは特にターミナルで便利です (ターミナルではマクロを使用できません)。

  • エラーの詳細を表示するには、$SYSTEM.OBJ.DisplayError() または $SYSTEM.Status.DisplayError() を使用します。これらのメソッドは、互いに同等です。出力は現在のデバイスに書き込まれます。

  • エラーの詳細を含む文字列を取得するには、$SYSTEM.Status.GetErrorText() を使用します。

以下に例を示します。

 Set object=##class(Sample.Person).%New()
 Set object.Name="Smith,Janie"
 Set tSC=object.%Save()
 If $$$ISERR(tSC) {
   Do $SYSTEM.OBJ.DisplayError(tSC)
   Quit
 } 

以下に、$SYSTEM.Status.GetErrorText() の使用法を示す部分的な例を示します。

 If $$$ISERR(tSC) {
   // if error, log error message so users can see them
   Do ..LogMsg($System.Status.GetErrorText(tSC))
 }
Note:

一部の ObjectScript プログラマは、文字 t を接頭語として使用して一時変数であることを示すため、コード・サンプルで "一時ステータス・コード" を意味する tSC が変数名として使用されることがあります。この規則を使用するのは自由ですが、この変数名に特別なことは何もありません。

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

詳細情報

詳細は、%SYSTEM.StatusOpens in a new tab クラスおよび %Library.StatusOpens in a new tab クラスのクラス・リファレンスを参照してください。

FeedbackOpens in a new tab