SET PROCESS VARIABLE
SET PROCESS VARIABLE ( process ; dstVar ; expr {; dstVar2 ; expr2 ; ... ; dstVarN ; exprN} )
引数 | 型 | 説明 | |
---|---|---|---|
process | Integer | → | 送り先のプロセス番号 |
dstVar | Variable | → | 送り先の変数 |
expr | Variable | → | ソース式 (ソース変数) |
このコマンドはスレッドセーフではないため、プリエンプティブなコードには使えません。
説明
SET PROCESS VARIABLE コマンドは、引数expr1 (expr2等)に渡す値を、processに渡す番号の送り先プロセスのdstVar (dstVar2等) プロセス変数に書き込みます。
それぞれの送り先変数は変数、または配列要素のいずれかを指定できます。ただし、この節で後述する制限事項を参照してください。
srcVar;dstVarの組み合わせにおいて、式は送り先変数と互換性のあるタイプである必要があり、互換性がない場合には、意味のない値が設定されます。インタプリタモードでは、送り先変数が存在しない場合、変数が作成され式の値が設定されます。
カレントプロセスは送り先プロセスの変数を"のぞき見"しています。送り先プロセスは別のプロセスが自分の変数のインスタンスに書き込んでいることについては何も警告されません。
4D Server: 4D Clientを使用し、サーバマシン上で実行される目的のプロセス (ストアドプロシージャ) の変数に書き込むことができます。このためには、process引数に渡すプロセス番号の前にマイナス記号を付けてください。
GET PROCESS VARIABLE、SET PROCESS VARIABLE、VARIABLE TO VARIABLEコマンドにより提供されるマシン間プロセス通信はクライアントからサーバへのみ行うことができます。ストアドプロシジャの読み書きを行うのは常にクライアントプロセスです。
Tip: サーバのプロセス番号がわからない場合でも、サーバのインタープロセス変数を使用することができます。このためには、processに任意の負の値を指定します。つまり、プロセス番号がわからなくてもGET PROCESS VARIABLEコマンドを使用してサーバのインタープロセス変数値を処理することができるということです。このことは、On Server Startupデータベースメソッドを使用して、ストアドプロシージャが起動されている場合に便利です。クライアントマシンではそのプロセスの番号が自動的にわからないため、process引数に任意の負の値を渡すことができます。
制限事項
SET PROCESS VARIABLEは、送り先変数としてローカル変数を受け付けません。
SET PROCESS VARIABLEは、任意のタイプの送り先プロセスまたはインタープロセス変数を受け付けますが、以下のタイプは除きます:
- ポインタ
- すべての配列:あるプロセスから別のプロセスに配列を全体として書き込むには、VARIABLE TO VARIABLEコマンドを使用します。ただし、SET PROCESS VARIABLEコマンドは配列の要素を書き込むことはできます。
- ポインタ配列の要素または2次元配列の要素を書き込むことはできません。
送り先プロセスはユーザプロセスである必要があります。カーネルプロセスは送り先プロセスにはなれません。送り先プロセスが存在しない場合、エラーが生成されます。ON ERR CALLでインストールされたエラー処理メソッドを使用すると、このエラーをとらえることができます。
例題 1
下のコードは、番号が*$vlProcessであるプロセスのテキスト変数vtCurStatus*を(空の文字列に)設定します:
SET PROCESS VARIABLE($vlProcess;vtCurStatus;"")
例題 2
以下のコードは、番号が*$vlProcessであるプロセスのテキスト変数vtCurStatusを、カレントプロセスで実行中のメソッドの変数$vtInfo*の値に設定します:
SET PROCESS VARIABLE($vlProcess;vtCurStatus;$vtInfo)
例題 3
以下のコードは、番号が*$vlProcessであるプロセスのテキスト変数vtCurStatus*をカレントプロセスの同じ変数の値に設定します:
SET PROCESS VARIABLE($vlProcess;vtCurStatus;vtCurStatus)
Note: 最初のvtCurStatusは送り先プロセスにある変数のインスタンスを示しています。2番目のvtCurStatusはカレントプロセスにある変数のインスタンスを示しています。
例題 4
以下の例は*$vlProcess*で示されるプロセスのプロセス配列の要素を順次大文字に設定
します:
GET PROCESS VARIABLE($vlProcess;vl_IPCom_Array;$vlSize)
For($vlElem;1;$vlSize)
GET PROCESS VARIABLE($vlProcess;at_IPCom_Array{$vlElem};$vtElem)
SET PROCESS VARIABLE($vlProcess;at_IPCom_Array{$vlElem};Uppercase($vtElem))
End for
Note: この例では、プロセス変数vl_IPCom_Arrayには配列at_IPCom_Arrayのサイズが格納され、ソース/送信先プロセスによって管理されている必要があります。
例題 5
以下の例は、現在のプロセスの同じ変数のインスタンスを使用して、送り先プロセスの変数v1, v2, v3のインスタンスに書き込みます:
SET PROCESS VARIABLE($vlProcess;v1;v1;v2;v2;v3;v3)
参照
GET PROCESS VARIABLE
POST OUTSIDE CALL
VARIABLE TO VARIABLE
プロセス