14 返信 最新の回答 日時: Jul 20, 2017 11:22 PM ユーザー:mddld

    レコードの退避と復帰

    mddld

      いつもお世話になっております。

       

      既存の伝票(ヘッダと明細)を編集するといった場合、編集した内容をキャンセルして別画面に戻るといった動作をさせたいと考えています。

       

      考えている処理としては、

      1.編集する前のレコードの値を戻すための退避用テーブルを用意し、IDをキーにしてルックアップで値をコピー

      2.編集をキャンセルされた場合、退避用テーブルから値を戻す

       

      時間がないため、レコード確定をキャンセルする方法ではなく、退避用テーブルを用意しようと考えました。

      1.まではいいのですが、2.で値を戻すときの方法がわかりません。

      わからないというか、これでいいのかな↓、といったところです。

       

      IDをキーとして持っているので、編集されたレコードをIDで検索して、退避用テーブルのレコードからフィールドの値を上書きすることしか思いつかないのですが、なんとなく効率的ではない気がしています。

       

      他にいい方法はないでしょうか。

       

      どなたかお知恵をお貸しください。よろしくお願い致します。

        • 1. Re: レコードの退避と復帰
          fukky

          時間がないため、レコード確定をキャンセルする方法ではなく、退避用テーブルを用意しようと考えました。

          時間がないのでレコード確定をキャンセルする方法がNGという理由は何でしょうか?

           

          退避用テーブルを用意して書き戻しの処理を書くより、
          必要な時だけレコードを確定して、編集キャンセルでレコードを復帰する処理のほうが短期間で作れると思いますよ。


          まずは処理が必要なデータベースの構造をもう少し詳しく書かれては如何でしょう。

          • 2. Re: レコードの退避と復帰
            shin

            逆に考えた方がシンプルでは。

            新規データは、グローバルフィールドなどで作ったエリアで入力、OK ならば既存のデータを上書きします。

            • 3. Re: レコードの退避と復帰
              mddld

              fukky様、shin様、返信ありがとうございます。

               

              テーブルの構造ですが、伝票のテーブルをヘッダと明細に分けて作成しています。

              ヘッダをフォーム形式のレイアウトで用意し、ポータルで明細を作成するかたちをとっています。

               

              ヘッダ、明細のフィールドには、計算式自動入力で値が入るフィールドが複数あります。

              金額計算も行なうため、明細のフィールドには計算フィールド、集計フィールドがあります。

              項目数も多いです。ヘッダと明細を合わせて110フィールドあります。

               

              レイアウトは、新規作成する場合と、編集を行う場合と2パターンで使用しています。

              新規作成するパターンでは、登録せずにキャンセルする場合、レコードを削除しています。

               

              躓いているのは編集を行なうパターンです。

               

              恐れ入りますが、OnRecordCommitでキャンセルを行なう具体的な方法と、グローバルフィールドを使用する方法をご教示いただくことは可能でしょうか。

              • 4. Re: レコードの退避と復帰
                fukky

                ヘッダ・明細の詳細な構造を書かれては?

                「ヘッダ」テーブルに対して「明細」が1対多になっているように読めますが。

                 

                その規模だとレコード確定のキャンセルが良いと思いますね。
                関連レコード(明細)への編集も含めて無かったことにする必要があるのですよね?


                OnRecordCommit トリガスクリプト内で[現在のスクリプト終了]を結果を偽(0/False)にすれば
                確定がキャンセルされてレコード確定ができないレイアウトになります。

                 

                [レコードの変更を自動的に保存する]はオンのままで構いません。

                 

                キャンセル(無かったことにする)場合は[レコード/検索条件の復帰]で編集前に戻ります。
                保存(編集を保存する)場合は[レコード/検索条件の確定]で保存されます。

                 

                OnRecordCommit トリガスクリプトに変数が特定の値の場合は

                [現在のスクリプト終了]の結果を真(1/True)にすれば確定が実行されます。

                 

                「キャンセル」「保存」など分かりやすいボタンにスクリプトを設定し
                キャンセルは復旧、保存は変数の値を設定して確定を行うように組めば良いでしょう。

                 

                スクリプトの具体的な組み方はヘルプで足りるでしょう。

                • 5. Re: レコードの退避と復帰
                  mddld

                  もう一つありました。

                   

                  明細に金額の合計を出す集計フィールドと、消費税の合計を出す集計フィールドを持っています。

                  伝票合計には、税抜の金額合計と消費税合計を加算して表示しているのですが、ポータルの明細で数量を入力しても伝票合計が表示されない現象が起きているので、数量のOnObjectSaveで[レコード確定]スクリプトステップを実行しています。

                  • 6. Re: レコードの退避と復帰
                    fukky

                    明細行入力中にリアルタイムで合計を知る必要性についてユーザヒアリングを行いましょう。
                    必要ならば表示を更新するための方法を考えれば良いですし、不要ならトリガを外すだけです。


                    後出しを重ねられると答えていてもボツ案になる可能性がありますから、
                    まずは現在の仕様を洗い出して書きましょう。

                     

                    どんなフィールドがあってそれぞれのタイプ(特に金額と数量関連の項目について)
                    普通の伝票と一口にいっても普通の定義はありませんから。

                    • 7. Re: レコードの退避と復帰
                      mddld

                      fukky様、返信ありがとうございます。

                      入れ違いになりすみません。

                       

                      具体的な構造ですが、おっしゃる通りヘッダと明細は1対多になっています。

                      リレーションは伝票IDで紐付けており、明細側に「このリレーションシップによる作成を許可する」にチェックを入れています。

                      明細には、数量、単価のフィールドがあり、数量*単価で明細の金額を出しています。

                      数量、単価、金額はそれぞれ数字フィールドで、金額は計算値自動入力で計算結果を入れています。

                      消費税は明細ごとに計算しています。

                       

                      前のレスで、伝票合計が表示されないためにOnObjectSaveで[レコード確定]スクリプトステップを実行していると書きましたが、正確には集計フィールドの消費税合計が表示されない、でした。

                      数量を入力した後、ポータルからフォーカスが外れないと消費税合計が表示されないためにレコード確定をしています。

                       

                      主に入力を行なう項目は以上ですが、他システムと連携をかけるため、フィールド数が多くなっています。

                      • 8. Re: レコードの退避と復帰
                        fukky

                        行き違いになりましたね。

                         

                        合計の表示必要性については下に書いた通りです。

                         

                        金額合計と消費税合計を合算して伝票合計として明細単位では消費税込の金額を持っていないのですね?

                        • 9. Re: レコードの退避と復帰
                          mddld

                          fukky様、何度もすみません(泣

                           

                          明細単位では消費税込みの金額は持っていません。

                           

                          先程書いた、消費税が表示されない現象は、ポータルからフォーカスが外れれば消費税合計が表示されることがわかりましたので、トリガでレコード確定させる必要はないと判断しました。

                          レコード確定以外の方法(フォーカスを外す方法)で、表示を更新させます。

                           

                          ですので、OnRecordCommitを使用した方法をチャレンジしたいと思いますが、、こちらは伝票のヘッダに対して行なうということでよろしかったでしょうか。

                          そうすれば、リレーションで紐付いている明細のレコードも確定されない、という認識であっていますか?

                           

                          明細だけ編集した場合も可能でしょうか。

                          • 10. Re: レコードの退避と復帰
                            fukky

                            ポータルからフォーカスが外れる(何もないところをクリック)=レコードの確定ですorz

                            トリガでキャンセルしていないなら確定によって再計算されています。

                             

                             

                            つまり OnRecordCommit に確定キャンセルを入れた時点で再計算されなくなります。
                            これは仕様なのでどうしようもありません。回避策を講じなければ。

                             

                            ヘッダ・明細が別のレイアウトではないですよね?
                            同じレイアウトにヘッダ(共通項目・伝票情報)と明細がポータルで配置されていると仮定しています。

                            • 11. Re: レコードの退避と復帰
                              mddld

                              fukky様

                              冷静に考えればそうですね、そうですよねo...rz

                               

                              ヘッダと明細は同一レイアウトです。

                               

                              "同じレイアウトにヘッダ(共通項目・伝票情報)と明細がポータルで配置されていると仮定しています。"

                               

                              こちらの認識であっております。

                              • 12. Re: レコードの退避と復帰
                                fukky

                                であれば復帰で関連レコード含めて元に戻せます。

                                 

                                集計フィールドから非保存の計算フィールドでヘッダ側に持てば再計算されます。

                                 

                                サンプル付けますね。
                                即興なので参考程度に。粗はあります。

                                • 13. Re: レコードの退避と復帰
                                  mddld

                                  fukky様!!

                                  ありがとうございます!!

                                   

                                  ヘッダに計算フィールドとは、、感銘を受けました。

                                  集計フィールドと計算フィールドの動作の違いもわかりました。

                                  集計フィールドの仕様を把握しきれていなかったため振り回されてしまった感があります--;

                                   

                                  少々タイトルからそれてしまいましたが、これを参考に組み込んでみたいと思います!

                                  • 14. Re: レコードの退避と復帰
                                    mddld

                                    fukky様のサンプルファイルを参考に組み込み、想定していた動作をさせることができました。

                                    ありがとうございます!

                                     

                                    今回はfukky様の方法で実装しましたが、Shin様が記述してくださった方法も採用することが将来的にありそうです。

                                    とても勉強になりました。

                                     

                                    回答をくださったお二方に感謝致します!