Version 5.0.x
  プログラムからグローバルのインポート/エクスポート処理を呼び出すことはできますか?(Caché5.0用)

※以下の方法は、Caché5.0.xバージョンにのみ適用されます。(Caché5.1以降はTopic154を参照)

Caché5.0.xでは、以下の様な方法でグローバルのインポート/エクスポート処理をプログラムの中に組み込むことができます。
(表記上、コマンド/行の途中で改行が含まれている可能性があります)

1. グローバルエクスポート方法

一般的に、“WNS”オプションは制御文字などのバイナリデータを含まないグローバルをエクスポートまたはインポートする場合に使用し、それ以外のフォーマット(ブロックモード, “WNV”)をバイナリデータの保存に使用します。

処理は、出力グローバルの指定の部分(1.1)とエクスポート処理の部分(1.2)の2つで構成されます。

1.1 出力グローバルの指定

1.1.1 基本形(個別にグローバル名を指定する)
 

Kill ^%utility($j)
Set ^%utility($j,1)="^Global1”
Set ^%utility($j,2)="^Global2”


1.1.2 全てのグローバルをエクスポートする場合
(新しいデータベースにモード7 (%GOF 形式)で出力する場合を除いて推奨されません)

 

 Kill ^%utility($j) Set glocount=$$Fetch^%GD("*",1,0) ; 不要なグローバルのエントリを削除 If $I=2 Kill ^%utility("SPOOL") ; $IO 特殊変数が2の場合^SPOOLをエクスポートしない Set GLO="" Set GC=0  For G=1:1 Set GLO=$O(^%utility($J,GLO)) Quit:GLO="" If $d(@GLO) Set GC=GC+1,glist(GC)=GLO Kill ^%utility($j) Merge ^%utility($j)=glist



1.1.3 制御文字やルーチンソース、オブジェクトが格納されているグローバルを除くほぼ全てのグローバルをエクスポートする場合(新しいデータベースに全体をコピーするのでない限り、推奨されません)

 Kill ^%utility($j)
 ; 制御文字コードをデータに持つ%qCache 、 rOBJ を除外する
 ; ルーチンとオブジェクトの定義ソースグローバルを除外
 Set glocount=$$Fetch^%GD("*;'%qCache*;'rOBJ;'ROUTINE;'r*;'odd*",1,0)
 ; 不要なグローバルのエントリを削除
 If $I=2 Kill ^%utility("SPOOL") ; $IO 特殊変数が2の場合^SPOOLを出力しない
 Set GLO="" s GC=0
 For G=1:1 Set GLO=$O(^%utility($J,GLO)) Quit:GLO="" If $d(@GLO) Set GC=GC+1,glist(GC)=GLO
 Kill ^%utility($j)
 Merge ^%utility($j)=glist



1.1.4 ^A から ^EZZZZZZ... までのすべてのグローバルをエクスポート(既存のデータベースに対して特定のグローバルをエクスポートする場合に推奨される方法)

 

 Kill ^%utility($j)
 Set glocount=$$Fetch^%GD("A*;B*;C*;D*;E*",1,0)
 ; 不要なグローバルのエントリを削除
 If $I=2 Kill ^%utility("SPOOL") ; $IO 特殊変数が2の場合^SPOOLを出力しない
 Set GLO="" Set GC=0
 For G=1:1 Set GLO=$O(^%utility($J,GLO)) Quit:GLO="" If $d(@GLO) Set GC=GC+1,glist(GC)=GLO
 Kill ^%utility($j)
 Merge ^%utility($j)=glist


1.2 エクスポート処理

1.2.1 ブロック形式のエクスポート(%GOF 相当)
 

Set flag=$$main^%Wgs("FILE.GOF:(""WNU"")",7,"Header Comment",0,0)


1.2.2 レコード形式のエクスポート、Caché ストリーム形式ファイルフォーマット(%GO 相当)
 

 Set RM=80
 Set flag=$$main^%Wgs("FILE.GSA:(""WNS"")",5,"Header Comment",0,0)


1.2.3 レコード形式のエクスポート、Caché 可変長レコード形式ファイルフォーマット(%GO 相当)
 

 Set RM=80
 Set flag=$$main^%Wgs("FILE.GSA:(""WNV"")",5,"Header Comment",0,0)


2. グローバルインポート方法

2.1 ブロック形式のグローバルインポート(%GIF 相当)全グローバル

 

 Set file="FILE.GOF"
 Kill ^%utility($j)
 Set IO=0
 Set header=$$header^%Wgr(file_":(""RU"")",7,0)
 For i=2:1 Set glo=$p($p(header,$c(1),i),$c(19)) q:glo="" Set ^%utility($j,glo)=""
 Set flag=$$main^%Wgr(file_":(""RU"")",7,"*",0,0,0)
 Kill ^%utility($j)


2.2 ブロック形式のグローバルインポート(%GIF 相当)選択グローバル
 

 Kill ^%utility($J)
 Set ^%utility($J,"Global1")="" ; ノード部にグローバル名( ^ は不要)を設定します
 Set ^%utility($J,"Global2")=""
 Set IO=0
 Set header=$$header^%Wgr("FILE.GOF:(""RU"")",7,0) ; (A)
 Set flag=$$main^%Wgr("FILE.GOF:(""RU"")",7,"*",0,0,0)


(ここで FILE.GOF がファイル名です。ファイル名は絶対パスで指定してください)
 

 Kill ^%utility($J)


選択グローバルをインポートするには、以下の内容で "*"となっている部分をインポートするグローバルのリスト($c(13,10)デリミタ)に置き換えてください。

例:
"^A*"_$c(13,10)_"^Dictionary"を指定すると、A から Dictionary までのすべてのグローバルがインポートされます。
これにさらに制限をかけることができます。
リストア対象グローバルは、^%utility($j グローバルでも指定する必要があります。
また、(A)の部分で取得したheaderにグローバルリストが格納されているので、そこから選択を行うことも可能です。

2.3 レコード形式ファイルのグローバルインポート、Cachéストリームファイル形式(%GI 相当)全グローバル
 

 Set IO=0
 Set flag=$$main^%Wgr("FILE.GSA:(""RS"")",5,"*",0,0,0)


補足: エラーが発生する場合は、 ("RS") パラメータを省略してください。

2.4 レコード形式ファイルのグローバルインポート、Caché 可変長ファイル形式(%GI 相当)全グローバル
 

 Set IO=0
 Set flag=$$main^%Wgr("FILE.GSA:(""RV"")”,5,"*",0,0,0)

 


該当する製品: Caché
関連トピック:
添付ファイル:

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

FAQトップに戻る