以下のような現象で困っております。
現状のテーブル構成は
- 伝票
- 伝票明細
- 商品
- 得意先
というオーソドックスな受発注システム
ファイル構成は
iPhone側に
1)入力用モバイルファイル(通常はオフライン)
2)ホストとのコネクト用の中間ファイル
サーバー側に
3)一時保管用ファイル
4)本ファイル
という4つのファイル構成になっております。1・3・4は同じテーブル構成で、2のみサーバとの接続・連携用のファイルです。
用途は1で発注情報を入力し、
3の伝票に対して伝票ID・日付・得意先IDを。同時にそのポータルである伝票明細に対して商品ID・数量をアップしています。
アップの方法はファイルメーカー社配布の「iOS同期」の手法をそっくり採用しておりますが、同期ではなくここではアップロードのみです。
2の中間ファイルに1と3の伝票テーブルを持たせ、グローバルフィールドに伝票IDを入れて、ピボットで回して、伝票情報を移行させます。
伝票明細は伝票からExecuteSQLで明細を取得し、レイアウト変更して
Loop
新規レイアウト作成
.
.
という風に明細情報を移行させます。
で、2を介した1と3のアップロード(モバイル回線)は回線状態が良ければちゃんと動作しますし、回線が途切れた場合でも再アップロードでちゃんと3のファイルに全データ取り込めています。
問題は同じサーバー上の3から4へのデータ移行です。
移行用ピボットに使用するテーブルが3のファイル自体にあるという違いはありますが、1から3へのスクリプトと全く同じスクリプトで30分に一度のスケジュールでデータ移行を行なっています。(1から3へは最大5名が適宜アップロード)
しかし数百件に1件の割合で伝票テーブルのデータは取得できているのに伝票明細テーブルの部分がそっくり抜けている(取り込めていない)現象が起こります。当然デバッガでは問題なく動くので、ポイントポイントでログをとってみたのですが、エラーが発生する箇所はExecuteSQLで伝票から伝票明細を取得する箇所でした。取得するExecuteSQLの行数をカウントするログをとってみたのですが、そこが0。つまり明細データがあるのにExecuteSQLで取得できていない。それもごく稀に。
サーバーの3から4への移行スケジュールと1から3へのアップロード時間が重なっているかタイムスタンプも確認しましたが、そういった形跡もなし。
現状3と4の明細行数を比較するポータルを設けてチェックはできていますが、面倒でして。
サーバーはホスティングサービス(専用)を使用しており、AWSにインストールされたFileMaker server15です。FileMakrGoは16です。
4のファイルへは内勤者が直接アクセスして電話やFAXで受けた注文を伝票入力しています。3から4へアップロード中のレコードへ内勤者がアクセスするような場面はないはずです。スクリプトの時間はほんの1秒程度で終了しますし。なので排他処理はしておりません。
※1から2を介した4への直接アップロードは計算式の関係で通信時間が長くなるので、計算式をなくした3の一時保管ファイルに一旦格納しています。
どのような原因が考えられるでしょうか?
推測ですが、FileMaker Server 上のスクリプトを実行する際、4 のファイルから 3 のファイルが見えていないのではないかと思います。
外部データソースの指定を
と3行にすると解決するかもしれません。サーバー上のスクリプト実行で指定されたスクリプトの中で、Get ( FilePath ) の結果を見ると、
fmnet:/127.0.0.1/... になっているので、ローカルループバックアドレスも指定しておいた方がトラブルが減らせると思っています。
これでも解決しない場合は、4 のファイルの onFirstWindowOpen で指定されたスクリプトで、3 のファイルの TO が指定されたレイアウトへ移動スクリプトステップを入れることで 3 のファイルを開いてくれるかもしれません。
明示的に、ファイルを開くスクリプトステップを入れたいところですが、残念ながら、FileMaker Server 非互換なステップです。
FMSで開いているんだから開いていて当たり前なので、非互換なのはわかりますが...外部データソースで指定されたファイルが見えていないと現象は幾度か経験しています。