記事
· 2024年8月15日 2m read

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

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

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

USER>do $system.OBJ.Load("C:\temp\test.xml")
 
ロード開始 07/23/2024 16: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 専用のものもあります。

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

エクスポート修飾子

ディスカッション (2)0
続けるにはログインするか新規登録を行ってください

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

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

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

使用例:

USER>write $SYSTEM.OBJ.Export("t*.mac","c:\temp\test3.xml","/exportversion=cache2018.1")
 
XMLエクスポートの開始 08/22/2024 10: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/2024 10:53:45
ルーチンをエクスポート中: test3.mac
ルーチンをエクスポート中: test4.mac
エクスポートが正常に完了しました。
1
USER>


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