Version 2015.1.x ~
  Windows のバッチスクリプトで Caché/Ensemble のルーチンやメソッドの戻り値を取得する方法を教えてください。

ccontrolコマンドを使用して、Caché/Ensemble のインスタンスを制御できます。
ccontrolコマンドは多くの機能(ファンクション)をサポートします。以下の構文を使用します。

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

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

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

※runwは、Caché 2008.2.0 以降で使用できます。
※runw の同期実行は、バッチファイルに記述し実行した場合に確認できます。InterSystems IRIS の場合は、直接実行する場合でも確認できます。

コマンド実行例は以下の通りです。

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


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

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


クラスメソッドサンプルは以下の通りです。
※%SYSTEM.Process の Terminate メソッドは 2015.1 以降のバージョンで使用可能です。

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


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

cd c:\intersystems\cache1\bin
ccontrol runw CACHE1 start1^^Test() USER
echo %errorlevel%

ccontrol runw CACHE1 ##class(Test.Class1).test() USER
echo %errorlevel%

pause

該当する製品: Caché, Ensemble, 旧HealthShare
関連トピック: Linux のシェルスクリプトで Caché/Ensembmle のルーチンやメソッドの戻り値を取得する方法を教えてください
添付ファイル:

アンケートにご協力をお願いします
このトピックは参考になりましたか?
このトピックに関するお問い合わせ

FAQトップに戻る