ソースプログラムを隠蔽化する方法
これは InterSystems FAQ サイトの記事です。
ルーチン(*.mac)の場合
ソースプログラムのコンパイル後に生成される *.obj のみをエクスポート/インポートすることでソースの隠蔽化を実現できます。
コマンド実行例は、EX1Sample.mac と EX2Sample.mac のコンパイルで生成される EX1Sample.obj と EX2Sample.obj をエクスポート対象に指定し、第2引数のファイルにエクスポートしています。
別ネームスペースに移動したあと、エクスポートした XML ファイルを利用してインポートを実行しています。
USER>do $system.OBJ.Export("EX1Sample.obj,EX2Sample.obj","/opt/app/routine.xml")
XMLエクスポートの開始 04/22/2021 18:18:32
オブジェクトコードをエクスポート中: EX1Sample.obj
オブジェクトコードをエクスポート中: EX2Sample.obj
エクスポートが正常に完了しました。
USER>zn "test" // ネームスペース移動
TEST>do $system.OBJ.Load("/opt/app/routine.xml")
ロード開始 04/22/2021 18:18:51
ファイル /opt/app/routine.xml を xml としてロード中
インポートしたオブジェクトコード: EX1Sample
インポートしたオブジェクトコード: EX2Sample
ロードが正常に完了しました。
TEST>
クラス(*.cls)の場合
クラスの場合は、XMLで *.cls をエクスポート/インポートしたあとに、サーバで MakeClassDeployed() を実行します。
ただし、比較的新しいバージョンでは MakeClassDeployed() 実行後、ソースファイル(*.cls)は配置モードに設定されるのみで(編集はできなくなります)参照のみ行える仕様になっています。
参照も不可にしたい場合は、MakeClassDeployed() 実行後、クラスの Hidden プロパティを設定します(プロパティの属性 Hidden=True に設定)。
コマンド実行例は以下の通りです。
USER>do $system.OBJ.Export("GPS.REST.cls,GPS.DriveData.cls","/opt/app/test.xml")
XMLエクスポートの開始 04/22/2021 18:05:13
クラスをエクスポート中: GPS.DriveData
クラスをエクスポート中: GPS.REST
エクスポートが正常に完了しました。
USER>zn "test" // testネームスペースに移動
TEST>do $system.OBJ.Load("/opt/app/test.xml","ck")
ロード開始 04/22/2021 18:07:21
ファイル /opt/app/test.xml を xml としてロード中
インポートしたクラス: GPS.DriveData
インポートしたクラス: GPS.REST
, 2 クラスをコンパイル中, 個のワーカー・ジョブを使用
クラスのコンパイル中 GPS.DriveData
クラスのコンパイル中 GPS.REST
テーブルのコンパイル中 GPS.DriveData
ルーチンのコンパイル中 GPS.REST.1
ルーチンのコンパイル中 GPS.DriveData.1
ロードが正常に完了しました。
TEST>do $system.OBJ.MakeClassDeployed("GPS.DriveData")
TEST>
CSP(*.csp)の場合
CSPファイルについては、*.cspをコピーし、配置先の CSP フォルダに貼付ます。
サーバでコンパイル後、CSPの設定で自動コンパイル OFF にしたあと、*.csp の削除と MakeClassDeployed() の実行を行います
実行例は以下の通りです。
1)CSPファイルのコピー後、サーバの CSP ディレクトリに貼付&コンパイル
TEST>do $SYSTEM.CSP.LoadPageDir("/csp/test")
2)ウェブアプリケーションパスの設定で「自動コンパイル」をいいえに設定
【バージョン2013.1以降】 [管理ポータル] > [システム管理] > [セキュリティ] > [アプリケーション] > [ウェブ・アプリケーション] > 該当するアプリケーション名のリンク
【バージョン201.1~バージョン2012.2】 [管理ポータル] > [システム管理] > [セキュリティ] > [アプリケーション] > [ウェブ・アプリケーション] > 該当するアプリケーション名の[編集]
【バージョン2010.2以前】 [システム管理ポータル] > [システム] > [セキュリティ管理] > [CSPアプリケーション] > 該当するアプリケーション名の[編集]
3)MakeClassDeployed() の実行
※cspsample.csp をコピーした場合の例
TEST>do $system.OBJ.MakeClassDeployed("csp.cspsample")