話題 07  FMのFileを超えてデータを引き渡す 2つの方法

Filemakerのなかの File間のデータ受け渡しをする方法のことです。

Relationを介してdata受け渡しすることができるならそれがもっとも確実でスマートな方法ですが, ときにはrelationを介さないで他のFileにデータを引き渡したいこともあります。例えば, A Fileで操作していて, B Fileの総レコード数が知りたい, というような場面です。


  1. 1. Get(スクリプト引数)関数 を用いる方法

この方法は FilemakerのFile間でメモのようにデータ受け渡しできるスマートな方法です。ただ, 同時に 1個のテキストデータしか渡せませんので, 例えば

氏名, 項目, 金額等を同時に受け渡したいという場合, それらをまとめて1個の文字列, 例えば, “$”を区切り文字として”合成”テキストFieldを作ります。

”合成”Field = 氏名 & “$” & 項目 & “$” & GetAsText( 金額 ),

これを 引き受けたいFileのScriptで Get(スクリプト引数)で引きだしますが, 引き出した文字列はもとのデータにバラさねばなりません。これをバラすのに話題2で紹介したカスタム関数, Middle_Positionが役に立ちます。

Middle_Position( 合成 ; “$” ; 1 ) -> 氏名, Middle_Position( 合成 ; “$” ; 2 ) -> 項目, GetAsNumber ( Middle_Position( 合成 ; “$” ; 3 ) ) -> 金額 になります。手前味噌で恐縮ですが, このカスタム関数Middle_Positionはかなり使えます。

スクリプト引数にList関数, 例えば List ( 氏名 ; 項目 ; 金額 )とすれば,  “合成”文字列を使わなくてもよく, Get(スクリプト引数)の計算結果は 改行記号で区切られたテキストになるので, GetValue関数, MiddleValue関数で個別に取り出せる, というほうがさらにスマートでしょうか。

ただし, いずれの場合も日付Fieldは 引き出されたとき, テキストに変換されていますので, 再度, 日付に変換し直さねばなりません。時刻も同様です 。


  1. 2. Copy and Paste を用いる方法

OS操作のコピペ機能を使って個別にデータを受け渡すことも可能ですが, スマートにScriptで氏名, 項目, 金額等を同時に受け渡したいという場合, Copy & Pasteでは 同時には1個のデータしか受け渡せませんから, Get(スクリプト引数) と同じように”合成”Fieldが必要になります。また引き受けたいFileで いったん”格納”するFieldを作成しておけねばなりません。また, “コピー” stepのとき, “貼り付け” stepのとき, レイアウトにその合成Field, 格納Fieldを配置しておかねばなりません。さらにその文字列をバラすのに, カスタム関数, Middle_Position が役に立ちます。


Sample (FMsample07, FMsample07-12)

篠原商店から, 緊急に未確認ながら ”ロシアのカニ(箱)”を購入したいという要請があり (ちょっと強引な場面設定ですが (^.^) ), とりあえず, 顧客名簿の篠原商店の画面から, メモとして会計Fileにデータを転送します。それを 販売原簿Fileで読み取ってレコードとして入力します。 FMC_Kokyaku Fileを開いてください。各ボタンで同じ結果が得られます。