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

^%ZLANG ルーチンによる言語の拡張

^%ZLANG 機能を使用すると、ObjectScript などの言語に、カスタムのコマンド、関数、および特殊変数を追加することができます。拡張機能は標準機能と同じ方法で呼び出され、構文、演算子の優先順位などに関する同一の規則に従います。通常、^%ZLANG 機能の実行速度は標準の InterSystems IRIS 機能ほど速くありません。パフォーマンスが重要なルーチンをコーディングする際には、この点を考慮してください。

このような拡張機能を追加する手順は以下のとおりです。

  1. 必要に応じて、以下の名前でルーチンを定義します。

    ルーチン名 目的
    ^%ZLANGC00 カスタムの ObjectScript コマンドを定義します。
    ^%ZLANGF00 カスタムの ObjectScript 関数を定義します。
    ^%ZLANGV00 カスタムの ObjectScript 特殊変数を定義します。
  2. これらのルーチンでは、パブリックのサブルーチンを以下のように定義します。

    • サブルーチンのラベルでは、定義するコマンド、関数、または特殊変数の名前を使用します。

      名前は英文字の Z で始まる必要があり、英字のみを含めることができます。ロケールでアルファベットとして定義すれば、Unicode 文字が使用できます。英文字はすべて大文字にする必要がありますが、実行の際は大文字と小文字の区別はありません。名前の最大長は 31 文字です。

      名前は既存のコマンド、関数、または特殊変数と同じにすることはできません (同一の場合、InterSystems IRIS では無視されます)。SQL 予約語は使用しないことを強くお勧めします。

      関数を定義する場合、関数に引数がない場合でも、ラベルには括弧を含める必要があります。

      特殊変数のラベルには括弧を含めることができます。

    • オプションで別のラベルを含めて、略称を定義します。その略称が InterSystems IRIS で使用されていないように注意してください。

    • サブルーチンを適切に定義します。詳細は、“メモ” セクションを参照してください。

  3. 親ルーチンにある最初のコマンドでは QUIT を使用することをお勧めします。こうしておけば、ユーザがルーチンを直接呼び出しても、何も起こりません。

    また、ルーチンでコメントを上部に記載して、ルーチン自体の名前を示すようにすると便利です。

Note:

(正確ではありませんが) 慣習的に、ルーチンは名前の一部にキャレットがあるかのように参照されます。このドキュメントでは、この慣習に従います。

Caution:

他のサブルーチンの場合、パブリックのサブルーチンで呼び出されるものを含めて、それらのラベルは必ず、小文字のみか大文字と小文字を混在して記述します (先頭は Z にしない)。または、プライベートのサブルーチンとして実装します。

つまり、^%ZLANG ルーチンによって言語が拡張されるので、目的のサブルーチンのみが外部で利用できるようにすることが重要です。

メモ

コマンドは、ルーチンやプロシージャの DO のように処理されます。引数は、呼び出しのパラメータとして渡されます。

コードの結果にする場合を除いて、$TEST$ZREFERENCE など、システム状態の値をコードで保持する必要があります (ただし、関数や特殊変数の場合、システムでは $TEST が自動的に保持されます)。

特殊変数の値を設定できます。変数のエントリ・ポイントは 1 つのみです。値を設定するか値を取得するかを判断するには、引数が指定されているかどうかをコードで調べる必要があります。以下はその例です。

ZVAR(NewValue) public {
         if $DATA(NewValue) Set ^||MyVar=NewValue Quit
         Quit $GET(^||MyVar)
}

そうすると、以下に示すように、ユーザはこの変数を設定するか、または変数を取得できます。

USER>w $ZVAR

USER>s $ZVAR="xyz"

USER>w $ZVAR
xyz

コマンドまたは関数からエラー・コードを返すには、$SYSTEM.Process.ThrowError() を使用します。

例えば、カスタムの特殊変数を定義して ObjectScript で使用するには、以下のようにして、^%ZLANGV00 ルーチンを定義します。

 ; implementation of ^%ZLANGV00
 ; custom special variables for ObjectScript
  QUIT

ZVERNUM        ; tag becomes name of a special variable
ZVE
  QUIT $PIECE($ZVERSION,"(Build")


次に、デモンストレーションとして、新規の変数はターミナルで以下のように使用できます。

USER>w $zvernum
InterSystems IRIS for Windows (x86-64) 2018.1
USER>w $zve
InterSystems IRIS for Windows (x86-64) 2018.1

別の例として、以下のように ^%ZLANGF00 ルーチンを定義するとします。

 ; implementation of ^%ZLANGF00
 ; custom functions for ObjectScript
 QUIT

ZCUBE(input) public {
 Quit input*input*input
}

次に、デモンストレーションとして、新規の関数はターミナルで以下のように使用できます。

USER>w $zcube(2)
8

以下の例では ^%ZLANGC00 を示します。この例では、システム・ステータス・ユーティリティ ^%SS を実行するコマンドが作成されます。

 ; %ZLANGC00
 ; custom commands for ObjectScript
  QUIT

ZSS       ; tag name of a command to check system status
  DO ^%SS
  QUIT
FeedbackOpens in a new tab