Filemaker_Tech
Filemaker_Tech
話題 11 FM内の他のFileを遠隔操作する
他のFMのFileのScriptを動かす方法です。
1. データソース(パス)の追加登録
基本的には関連File(relation)でなくても, 前もってFMのFileをパス登録しておけば, そのFileのScriptを動かすことができます。v7以降のことだと思いますが, データデース定義 → リレーションシップの画面で, 以下のように, FMのデータソースの追加(File登録)するシステムになりました。Fileはパソコンのどの階層にあっても登録できますが, 実際は同じFolder内に納めるのが使いやすいでしょうね (へたに遠い階層にあるFileを登録すると, そのFileが動かされたとき, ソフトの起動時にFMはそれを探そうとして, 延々と時間を費やすことになります)。登録してあるFileなら, そのScriptを遠隔に実行できます。
↓このデータソースの追加 は Script管理画面の“スクリプト実行”stepでも出てきますので, そこからも登録設定ができます。
これって何となくすごいことです (当たり前?...)。, ふつう, FMで作業する場合, 多くは複数のFileでやるわけで, ActiveになっているFileの指示で,他のFileのあらゆる作業を一連の作業としてウラで行うことができる, ということはかなり作業の幅が広がりますね。
* 余談ですが, “データソースの管理”画面を出して, 使っていないデータソースがあれば, 削除することをお勧めします。Fileをたちあげるときに, FMは そのデータソースを探します。それが見つからないと, 延々と待たされます。かつて, v6からv7にFile変換したときに, 自動で沢山のデータソース(パス)が登録されており, それが待たされる原因と分かるまで, 随分時間がかかりました。
2. 遠隔操作Script
試しに, Loop Scriptを作ってみましょう。B→C→D→BとFileを移動してもとに戻ってくるScriptです。
(sample参照)。 Scriptをバトンを渡すように順次実行させます。(BからCへ, CからDへ, DからBへ)
i.ダイアログを出すstepでは そこで止まってしまう...いったん手動に移ります(当然ですが)。
ii. active Fileは逐一, 表に出ませんが, active Fileを表に出したければ, ”ウインドウの選択”stepを入れます。
iii.Loop Scriptでは Get(スクリプト引数)関数は 最初だけ有効(B→CはOK, C→Dは不可), Global変数($$)はそのFileだけ有効です。ただ, Bからはじまって, Bに戻ったらGlobal変数が復活しています。Global変数はFMを終了するまで,そのFile内で有効です。(sample 参照) B→C→Dでは 結局, 記憶を伝達するのにGet(スクリプト引数), Global変数とも役に立ちません, 各FileにGlobal Fieldを作成するか, 順次コピペで受け継ぐかです。
3. 関連レコードへ移動
”関連レコードへ移動”は “移動”ではなく, “抽出する”という意味で, そのstepだけでは, バックグラウンドで”抽出”されているだけで, そのFileが前面には出てもきません。Scriptの途中なら, そこで止まったりもしません。
* v6以前ではScriptの最後に”関連レコードへ移動”stepを配置すると, そのFileが前面にでていました。v7以降は”ウインドウ選択”stepを配置しないと, Fileを前面に出せなくなりました。
Sample (FMsample11)
FMB→FMC→FMD→FMB と移動する Loop Scriptを作成しました。各Fileでディアログを出して止めていますが, このstepを削れば, 瞬時に1周して戻ります。また, この移動にはrelationは使っていません。”Loop”では FMBのFileが前面に出たままですが, “Loop 前面へ”では そのときの実行Fileが前面に出ます。またディアログに そのときの Get(スクリプト引数)の値とGlobal変数($$)を表示しています。
“Bの報告書印刷”でDからB Fileのなかの関連レコードのみ抽出して, Bの印刷(pdf)Scriptを遠隔実行します。Desktopに印刷する, 表現にしていますが, パソコンが違うとエラーがでるかもしれません。