【IRIS/Cache】起動時に処理を実行する(%ZSTART)

今回は、特定イベントの開始時に実行される%ZSTARTルーチン(以下%ZSTART)について解説します。

※この記事は下記の方向けになります。
  • インスタンス起動時に何かしらの処理を行いたい方
  • ターミナル等々の開始時に、何かしらの処理を行いたい方

はじめに

「システム起動時何らかの処理を自動で実行させたいけれど、具体的にどのように設定すればいいのかわからない」といったお悩みはありますか?

%ZSTARTは、プログラムを開始する際に自動的に実行されるコードを定義できます。
開発者にとって非常に便利な仕組みですね。

本記事では、%ZSTARTの基本的な仕組みと設定方法、さらに具体例を交えながらその活用法について詳しく解説します。

それではさっそく、%ZSTARTについて詳しくみていきましょう。

%ZSTARTとは

%SYSネームスペースに「%ZSTART」ルーチンと、下記サブルーチンを定義する事で、各処理の開始時にサブルーチンが呼びされます。

サブルーチン説明
SYSTEMシステムの開始時に実行する
LOGIN%Service_Console、Service_Telnetサービスを使用してログインした際に実行する
JOBJOBが開始された際に実行する
CALLIN外部プログラムがCALLINを開始した際に実行する

これらサブルーチンは、複雑な処理や長時間の処理を行うものではありません。
 →起動に時間がかかるか、JOBの処理能力が低下するとの事

※でもローカル(開発・検証)環境なら気にしないでいいと思います。
 自分が我慢すればよいだけですから(笑

作成してみよう!

では早速%ZSTARTルーチンを作成しましょう。
スタジオ(or VsCode)より、%SYSネームスペースで新規ルーチンを選択し、「%ZSTAET.mac」の名称で保存します。

ベース作成

ルーチンを作成したら、下記をベースとして張り付けてください。

%ZSTART
	q
	;-
	;
SYSTEM ;
	q
	;-
	;
LOGIN ;
	q
	;-
	;
JOB ;
	q
	;-
	;
CALLIN ;
	q
	;-
	;

ベースを張り付けたら、次は「SYSTEM」「LOGIN」「JOB」「CALLIN」の各ラベルに必用な処理を記載していきます。

処理の追記

次に各サブルーチンに対し、簡単な処理を記述していきたいと思います。

サブルーチン毎にネームスペース「USER」へ切り替え、グローバルを作成する処理を追加しました。

%ZSTART
	q
	;-
	;
SYSTEM ;
	try{
		s ns = "User"
		i (##class(%SYS.Namespace).Exists(ns)){
			d LOGGING(ns, "SYSTEM")
		}
	}catch e {
	}
	q
	;-
	;
LOGIN ;
	try{
		s ns = "User"
		i (##class(%SYS.Namespace).Exists(ns)){
			d LOGGING(ns, "LOGIN")
		}
	}catch e {
	}
	q
	;-
	;
JOB ;
	try{
		s ns = "User"
		i (##class(%SYS.Namespace).Exists(ns)){
			d LOGGING(ns, "JOB")
		}
	}catch e {
	}
	q
	;-
	;
CALLIN ;
	try{
		s ns = "User"
		i (##class(%SYS.Namespace).Exists(ns)){
			d LOGGING(ns, "CALLIN")
		}
	}catch e {
	}
	q
	;-
	;
LOGGING(ns, key)	;
	new $namespace
	s $namespace = ns
	s ^test(key,$zdt($h, 3, 1)) = ""
	q
	;-
	;

ネームスペースの切り替えに関しては、下記記事を参照してください。

確認してみよう!

%ZSTARTルーチンの準備が整ったので、各サブルーチンの動作確認を行ってみましょう。

SYSTEM(システム起動時)

「SYSTEM」は、システム起動時に実行されるサブルーチンなので、インスタンスを再起動すればグローバルが作成されます。
再起動後、管理ポータルからグローバルを確認してみましょう。

LOGIN(ターミナルのログイン時)

「LOGIN」は、ターミナル起動時に実行されるサブルーチンになります。
グローバルの作成を確認するため、ターミナルを起動してみましょう。

JOB(JOB開始時)

スタジオ起動時(ネームスペース切替時)・タスクの実行等の、ジョブ開始時に実行されるサブルーチンになります。

先ずは、スタジオを起動してグローバルの生成を確認してみましょう。

次に、タスク実行時に作成されたグローバルを確認します。
タスク起動後にグローバルの生成を確認しましょう。

CALLIN(外部プログラムがCALLINの開始時)

最後に「CALLIN」での生成を確認してみます。

簡単な確認方法は、コマンドプロンプトからEmbedded Pythonを実行する事です。
 ※Embedded Python関連は、また別途記事にします。

おわりに

最後までお読みいただき、ありがとうございました。

%ZSTARTの仕組みを理解し、ぜひご自身の開発に取り入れてみてください。
この記事が、皆さまのプログラム開発の一助となれば幸いです。

今回は開始時に実行される「%ZSTART」のご紹介になりましたが、対となる終了時に実行される「%ZSTOP」も存在しています。

こちらに関しては、別途記事にしてご紹介したいと思います。
また併せて、本記事で触れなかった内容等も盛り込んでいきたいと思います!

是非お楽しみにしていて下さい!