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

ZLOAD (ObjectScript)

ルーチンを現在のルーチン・バッファにロードします。

Synopsis

ZLOAD:pc routine
ZL:pc routine

引数

引数 説明
pc オプション — 後置条件式。
routine オプション — ロードするルーチン。単純なリテラルとして指定します。routine の値は括弧で囲みません。キャレット (^) 接頭語やファイル・タイプ接頭語は付きません。変数または式を使用して指定することはできません。省略した場合、InterSystems IRIS は現在のデバイスから名前のないルーチンをロードします。

概要

ZLOAD コマンドは、ObjectScript ルーチンの INT コード・バージョンを現在のルーチンとしてロードします。ZLOAD には、以下の 2 つの形式があります。

ターミナルから入力したり、XECUTE コマンドまたは $XECUTE 関数で呼び出したりする場合は、ZLOAD コマンドのみ使用できます。このオペレーションはルーチンの実行に影響を与える可能性があるので、ルーチンの本体にコード化するべきではありません。ルーチン内で ZLOAD を指定すると、コンパイル・エラーが返されます。また、ルーチンから ZLOAD を実行しようとしても、エラーが生成されます。

ZLOAD を使用してルーチンを現在のルーチンとしてロードした後、DO コマンドを使用して現在のルーチンを実行できます。続いて、ZINSERT引数付きの ZREMOVE を使用して現在のルーチンを編集し、ZPRINT でルーチン行を表示できます。さらに、ZSAVE を使用して、編集した現在のルーチンを保存 (オプションで名前を変更) して、最後に引数なしの ZREMOVE を使用して現在のルーチンをアンロードすることができます。

引数なしの ZLOAD

引数なしの ZLOAD コマンドは、名前のない ObjectScript ルーチンを、現在のプロセスを対象に現在のルーチンとしてルーチン・バッファにロードします。その後、ZSAVE routine を使用して、このルーチンに名前を付けることができます。このルーチンには名前が付いていないため、$ZNAME 特殊変数を使用して、現在のルーチンがロードされているかどうかを判断することはできません。

引数なしの ZLOAD には以下の 2 つの使用方法があります。

  • シーケンシャル・ファイルまたは他のデバイスからルーチンをロードする

  • ターミナルを使用してルーチンを作成する

引数なしの ZLOAD コマンドでは後置条件式を指定することができます。

デバイスからのルーチンのロード

デバイスからルーチンをロードするには、以下を実行します。

  1. OPEN コマンドを発行してデバイスを開きます。

  2. USE コマンドを発行して、デバイスを現在のデバイスにします。

  3. 引数なしの ZLOAD コマンドを発行して、デバイスからルーチンを現在のルーチンとしてロードします。

InterSystems IRIS が NULL 文字列行 ("") を読み取るまで、行のロードを継続します。ロードされたこのルーチンは、ZSAVE routine コマンドで保存するまで名前がありません。

ターミナルからのルーチンの作成

ターミナルから、引数なしの ZLOAD を使用して、名前のないルーチンを現在のルーチンとして作成します。

  1. ターミナル・プロンプトで、引数なしの ZLOAD コマンドを発行します。

  2. 次の行に、ルーチンの最初の ObjectScript コマンドを (括弧で囲まずに) 入力して、Enter キーを 2 回押します。通常、この行は、ラベル名、またはラベル名とそれに続く実行可能な ObjectScript コードです。実行可能な ObjectScript コードはインデントする必要があります。

  3. ターミナル・プロンプトで、ZINSERT コマンドを発行して、この現在のルーチンに他の行を追加します。

  4. オプションで、ターミナル・プロンプトで、ZSAVE routine を発行し、指定した名前でこのルーチンを保存します。

  5. 完了したら、引数なしの ZREMOVE を使用して、現在のルーチンをアンロードします。

または、ターミナルから、ZINSERT を使用して、名前のないルーチンを現在のルーチンとして作成することができます。ターミナルでは Tab キーを使用するネームド・ルーチンを作成するための省略表現も認識されます。

引数付きの ZLOAD

ZLOAD routine は、既存の ObjectScript ルーチンの INT コード・バージョンを、現在のプロセスの現在のルーチンとして、現在のネームスペースからルーチン・バッファにロードします。INT コードではプリプロセッサ文はカウントされず、含まれることもありません。

ZLOAD は、ルーチンをロードするときに暗黙的に引数なしの ZREMOVE を実行します。つまり、ZLOAD は、以前ロードされたすべてのルーチンを削除し、指定された routine に置き換えます。$ZNAME 特殊変数で、現在ロードされているルーチンを判別できます。ルーチンをロードすると、ZLOAD は、ルーチンの先頭で行ポインタを配置します。

一度ロードされると、ユーザが別のルーチンを ZLOAD コマンドで明示的にロードするか、引数なしの ZREMOVE で削除するか、または DO コマンドや GOTO コマンドで別のルーチンを暗黙的にロードするまで、ルーチンはプロセスの現在のルーチンのままです。

ルーチンが現在のものである限り、(ZINSERT および ZREMOVE コマンドで) ルーチンを編集し、ZPRINT コマンドで行を 1 行以上表示したり、$TEXT 関数で単一行を返すことができます。

引数

pc

オプションの後置条件式。InterSystems IRIS は、後置条件式が True (0 以外の数値に評価される) の場合にコマンドを実行します。InterSystems IRIS は、後置条件式が False (0 に評価される) の場合はコマンドを実行しません。詳細は、"ObjectScript の使用法" の "コマンド後置条件式" を参照してください。

routine

現在のルーチンとしてロードする、現在のネームスペース内の既存の ObjectScript ルーチン。ルーチン名は、大文字と小文字を区別します。

ZLOAD を可能にするために routine への実行許可を持つ必要があります。この許可がない場合は、InterSystems IRIS は <PROTECT> エラーを生成します。

指定されたルーチンが存在しない場合、システムは <NOROUTINE> エラーを生成します。ZLOAD でルーチンをロードしようとして失敗した場合、現在ロードされているルーチンは削除されることに注意してください。

その後、このプロセスでエラーが発生すると、そのすべてに、現在ロードされているルーチンの名前が付加されます。これは、エラーがルーチンと関係があるかどうかにかかわらずネームスペース全体にわたって実行されます。詳細は、"$ZERROR" 特殊変数を参照してください。

ネームスペース

ZLOAD でロードできるルーチンは、現在のネームスペースに存在するルーチンだけです。ルーチンがロードされると、そのルーチンは、すべてのネームスペースで、このプロセスに対して現在ロードされているルーチンになります。したがって、ルーチンのロード元のネームスペースだけではなく任意のネームスペースから、現在ロードされているルーチンの行の挿入または削除、ルーチンの表示、実行、アンロードを実行できます。ZSAVE は、現在ロードされているルーチンを現在のネームスペースに保存します。したがって、ZLOAD のネームスペースが ZSAVE のネームスペースと異なる場合、ルーチンの変更されたバージョンは、ZSAVE を発行したときに現在のネームスペースであるネームスペースに保存されます。変更は、ZLOAD ネームスペース内のルーチンのバージョンでは保存されません。

ZLOAD でのルーチンの振る舞い

ZLOAD routine を指定する場合、InterSystems IRIS はメモリ内のルーチン・バッファのプールのルーチンを検索します。ルーチンがない場合、InterSystems IRIS はルーチンの ObjectScript オブジェクト・コード・バージョンをバッファの 1 つにロードします。ObjectScript INT (中間) コードは、現在のネームスペースの対応する ^ROUTINE グローバルに残りますが、編集を行って、ZSAVE を使用して変更を保存した場合には更新されます。

例えば、ZLOAD MyTest は (まだロードされていない場合に) ルーチン MyTest のオブジェクト・コード・バージョンをロードします。MyTest ルーチンは、現在のネームスペースに存在している必要があります。

マルチユーザ環境では、LOCK プロトコルを設定し、複数のユーザが同時に同じルーチンをロードして変更するのを防ぐ必要があります。各ユーザは、対応するルーチンに対して ZLOAD を発行する前に、排他ロックを取得する必要があります。

routine を省略した場合、ZLOAD は、NULL 行を入力する (つまり、Return (Enter キー) を押す) ことでコードを終了するまで、現在のデバイス (通常はキーボード) から入力した新しいコード行をロードします。このルーチンは、次の ZSAVE コマンドで保存するまで名前がありません。

^rINDEX ルーチンのタイムスタンプとサイズ

以下のターミナルの例に示すように、^rINDEX グローバルを使用して、ルーチンの MAC、INT、および OBJ の各コード・バージョンのローカル・タイムスタンプと文字数を返すことができます。

USER>ZWRITE ^rINDEX("MyTest")
^rINDEX("MyTest","INT")=$lb("2019-12-13 06:37:49",475)
^rINDEX("MyTest","MAC")=$lb("2019-12-13 06:34:04.235011",452)
^rINDEX("MyTest","OBJ")=$lb("2019-12-13 06:37:49",476)
USER>

MAC のタイムスタンプは、MAC コードの変更後の最終保存日時です。INT と OBJ のタイムスタンプは、MAC コードの最終コンパイル日時です。INT コード・バージョンの変更後に ZSAVE を発行すると、INT および OBJ のタイムスタンプと文字数が更新されます。INT コードを変更せずに ZSAVE を発行すると、OBJ のタイムスタンプのみが更新されます。

INT コードと ^ROUTINE グローバル

ルーチンの ObjectScript INT (中間) コードは、^ROUTINE グローバルに格納されます。^ROUTINE は、現在のネームスペースのルーチンにのみアクセスできます。^ROUTINE で表示されるのは、ディスク上にあるルーチンの INT コード・バージョンであり、現在ロードされているルーチンではありません。

  • ZWRITE コマンドを使用すると、指定したルーチンの INT コードを表示できます。

      ZWRITE ^ROUTINE("MyRoutine")

    この表示には、ルーチン MyRoutine の以下の ^ROUTINE 添え字が含まれます。

    • ^ROUTINE("MyRoutine",0)="65309,36923.81262":このルーチンの INT コード・バージョンが最後にコンパイルされたローカル日時 ($HOROLOG 形式)。このタイムスタンプは、再コンパイル前に MAC コードを変更していなくても更新されます。指定したルーチンが現在ロードされているルーチンである場合、現在ロードされているルーチンが変更されていれば、ZSAVE を発行すると、この値が更新されます。

    • ^ROUTINE("MyRoutine",0,0)=8:このルーチンの INT コード・バージョンの行数。

    • ^ROUTINE("MyRoutine",0,1)="Main":このルーチンの INT コード・バージョンの最初の行。この場合は、ラベル Main になります。

    • ^ROUTINE("MyRoutine",0,2)=" WRITE ""This is line 2"",!":このルーチンの INT コード・バージョンの 2 行目。この場合は、インデントされた実行可能な ObjectScript コード行になります。追加のコード行も同じパターンに従います。

    ZINSERT および ZREMOVE で現在のルーチンを変更した場合、ZSAVE を使用して変更を保存しない限り、^ROUTINE には反映されません。

    ルーチンが MAC コード・ソースからロードされている場合、^ROUTINE の以下の添え字も表示されます。

    • ^ROUTINE("MyRoutine","GENERATED")=1:INT コードが生成されたことを示します。

    • ^ROUTINE("MyRoutine","INC","%occStatus")="65301,60553" : MAC バージョンに複数の #include ファイルが含まれる場合は、各 #include ファイルに対してこれらの添え字の 1 つが含まれ、#include ファイルが作成されたときのタイムスタンプを示します。

    • ^ROUTINE("MyRoutine","SIZE")=134:ソース・ファイルの INT コード・バージョンの文字数。

    • ^ROUTINE("MyRoutine","MAC")="65309,36920.45721":ルーチンの MAC バージョンが最後に保存されたローカル日時 ($HOROLOG 形式)。このタイムスタンプは、MAC コードを変更して保存し、再コンパイルした場合にのみ更新されます。

  • 管理ポータルを使用して、^ROUTINE グローバルの内容を表示し、編集することができます。[システムエクスプローラ] > [グローバル] を選択し、左側の列のネームスペースのドロップダウン・リストから目的のネームスペースを選択します。

  • KILL コマンドを使用して、ObjectScript INT (中間) コードを削除できます。

      KILL ^ROUTINE("MyRoutine")

    ルーチンの INT コードが利用できない場合 (KILL で削除されている場合)、ルーチンは引き続き実行できますが、現在ロードされているルーチンで INT コードを変更することはできません。ZLOADZINSERT、および ZREMOVE ではエラーは発行されませんが、ZSAVE は <NO SOURCE> エラーで失敗します。

ZLOAD と言語モード

ルーチンがロードされるとき、現在の言語モードはロードされたルーチンの言語モードに変換されます。呼び出されたルーチンの終了時、言語モードは呼び出し元のルーチンの言語モードに復元されます。しかし、ZLOAD でロードされたルーチンの終了時、言語モードは前の言語モードに復元されません。言語モードの確認と設定の詳細は、%SYSTEM.ProcessOpens in a new tab クラスの LanguageMode()Opens in a new tab メソッドを参照してください。

以下のターミナルの例では、排他ロックを確立してから、対応するルーチン MyRoutine をロードします。ソース・コードの最初の 10 行を表示して、ObjectScript コードの 1 行を行 2 として追加し、ソース・コードを再表示してから、変更を保存してロックを解放します。

USER>LOCK +^ROUTINE("MyRoutine")

USER>ZLOAD MyRoutine

USER>ZPRINT +1:+10

USER>ZINSERT " WRITE ""Hello, World!""":+1

USER>ZPRINT +1:+11

USER>ZSAVE

USER>LOCK -^ROUTINE("MyRoutine")

以下のターミナルの例では、デバイス dev から最初のルーチンをロードします。

USER>OPEN dev
USER>USE dev
USER>ZLOAD

関連項目

FeedbackOpens in a new tab