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)