記事
· 2021年4月22日 4m read

ソースプログラムを隠蔽化する方法

これは 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")
ディスカッション (0)1
続けるにはログインするか新規登録を行ってください