Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$ISOBJECT

expression がオブジェクト参照 (OREF) であるか否かを返します。

Synopsis

$ISOBJECT(expr)

パラメータ

expr ObjectScript 式。

概要

expr がオブジェクト参照 (OREF) の場合、$ISOBJECT は 1 を返します。expr がオブジェクト参照 (OREF) でない場合、$ISOBJECT は 0 を返します。

expr が無効なオブジェクトへの参照の場合、$ISOBJECT は –1 を返します。通常の処理においては無効なオブジェクトは生じません。例えば、クラス内のインスタンスがアクティブなときにそのクラスをリコンパイルすると、無効なオブジェクトが生じます。

オブジェクト参照を削除するには、変数に NULL 文字列 ("") を設定します。従来の %Close() メソッドは、オブジェクト参照の削除には使用できません。%Close() は処理をいっさい実行せずに、処理が成功したことを示すメッセージを返します。新規のコードを記述するときは、%Close() を使用しないでください。

OREF の詳細は、"Caché オブジェクトの使用法" の “OREF の基本” を参照してください。

パラメータ

expr

任意の ObjectScript 式。

以下の例では、$ISOBJECT によって、オブジェクト参照と非オブジェクト参照 (この場合は、文字列参照) として返される値を示します。

  SET a="certainly not an object"
  SET o=##class(%SQL.Statement).%New()
  WRITE !,"non-object a: ",$ISOBJECT(a)
  WRITE !,"object ref o: ",$ISOBJECT(o)

以下の例では、JSON 値がオブジェクト参照であることが示されています。

  SET a=["apple","banana","orange"]
  SET b={"fruit":"orange","color":"orange"}
  WRITE !,"JSON array: ",$ISOBJECT(a)
  WRITE !,"JSON object: ",$ISOBJECT(b)

以下のダイナミック SQL の例では、ストリーム・フィールドがオブジェクト参照ではなく、OID であることが示されています。オブジェクト参照を返すには、SQL %OBJECT 関数を使用する必要があります。

  ZNSPACE "SAMPLES"
  SET myquery=2
  SET myquery(1)="SELECT TOP 1 Name,Notes,%OBJECT(Notes) AS NoteObj "
  SET myquery(2)="FROM Sample.Employee WHERE Notes IS NOT NULL"
  SET tStatement = ##class(%SQL.Statement).%New()
  SET qStatus = tStatement.%Prepare(.myquery)
    IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
  SET rset = tStatement.%Execute()
  WHILE rset.%Next() {
     WRITE "Stream field oid: ",$ISOBJECT(rset.Notes),!
     WRITE "Stream field oref: ",$ISOBJECT(rset.NoteObj),!
     }

以下の例では、オブジェクト参照を削除する方法を示します。%Close() メソッドは、オブジェクト参照を変更しません。オブジェクト参照に NULL 文字列を設定することで、オブジェクト参照は削除されます。

  SET o=##class(%SQL.Statement).%New()
  WRITE !,"objref o: ",$ISOBJECT(o)
  DO o.%Close()  ; this is a no-op
  WRITE !,"objref o: ",$ISOBJECT(o)
  SET o=""
  WRITE !,"objref o: ",$ISOBJECT(o)

関連項目

FeedbackOpens in a new tab