
今回は、特定イベントの開始時に実行される%ZSTARTルーチン(以下%ZSTART)について解説します。
はじめに
「システム起動時何らかの処理を自動で実行させたいけれど、具体的にどのように設定すればいいのかわからない」といったお悩みはありますか?
%ZSTARTは、プログラムを開始する際に自動的に実行されるコードを定義できます。
開発者にとって非常に便利な仕組みですね。
本記事では、%ZSTARTの基本的な仕組みと設定方法、さらに具体例を交えながらその活用法について詳しく解説します。
それではさっそく、%ZSTARTについて詳しくみていきましょう。
%ZSTARTとは
%SYSネームスペースに「%ZSTART」ルーチンと、下記サブルーチンを定義する事で、各処理の開始時にサブルーチンが呼びされます。
サブルーチン | 説明 |
---|---|
SYSTEM | システムの開始時に実行する |
LOGIN | %Service_Console、Service_Telnetサービスを使用してログインした際に実行する |
JOB | JOBが開始された際に実行する |
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」も存在しています。
こちらに関しては、別途記事にしてご紹介したいと思います。
また併せて、本記事で触れなかった内容等も盛り込んでいきたいと思います!
是非お楽しみにしていて下さい!