話題 11  他のFileを遠隔操作する

他のFMのFileのScriptを動かす方法です。


  1. 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変換したときに, 自動で沢山のデータソース(パス)が登録されており, それが待たされる原因と分かるまで, 随分時間がかかりました。


  1. 2. 遠隔操作Script

試しに, Loop Scriptを作ってみましょう。B→C→D→BとFileを移動してもとに戻ってくるScriptです。

(sample参照)。 Scriptをバトンを渡すように順次実行させます。(BからCへ, CからDへ, DからBへ)



  1. i.ダイアログを出すstepでは そこで止まってしまう...いったん手動に移ります(当然ですが)。

  2. ii. active Fileは逐一, 表に出ませんが, active Fileを表に出したければ, ”ウインドウの選択”stepを入れます。

  3. 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の途中なら, そこで止まったりもしません。

  1. * v6以前ではScriptの最後に”関連レコードへ移動”stepを配置すると, そのFileが前面にでていました。v7以降は”ウインドウ選択”stepを配置しないと, Fileを前面に出せなくなりました。

“A” Fileのあるレコードと関連した”B” Fileのレコード群のみを全置換,あるいは 再Lookupさせたい, という場合に,A FileのScriptで”関連レコードへ移動”(抽出), 続いて,B FileのScriptを遠隔指定して”Fieldの全置換”stepを実行, とすれば, 関連レコードのみの限定された操作を確実に行うことができます。



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に印刷する, 表現にしていますが, パソコンが違うとエラーがでるかもしれません。



 
Sample File のdownload (.fp7)Tech_11_files/FMsample11.zip