プログラムからルーチンをインポート/エクスポートすることはできますか?

はい、できます。
具体的な手順は以下の通りです。

1. エクスポート方法

a. ルーチンを個別に指定してエクスポートする場合は、$system.OBJ.Export() を使用します。
例:
 

do $system.OBJ.Export("TEST1.mac,TEST2.mac","c:\temp\routines.xml",,.errors)


指定する形式は ルーチン名.拡張子 で、拡張子は mac,bas,int,inc,obj を指定します。

エクスポート中のエラーは errors に格納されます。$system.OBJ.Export() の詳細はクラスリファレンス %SYSTEM.OBJ を参照してください。

b. ワイルドカードを使用してエクスポートする場合は、$system.OBJ.ExportPattern() を使用します。
例:
 

do $system.OBJ.ExportPattern("*.mac",c:\temp\allmacroutines.xml")


※Cache2008.1より、$system.OBJ.Export() でもワイルドカードが使用できるようになりました。

2. インポート方法

a. ファイルに含まれる全ルーチンをインポートする
ファイルに含まれる全ルーチンをインポートするには $system.OBJ.Load() を使用します。
例:
 

do $system.OBJ.Load("c:\temp\routines.xml",,.errors)


b. ファイルに含まれるルーチンのうち一部のみをインポートする

XMLファイルに含まれる一部のルーチンのみ選択してインポートする場合、一旦$system.OBJ.Load() で、第5引数の listonly を 1 に設定してXMLファイルを読み込み、第4引数(出力引数)で得られたリストからインポート対象を選択して第6引数で指定します。
例:

 

 Set file="c:\temp\routines.xml"
 // まずXMLに含まれるアイテム一覧を取得   
 Do $system.OBJ.Load(file,,.errors,.list,1 /* listonly */)
 Set item=$Order(list(""))
 Kill loaditem
 While item'="" {
     If item["Sample" Set loaditem(item)="" {    // Sample を含むもののみインポート
         Set item=$Order(list(item))
     }
 }
 // 作成されたリストでインポート処理実行
 Do $system.OBJ.Load(file,,.errors,,,.loaditem)

関連トピック: プログラムからルーチンやグローバルをインポート/エクスポートすることはできますか?
関連トピック:プログラムからグローバルのインポート/エクスポート処理を呼び出すことはできますか?(Caché5.1以降)
添付ファイル:

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

FAQトップに戻る