記事
Tomoko Furuzono · 2021年5月26日 2m read

Windows のバッチスクリプトでIRISのルーチンやメソッドの戻り値を取得する方法

これは、InterSystems FAQサイトの記事です。


iris
 コマンドを使用して、InterSystems IRIS のインスタンスを制御できます。
iris コマンドは多くの機能をサポートします。以下の構文を使用します。

iris <ファンクション名> <インスタンス名> [引数]


irisコマンドの詳細は下記ドキュメントをご参照ください。
InterSystems IRIS インスタンスの制御

このirisコマンドのrunw というファンクションを使用して、同期実行や戻り値を取得することができます。
コマンド実行例は以下の通りです。

iris runw インスタンス名 tag^routine([parameter-list]) ネームスペース名
iris runw インスタンス名 ##CLASS(package.class).method([parameter-list]) ネームスペース名


バッチスクリプトへの戻り値の指定は、ルーチンやメソッド終了時に指定する QUIT や RETURN コマンドに引数を指定する方法ではなく、IRIS 内の処理終了時に %SYSTEM.Process クラスの Terminate() メソッドを使用して errorlevel 変数に値を返す方法を使用します。
値は、0~255 を指定できます。

ルーチンサンプルは以下の通りです。

// ルーチン名をTest.macとします
start1() public {
 hang 5 // 5秒待つ
 //第2引数に指定した数値がシェルスクリプトに戻ります
 set st=$system.Process.Terminate($JOB,11)
}


クラスメソッドサンプルは以下の通りです。

Class Test.Class1
{
ClassMethod test()
{
 hang 5 // 5秒待つ
 //第2引数に指定した数値がシェルスクリプトに戻ります
 set st=$system.Process.Terminate($JOB,12)
}
}


上記ルーチンとクラスメソッドを起動するバッチスクリプト例は以下の通りです。
※インスタンス名=IRIS1

cd c:\intersystems\IRIS1\bin
iris runw IRIS1 start1^^Test() USER
echo %errorlevel% iris runw IRIS1 ##class(Test.Class1).test() USER
echo %errorlevel% pause
00
1 0 1 66
Log in or sign up to continue

Furuzonoさん、情報ありがとうございます。
Windowsマシンで試したのですが、OS認証をONにするのを忘れてハマってしまったので、念のため情報共有しておきます。

OS認証をONにする方法

  1. システム管理ポータルの「システム管理」「セキュリティ」「システムセキュリティ」「認証/ウェブセッションオプション」メニューをクリックします。
  2. 以下のページが表示されますので、「OS認証を許可」をチェックし、「保存」ボタンをクリックします。  
  3. システム管理ポータルの「システム管理」「セキュリティ」「サービス」メニューをクリックします。
  4. 「%Service_Console」をクリックし、表示されるダイアログにて「オペレーティングシステム」をチェック、「保存」ボタンをクリックします。

あとはWindowsユーザと同じ名前のユーザを作成すれば(インストール時のWindowsユーザであれば自動的に作成されています)、バッチファイルからirisコマンドでルーチンやクラスが起動できました。