2016年1月20日水曜日

ファイルメーカー(FileMaker)を同期で使おう Part5

こんにちは同期シリーズ第5弾です。

今回は、入力用ファイルと中間ファイルのデータの受け渡しです。

以前に、入力用ファイルには中間ファイルのテーブルを含めてのデータの受け渡しはできないということは書いたと思います。

ファイルメーカー(FileMaker)を同期で使おう Part4では、テーブルを含めて、それを利用してデータの受け渡しをしましたが、同じ方法だと、FileMaker Serverから接続を解除するのが難しいのです。

入力用のファイルと中間ファイルのやり取りにはスクリプト引数とスクリプトの結果という引数と返り値を利用してみたいと思います。




この入力用ファイル(client)にも同じテーブルを作成します。フィールドもこのようになっています。

このテーブルに、スクリプトを使ってデータを持ってきます。

中間ファイルのスクリプト



まず中間ファイルにこのようなスクリプトを作成します。

内容としては、
共有ファイルから営業確認タイムスタンプに入力がないデータを検索して、中間ファイルのテーブルにデータをコピーします。

データがないときは処理を終了します。

11行目~は取得したデータを変数に一度格納します。

13行目は、

$data & 受注マスター_sample::受注番号 & "#" &
受注マスター_sample::受注日 & "#" &
受注マスター_sample::商品名 & "#" &
受注マスター_sample::数量 & "¶"

という感じになっています。

1レコードを1行として、改行区切りで格納します。

また、各フィールドは「#」を使って区切っています。もし、商品名などで#を使うケースがあれば、絶対に使わないような文字を区切りとして使います。これは1文字でなくても構いません。

入力用ファイルのスクリプト



こちらが入力用ファイルのスクリプトです。

先ほどの中間ファイルのスクリプトを実行し、スクリプトの結果としてデータを受け取ります。

それをこのファイルにコピーしています。

内容としては、レコードを改行区切りで取得したデータを1レコードごとに変数に格納し、
さらにフィールド区切りとしていた#を改行に変換して、
フィールド設定でデータを書き込んでいます。

Excelファイルあたりでエクスポート、インポートの方が楽かもしれませんが、
こういうやり方もあるというのを紹介できれば幸いです。

好みでお使いいただければと思います。


4 件のコメント:

  1. 突然のコメント失礼いたします。

    自分も同期ファイルを作成しようとしており、行き詰ったところここにたどり着きました。

    一つ質問があります。
    中間ファイルのスクリプトで
    スクリプト引数を持つところがありますが、これは何を引数としているのでしょうか?

    返信削除
    返信
    1. コメントありがとうございます。

      この引数は、営業として自分に関係のあるレコードだけを絞り込むために、設定しています。

      例えば、社員コードなどのユニークなキーがあるとします。

      受注マスターでレコード作成時などに「担当営業ID」のフィールドにこのキーを設定します。

      このスクリプトに引数としてこのキーを設定しています。

      このキーはファイルを開くときに、社員マスターのようなテーブルから取得して変数に格納しておくか、このスクリプトで取得してもいいと思います。

      また、引数として渡さなくても、このスクリプトを実行する社員が関係するレコードを絞る方法があれば、それでもいいと思います。

      削除
  2. 当方も同期ファイルを作成したいと思い、ここに来訪させていただきました。

    入力用ファイルと中間ファイルのやり取りの中で、
    入力用ファイルに入力した内容を中間ファイルへの受け渡しは
    どのような感じになるのでしょうか?

    今までの記事を拝見させていただき、実際にサンプルファイルを作りましたが、
    中間ファイルから入力用ファイルへのデータ引きつぎまでは確認できました。

    ご教示いただけると幸いです。よろしくお願いいたします。

    返信削除
    返信
    1. コメントありがとうございます。

      基本的には、ここで紹介した方法と逆のパターンになるかと思います。

      入力用ファイルに同期すべきデータをスクリプトの結果として返す、
      スクリプトを用意します。
      ここで紹介した「同期データを返す」スクリプトと同じイメージのものを、
      入力用ファイルに作成します。

      ここで紹介した「中間フィールドからデータをコピー」と同じイメージの物を、
      中間ファイルに作成します。
      これを中間ファイルを開いて実行すれば、
      中間ファイル→入力用ファイルというのはできるのではないかと思います。

      ※FileMakerのライセンス形態が変わり、今後「同時接続ライセンス」の節約という需要が減ってくることが予想されるので、この方法はベターの方法の一つではなくなるかもしれません。
      中間ファイルを置かずに、入力用ファイルとFileMaker Serverのファイルとを直接リレーションする方法で事足りてしまうようになるかもしれませんね。

      削除