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

^$ROUTINE (ObjectScript)

ルーチン情報を提供します。

構文

^$|nspace|ROUTINE(routine_name)
^$|nspace|R(routine_name)

引数

引数 説明

|nspace| または

[nspace]

オプション拡張 SSVN 参照。明示的なネームスペース名か、暗黙のネームスペースのいずれかです。角括弧 (["nspace"])、または垂直バー (|"nspace"|) で囲まれた、引用符付きの文字列に評価されなければなりません。ネームスペース名は、大文字と小文字を区別しません。ネームスペース名はすべて大文字で格納および表示されます。
routine_name ルーチン名を含む文字列に評価される式

概要

現在のネームスペース (既定)、または指定されたネームスペースからのルーチン情報を返すために、^$ROUTINE 構造化システム変数を $DATA$ORDER$QUERY 関数に対する引数として使用できます。^$ROUTINE は、ルーチンの OBJ コード・バージョンのルーチン情報を返します。

InterSystems ObjectScript では、ルーチンは 3 つのコード・バージョンで存在します。MAC (ユーザが記述したコードで、マクロ・プリプロセッサ文が含まれることがあります)、INT (コンパイル済みの MAC コードで、マクロの事前処理を実行します)、および OBJ (実行可能なオブジェクト・コード) です。INT コード・バージョンの情報を返すには、^ROUTINE グローバルを使用できます。OBJ コード・バージョンの情報を返すには、^$ROUTINE を使用できます。

引数

nspace

このオプションの引数では、拡張 SSVN 参照を使用することで他のネームスペースのグローバルを指定できます。ネームスペースは、引用符付きの文字列リテラルまたは変数として、明示的にネームスペース名を指定するか、もしくは暗黙のネームスペースを指定します。ネームスペース名は、大文字と小文字を区別しません。括弧付き構文 ["USER"] か、環境構文 |"USER"| のいずれかを使用します。nspace 区切り文字の前後にスペースを使用することはできません。

以下のメソッドを使用して、ネームスペースが定義されているかどうかをテストすることができます。

   WRITE ##class(%SYS.Namespace).Exists("USER"),!  ; an existing namespace
   WRITE ##class(%SYS.Namespace).Exists("LOSER")   ; a non-existent namespace

$NAMESPACE 特殊変数を使用して、現在のネームスペースを決定できます。現在のネームスペースを変更するお勧めの方法は、NEW $NAMESPACE に続けて SET $NAMESPACE="nspacename" を使用することです。

routine_name

既存のルーチン名を含む文字列に評価される式。ルーチン名の最初の 255 文字以内は一意である必要があります。220 文字を超える長さのルーチン名は避けてください。

以下の例は $DATA$ORDER$QUERY 関数に対して、^$ROUTINE を引数として使用する方法を表しています。

$DATA に対する引数としての ^$ROUTINE

$DATA(^$|nspace|ROUTINE(routine_name))

^$ROUTINE$DATA に対する引数として、routine_name の OBJ コード・バージョンが ^$ROUTINE 内のノードとして存在するか否かを示す整数値を返します。以下のテーブルは、$DATA が返すことができる整数値を示しています。

意味
0 ルーチン名は存在しない
1 ルーチン名が存在する

以下のターミナルの例では、myrou ルーチンの OBJ コード・バージョンが存在するかどうかをテストしています。この例では、myrou という名前のコンパイル済みの MAC ルーチンが USER ネームスペースに存在することを想定しています。

USER>WRITE ^ROUTINE("myrou",0,"GENERATED")  // INT code version exists
1
USER>WRITE $DATA(^$ROUTINE("myrou"))        // OBJ code version exists
1
USER>KILL ^rOBJ("myrou")                    // Kills the OBJ code version

USER>DO ^myrou

DO ^myrou
^
<NOROUTINE> *myrou
USER>WRITE ^ROUTINE("myrou",0,"GENERATED")  // INT code version exists
1
USER>WRITE $DATA(^$ROUTINE("myrou"))        // OBJ code version does not exist
0
USER>

$ORDER に対する引数としての ^$ROUTINE

$ORDER(^$|nspace|ROUTINE( routine_name),direction)

^$ROUTINE$ORDER に対する引数として、指定したルーチン名に対する照合順序で、次または前のルーチン名を返します。そのようなルーチン名が ^$ROUTINE のノードとして存在しなければ、$ORDER は NULL 文字列を返します。

direction 引数は、次のルーチン名を返すか、前のルーチン名を返すかを指定します。1 = 次、-1 = 前です。direction 引数を指定しない場合、InterSystems IRIS は、指定したルーチン名に対する照合順序で、次のルーチン名を返します。詳細は、"$ORDER" 関数を参照してください。

以下のサブルーチンは、USER ネームスペースを検索し、ROUTINE というローカル配列にあるルーチン名を格納します。

  SET rname=""
  FOR I=1:1 { 
      SET rname=$ORDER(^$|"USER"|ROUTINE(rname)) 
      QUIT:rname=""
      SET ROUTINE(I)=rname
      WRITE !,"Routine name: ",rname
  }
  WRITE !,"All routines stored"
  QUIT

$QUERY に対する引数としての ^$ROUTINE

$QUERY(^$|nspace|ROUTINE(routine_name))

^$ROUTINE$QUERY に対する引数として、指定したルーチン名に対する照合順序で、次のルーチン名を返します。指定したルーチン名は、存在していなくてもかまいません。照合順序内でそれ以降にルーチン名がない場合は、$QUERY(^$ROUTINE) は NULL 文字列を返します。

次の例では、2 つの $QUERY 関数が、USER ネームスペース内で、指定したルーチン名の次のルーチンを返します。

  SET rname=""
  WRITE !,"1st routine: ",$QUERY(^$|"USER"|ROUTINE(rname))
  SET rname="%m"
  WRITE !,"1st ",rname, " routine: ",$QUERY(^$|"USER"|ROUTINE(rname))
   QUIT

関連項目

FeedbackOpens in a new tab