投稿者

Product Support at InterSystems Japan
記事 Megumi Kakechi · 8月 15, 2024 2m read

IRISでエクスポートしたクラスやルーチンをCacheにインポートする方法

通常、Caché でエクスポートしたクラスやルーチンをIRISにインポートすることは可能ですが、IRISよりエクスポートしたクラスやルーチンを Caché にインポートすることはできません。

Caché にインポートしようとすると、以下のようなエラーになります。

USER>do$system.OBJ.Load("C:\temp\test.xml")
 
ロード開始 07/23/202416:50:42
ファイル C:\temp\test.xml を xml としてロード中
ERROR #6301 行: 2 オフセット: 117 これはCacheエクスポートファイルではありません。インポートできません。
読込時に 1 個のエラーを検出しました。
 


どうしても、古いバージョンにインポートする必要がある場合、「/exportversion」というエクスポート修飾子を使用することが可能です。

使用方法は以下のようになります。/exportversion には、エクスポートしたルーチンをインポートしたい環境のCacheバージョンを指定します。

USER>write$SYSTEM.OBJ.Export("test.mac","c:\temp\test2.xml","/exportversion=cache2018.1")


ただし、/exportversion を指定しても、エクスポートシステムとインポートシステム間のコードの互換性は保証されませんので、ご注意ください。
※一部の関数や API は IRIS では名前が異なり、IRIS 専用のものもあります。

詳細は以下のドキュメントをご覧ください。

エクスポート修飾子

Comments

Akio Hashimoto · 8月 19, 2024

こちらの処理では、複数ソースを指定してエクスポートする場合は、どのように指定すれば良いでしょうか?

ちなみに、まったくおすすめはしませんが、私はいつも普通にエクスポートしたXMLのExportタグをCache用に書き換えてインポートしています。互換性のないコードを書いていないのを分かっているので出来る荒業ですね。

0
Megumi Kakechi  8月 21, 2024 to Akio Hashimoto

Hashimotoさん、コメントありがとうございます。
複数ソースを指定する場合は、*(アスタリスク)が使用できます。
また、,(カンマ)区切りで指定することも可能です。
使用例:

USER>write$SYSTEM.OBJ.Export("t*.mac","c:\temp\test3.xml","/exportversion=cache2018.1")
 
XMLエクスポートの開始 08/22/202410:46:59
ルーチンをエクスポート中: test.mac
ルーチンをエクスポート中: test2.mac
ルーチンをエクスポート中: test3.mac
ルーチンをエクスポート中: test4.mac
ルーチンをエクスポート中: test5.mac
ルーチンをエクスポート中: testLoop.mac
ルーチンをエクスポート中: testLoop2.mac
ルーチンをエクスポート中: testLoop3.mac
ルーチンをエクスポート中: testStrean.mac
ルーチンをエクスポート中: testsql.mac
エクスポートが正常に完了しました。
1
USER>write$SYSTEM.OBJ.Export("test3.mac, test4.mac","c:\temp\test4.xml","/exportversion=cache2018.1")
 
XMLエクスポートの開始 08/22/202410:53:45
ルーチンをエクスポート中: test3.mac
ルーチンをエクスポート中: test4.mac
エクスポートが正常に完了しました。
1
USER>


確かに、「エクスポートしたXMLのExportタグをCache用に書き換えてインポート」の方法も使えますね。
ただ、/exportversion の場合でも、エクスポートシステムとインポートシステム間のコードの互換性は保証されませんので注意が必要です。

0