11 返信 最新の回答 日時: Jan 29, 2015 1:27 AM ユーザー:Shin

    ファイル間のレコードのインポートについて

    totono

      タイトル

      ファイル間のレコードのインポートについて

      フォーラムに投稿

      初めて投稿いたします。

      現在、FileMaker Server 13にて公開している
      Aファイルの「受注テーブル」のレコードを1件に絞り込み、
      Bファイルの「確認済みテーブル」へインポートする処理にて
      1レコードのみインポートするはずが、なぜか「受注テーブル」の全レコードになったり、
      0レコードになったりして、期待とは異なるかたちで終了してしまう現象が
      低頻度で発生しています。

      処理の流れとしては、以下になります。
      1、Aファイルの「受注テーブル」のレイアウトよりスクリプト起動

      2、「受注テーブル」のレイアウトにてレコードを1件に絞り込む

      3、Bファイルのスクリプトを呼び出す ※以下Bファイルでの処理

      4、Bファイルの「確認済みテーブル」のレイアウトに切り替える

      5、「確認済みテーブル」のレイアウトにて「受注テーブル」をインポートする


      インポートを実行した時に同じような現象が起きた人はいらっしゃいますか?
      原因や解決法などがあれば教えていただきたいです。

      宜しくお願いいたします。

       

      また、上記に関連して、
      ファイル間のレコードのインポートを行う場合、皆様はどのように使っていますでしょうか?

      ファイル間でレコードのインポートをする場合は、ファイルの移動(インポート元から
      インポート先のファイルのスクリプトを呼び出す)ではなく、
      AファイルにBファイルの「確認済みテーブル」のオカレントを作成し、
      そのレイアウトにて「受注テーブル」のレコードをインポートするのが
      一般的な方法でしょうか?

        • 1. Re: ファイル間のレコードのインポートについて
          sago350@未来Switch

          方法自体はあっていると思います。
          ですが、同じ現象は起きたことが無いです。


          原因としては、入力値の制限で取り込めないレコードが出ることで0レコードの取込になってしまう可能性はあります。
          しかし、その仮定だと全レコードの説明が付かないですよね。

          となると、Bファイルから取り込むまでに対象レコードが変わってしまっている可能性が高いですが、そんな処理が入っていたりしてないでしょうか?

          保険としては、「2、」のタイミングで対象レコードが1レコードでない場合はエラーになるようにしておくとか。

           

          ファイル間(テーブル間)のレコードのインポートの方法としては一般的だと思います。
          個人的にはフィールド設定&Loopで処理する時もあります。

          • 2. Re: ファイル間のレコードのインポートについて
            totono


            sago35様

            ご確認いただきありがとうございます。また、貴重なご意見をいただきありがとうございます。


            >原因としては、入力値の制限で取り込めないレコードが出ることで0レコードの取込になってしまう可能性はあります。
            >しかし、その仮定だと全レコードの説明が付かないですよね。

            「確認済みテーブル」に入力制限は設定していません。

            >となると、Bファイルから取り込むまでに対象レコードが変わってしまっている可能性が高いですが、そんな処理が入っていたりしてないでしょうか?
            >
            >保険としては、「2、」のタイミングで対象レコードが1レコードでない場合はエラーになるようにしておくとか。

            ご回答いただいた通り、
            絞り込んだ後の対象レコード数、インポート後のレコード数もチェックするようにしています。
            また、インポート前後にはそのチェックする処理しか入っていない状況です。


            処理部分以外に何かしらの原因によって、絞り込まれている情報がなくなってしまうということが発生する…
            など、何かご存知ないでしょうか?
            またはこのような使い方をしてはいけないなどはありますでしょうか?

            • 3. Re: ファイル間のレコードのインポートについて
              sago350@未来Switch

              うーん。これだけの情報だと私は思いつきませんね。
              あとはそもそも検索条件が間違ってるとか、ファイルが壊れているとか。

              現象が起こるときに法則があればいいんですが、、、、現象が起きた時はどういう条件で起きたか記録するようにしてはどうでしょうか?

              • 4. Re: ファイル間のレコードのインポートについて
                ねこ吉

                Server で公開してるファイルにこの処理やったことないんですが、

                他のクライアントからのアクセスがあっても絞り込みは維持されるんでしょうか。

                • 5. Re: ファイル間のレコードのインポートについて
                  sago350@未来Switch

                  別ファイルのウインドウが複数立ち上がってはいませんかね?

                  • 6. Re: ファイル間のレコードのインポートについて
                    Shin

                    構造を少し変えてみたら。

                    受注書のIDを変数か、スクリプト変数で確認済みテーブルへ渡し、新しいレコードを作り、IDを設定。その他のデータは、関連フィールドとして表示、または、ルックアップで取り込む、という事にすれば、インポートより手順が減り、誤動作も無いはずです。

                    • 7. Re: ファイル間のレコードのインポートについて
                      totono

                      環境や処理についてもう少し詳細に書くと

                      サーバー…Windows Server 2008 R2
                      FileMaker Server 13
                      クライアント…Windows 7
                      FileMaker Pro 13
                      ネットワーク帯域は狭い
                      受注テーブルのレコード数は約50万レコード


                      ※最初の投稿にて記載した内容----------------------------------------------------
                      1、Aファイルの「受注テーブル」のレイアウトよりスクリプト起動・・・(1)

                      2、「受注テーブル」のレイアウトにてレコードを1件に絞り込む・・・(2)

                      3、Bファイルのスクリプトを呼び出す ※以下Bファイルでの処理・・・(3)

                      4、Bファイルの「確認済みテーブル」のレイアウトに切り替える・・・(4)

                      5、「確認済みテーブル」のレイアウトにて「受注テーブル」をインポートする・・・(5)
                      --------------------------------------------------------------------------------

                      1、受注テーブルの一覧を表示(一度検索を行いおおまかに絞り込まれている)している
                      レイアウト(一覧画面)より、レコードを1件選択し、受注テーブルの編集用の
                      レイアウト(編集画面)に遷移する。
                      ※一覧画面のオカレントと編集画面のオカレントが異なるつくりの為、
                      「関連レコードの移動」で一覧画面にて選択していたレコードを遷移先の
                      編集画面で選択されている状態にし、
                      ①「全レコード表示」
                      ②「レコードを対象外に」(選択中のレコード)
                      ③「対象外のみを表示」
                      にて対象レコードを1件の状態に絞り込む。

                      2、編集画面にて登録の実行し(1)、再度レコードの絞り込む(2)。
                      (1、2、の間にユーザー操作にて対象レコードが2件になる場合があるため)
                      ※選択されているレコードのユニークキーを変数に保持し、検索モードに
                      切り替えて、その変数で「対象レコードの絞り込み」を実行する。

                      3、Bファイルのスクリプトを呼び出し(3)、確認済みテーブルのレイアウト(確認済み画面)より(4)
                      編集画面のオカレントを指定してインポートする(5)。


                      ※Bファイルの確認済みテーブルは不定期でODBC接続よりレコードを外部に取り出し、
                      その後、対象のレコードを確認済みテーブルより削除する。


                      以上の動作を行なっています。
                      2、3、の間には対象レコードが1件かどうかのチェックを行い、エラーがあれば編集画面に戻り
                      ダイアログにて通知する処理、
                      3、のインポート後にインポートした件数が1件でない(またはエラーがある)場合、ダイアログにて
                      通知処理を行なっています。

                      低頻度で発生している現象は社内環境では再現せず、客先の環境でのみ起きている状況のため
                      直接確認が取りづらい状態です。


                      また、問題として通知処理を行っているにも関わらず、その通知は確認されていない点があります。

                       

                      Shin様のご回答の通り、構造を変更する対処方法を考えていますが、上記の内容(レコードが0件、
                      レコードが全件)原因がどの部分にあるのかを明確にしたいとも考えています。
                      (特に原因がスクリプトに潜んでいるのか、それともPCの環境なのか)


                      インポートについてもですが、通知処理もおかしいというか処理がスルーされてしまうことは
                      あり得るのでしょうか?

                      • 8. Re: ファイル間のレコードのインポートについて
                        totono

                        sago35様
                        ユーザーは任意に新規ウィンドウができない状態で、スクリプトでは関連レコードの移動で
                        新規ウィンドウを開く以外ウィンドウを開く処理はなく、複数立ち上がる箇所はありません。

                        • 9. Re: ファイル間のレコードのインポートについて
                          totono

                          ネコ吉様
                          クライアントごとに維持されます。
                          現在、ちゃんと維持されていないことが問題ですが・・・

                          • 10. Re: ファイル間のレコードのインポートについて
                            sago350@未来Switch

                            問題が起こっているのはネットワーク帯域が狭い客先の環境のみということでしょうか?
                            だとすると、ファイルが開く前に処理が終わってしまうような、それに起因することが原因ですかねぇ。

                            各ステップごとにログを残すような仕組みを作って、どのステップでおかしいのか監視してみては。

                            • 11. Re: ファイル間のレコードのインポートについて
                              Shin

                              2回目の検索の時点で、レコードが終了していないか、その処理がサーバーへ届いていない間に、次の処理を行ってしまっているのかもしれませんね。そこで1秒ほど停止を入れてみれば良いかも。

                              また、そこで取得したユニークキーを使って、承認済みテーブルにレコードを作ってしまうのが、一番確実な気がしますが。

                              帯域が狭いのでしたら、出来る限りインポートなどの重い作業は避ける事をお勧めします。