1 2 前へ 次へ 16 返信 最新の回答 日時: Sep 4, 2016 10:34 PM ユーザー:User28136

    ポータル内のレコードが更新されない

    User28136

      お世話になります。

       

      ポータル行の削除をポータル内のボタンで行った後に、ポータルの外のボタンでポータルのレコードを追加するとレコードの更新ができません。

       

      ポータルの更新やウィンドウの再表示等あるようですが、使い方がいまいちわかりません。

       

      説明が下手なのでサンプルファイルを添付しておきます。

       

      よろしくお願いします。

        • 1. Re: ポータル内のレコードが更新されない
          user14047

          スクリプトを全部見ていませんが、[ポータルの更新] スクリプトステップのところだけ...

          まず、レイアウトモードでポータルに自分で好きな(わかりやすい)名前をつけて、スクリプトではその名前を指定してください。

          FileMaker Pro 15 ヘルプ : ポータルの更新

           

          inspector@x1.png

          script@x1.png

          • 2. Re: ポータル内のレコードが更新されない
            User28136

            ご回答ありがとうございます。

             

            ポータルの更新[オブジェクト名: "portal_アイテム"]

             

            による指定を試してみましたが、やはりポータルの更新ができない状態です。

            • 3. Re: ポータル内のレコードが更新されない
              user14047

              どういう状態を目指しているのかわかりませんが、意図した動きのように見えます。

              動画とその時のファイルを添付してみましたので確認してみてください。

              • 4. Re: ポータル内のレコードが更新されない
                realworks

                ウインドウ内容の再表示の前に「レコード/検索条件確定」をいれてみたらどうでしょう?

                • 5. Re: ポータル内のレコードが更新されない
                  User28136

                  ありがとうございます。思い通りに動いているのを確認しました。

                   

                  ですが、なぜか自分の環境下で同じ記述をしても挙動が改善されません

                  こちらの環境がいけないということでしょうか?

                   

                  動かしている環境は

                  Filemaker 15.0.1.119

                  OS X El Capitan 10.11.6

                  です。

                  • 6. Re: ポータル内のレコードが更新されない
                    User28136

                    ありがとうございます。無事に再表示ができました。助かりました。

                    • 7. Re: ポータル内のレコードが更新されない
                      user14047

                      原因はそちらでしたか。

                      それでしたら、再表示の前にレコード確定をいれるよりスクリプトの一番最初に確定しておいた方がいいでしょう。

                      そうでないと親テーブルのレコードIDが確定していない状況の時(IDフィールドの自動入力が確定時になっているので新規レコード作成直後は確定されずにいる)、スクリプトの中で ID が取得できずに子テーブルの ID 設定が空になってしまいますから。

                       

                      Re: ポータル内のレコードが更新されない の添付ファイルはそうなっているかと...

                      1 人中 1 人が役に立つと言っています
                      • 8. Re: ポータル内のレコードが更新されない
                        User28136

                        ありがとうございます。

                        確かに、レコードを新規作成した時にポータルにレコードが追加できない状態になっていました。

                        • 9. Re: ポータル内のレコードが更新されない
                          realworks

                          もしよろしければ教えて下さい。

                           

                          恥ずかしながら、

                          ウインドウ内容の再表示の前に「レコード/検索条件確定」をいれてみたら

                          というのは、漠然と、別ウインドウで新しく作成された子レコードが

                          確定されていないからなのだろうかと思っていました。

                          (というより、なんとなく確定したらできるのかな、ぐらいのイメージです)

                          なので、ウインドウを閉じた後で再表示の前に入れるべきなのかと思っていたわけです。

                           

                          しかし、確定を実行しているのは親レコードなので、親レコードを確定させていることになるのですね。

                           

                          ということは、

                          「ポータル内の行の削除」を実行すると、親レコードが確定されていない状況になり、

                          それに対して、新たに追加されたポータル行が表示されない、ということなのでしょうか?

                           

                          • 10. Re: ポータル内のレコードが更新されない
                            user14047

                            ウインドウを閉じる、レコードを移動するの動作でもレコードは確定されます。

                            また、親テーブルのレイアウト上でポータル内のレコードを編集した場合、親テーブルを確定された段階でポータル内のすべての関連レコードが一括して確定されます。

                            逆に、(確定されていない段階の)親テーブルのレコードを復帰させれば、すべての関連レコードが一括して復帰されますので、トランザクション処理をしたい時にポータル内の行へ移動の Loop を回して処理をすることがあります。

                             

                            話が逸れてしまいましたが、元のファイルの場合は、キーとなるIDフィールドが確定時にシリアルがふられるようになっていたので、確定されていない段階ではIDがまだ空のままなので、スクリプトからIDが拾えなかっただけかと思います。

                            • 11. Re: ポータル内のレコードが更新されない
                              User28136

                              すでに確定しているレコードで思考錯誤していたので、IDに関しては別の問題だと認識しています。

                               

                              本来であればポータルの更新で問題が解決するということをuser14047さんより修正していただいたファイルで確認しています。

                               

                              ただ、こちらでポータルの名前を設定し、ポータルの更新に設定しましたが、ポータルが更新できないという状態でした。

                               

                              user14047さんにErrorの場合の処理を書いてもらっていたので、何かエラーがあれば反応するはずなのですが、何も反応がない状態でした。

                               

                              realworksさんの質問は、ポータル行の削除後にポータルの更新等のアクションを起こさないと追加した子レコードが表示されない理由かと思います。

                              • 12. Re: ポータル内のレコードが更新されない
                                user14047

                                ポータル内のレコードの削除後にポータルの内容が更新されないのであれば、ボタンに単一ステップ[ポータル内の行を削除] を割り当てるのではなく、作成時と同じように、[ポータルの更新] を含んだスクリプトを作成して、そのスクリプトを割り当てた方が確実かと思っています。

                                 

                                [ポータルの更新] が効かない状況というのは経験したことがないので、どういったときに反応がないのかはわかりません。すいません。

                                もし [ポータルの更新] が効かない時の手順が再現できるのであれば、不具合の報告 に投稿されると皆が幸せになれるかと思います。

                                • 13. Re: ポータル内のレコードが更新されない
                                  User28136

                                  申し訳ありません。

                                   

                                  本来であればポータルの更新で問題が解決するということをuser14047さんより修正していただいたファイルで確認しています。

                                   

                                   

                                  と答えてしまいましたが、user14047さんの修正してくださったスクリプトの先頭にレコード/検索条件の確定が入っていることに気がついていませんでした。

                                   

                                  なので、ポータルの更新での解決ができません。

                                   

                                  > 親テーブルのレコードを復帰させれば、すべての関連レコードが一括して復帰されますので、トランザクション処理をしたい時にポータル内の行へ移動の Loop を回して処理をすることがあります。

                                   

                                  と答えられていましたが、ポータル行の削除の後にレコードの復帰をかけると削除したレコードが復帰できるようなので、レコードがトランザクション中で新たなレコードを取得しない状態だと考えます。

                                   

                                  なので仕様だと思います。

                                  • 14. Re: ポータル内のレコードが更新されない
                                    fukky

                                    >ポータル行の削除をポータル内のボタンで行った後に、ポータルの外のボタンでポータルのレコードを追加するとレコードの更新ができません。

                                    ポータル行の削除を行った場合にレコードは編集状態になります。
                                    そのまま新規ウインドウを開いて編集すると元のウインドウでは編集中のままです。

                                     

                                    親レコードと子レコードは新規レコード作成では無関係な状態のためエラーは発生しません。

                                    親レコードを確定されると知らないうちに子どもができていたた状態となりポータルに表示されます。

                                     

                                    新規ウインドウを開く前に[レコード/検索条件の確定]で[ポータル行の削除]で発生した変更を確定させるだけで一応の解決には至るでしょう。

                                     

                                    ※厳密に処理したければ新規ウインドウを用いずにトランザクションを保ったまま関連レコードを作成するのがベストプラクティスです。

                                    1 2 前へ 次へ