繰り返しコンテナの参照連動

最終更新日: 2022年5月18日
R8 | R9

見積書モデルを用意しました。これを参照連動の元とします。

見積書モデル

この見積書モデルを参照する、注文書モデルを用意しました。見積書を選択しています。

注文書モデル

紐づく(見積書)モデルが確定されると、繰り返しコンテナ全体が参照連動されます。

繰り返しコンテナの参照連動

この動作イメージを図4に示します。

動作イメージ

定義方法

  1. 4つのモデルを定義しています。
    「顧客」と「商品」は見積書モデルで参照します。(説明は省略します)
    顧客・商品・見積書・注文書モデル
  2. 見積書モデルの定義を示します。「内訳」は繰り返しコンテナになっています。
    見積書モデルの定義
  3. 注文書モデルの定義を示します。ここで「明細」モデルに含まれる「商品名」「価格」「個数」「小計」項目を参照連動としています。
    注文書モデルの定義

    「見積書」項目は見積書モデルの「件名」項目をリストボックス形式で参照します。

    見積書項目の参照設定
  4. 繰り返しコンテナ内の項目「商品名」は「見積書」項目が選択されたら、見積書モデル内の商品名項目を参照連動するように設定します。
    商品名項目の参照連動の設定
  5. 同じように「価格」「個数」「小計」項目もそれぞれ参照連動の設定を行います。
    価格項目の参照連動の設定
    個数項目の参照連動の設定
    小計項目の参照連動の設定

    ワンポイント:画面再描画の設定

    本機能を利用する場合、以下のいずれかの設定を必ず入れるようにしてください。画面の再描画によって参照連動を行わせる必要があるためです。

    • 繰り返しコンテナ内に少なくとも一つのリストボックス/ラジオボタン/チェックボックス項目を含める
    • 連動元のモデルを選択する(モデル参照)項目に「入力制御 > 値変更時に画面を再描画する」を有効にする

    今回のケースでは、繰り返しコンテナ内にリストボックス項目が含まれるため、このルールを満たしています。

参照連動を自モデル保存する

参照連動項目を自モデル保存とすることで、参照後に値を変更して保存することもできます。 書き換えた値は、参照元とは別個に管理されます。

図3のアプリケーションを、参照連動自モデル保存に変更した例を示します。

値を変更して保存することができます。下図は「商品」と「価格」を自モデル保存とした例です。
その後、紐づく見積書モデル側の明細を変更しても、この注文書モデルには影響はありません。

参照連動自モデル保存の例
繰り返しコンテナ全体が参照連動されたあと、「商品名」を変更しても「価格」は変わりません。「価格」はあくまでも「見積書」の参照連動であり、「商品名」と紐づいているわけではありません。

定義方法

自モデル保存する項目は「値をデータベースに保存する」を有効にします。 また、「読込専用」の設定を "解除" します。

値をデータベースに保存する
読込専用の設定を解除する

仕様・制約

参照連動の保存を行う場合、次のルールが適用されます。

  • コンテナ初期数はゼロに設定されます。
  • コンテナの追加、削除、挿入処理は行えません。

条件によって参照連動するデータを絞り込む

参照元となるモデルの繰り返しコンテナに対して、条件式を指定して(参照連動するデータを)絞込むことができます。

「価格が100(円)より大きい場合のみ参照連動する」という条件を付与した例を示します。 見積書には3件の明細を含めています。

見積書

注文書の新規登録画面では2件の明細が参照連動されました。

注文書

定義方法

「入力制御 > 繰り返し > コンテナの参照連動時の表示条件」に式を記述します。
この式がtrueとなった行のみが参照連動されます。

ここでは式を次のように設定しています。

${rcont/rprice}>100
コンテナの参照連動時の表示条件の設定

仕様

  • 繰り返しコンテナID項目の次の項目は、参照連動項目となっている必要があります。そうでない場合、式は無視されます。(上の例では "No" の次の項目 "商品名" が参照連動項目となっているため、この設定は有効となっています。)

式による連動

表示条件の式に繰り返しコンテナ外にあるモデル参照項目が含まれていた場合、その項目の値が変更されたタイミングで画面再描画が行われると、変更された値を反映した参照連動の絞り込みが行われます。

繰り返しコンテナ meisai の「コンテナの参照連動時の表示条件」に次の式を設定したとします。

${meisai/seibetsu_no#id}==${seibetsu_list#id}

ここではコンテナ内項目 meisai/seibetsu_no の ID部と、コンテナ外項目 seibetsu_list の ID 部が一致するもので絞り込むとしており、両方ともモデル参照項目です。また seibetsu_list 項目は "値変更時に画面を再描画する" を有効としています。

このとき Wagby は式を解析し、seibetsu_list 項目が変更(かつ再描画)されたときも繰り返しコンテナ meisai の参照連動を行うようになります。そのため、コンテナ外項目 seibetsu_list の選択肢を変更すると、繰り返しコンテナ参照連動の内容が書き換わるという動きを実現できます。

トラブルシューティング

繰り返しコンテナの参照連動が動作しない

画面再描画の設定ルールを満たしているかどうかをご確認ください。

先頭の行だけが参照連動されない

次の例をもとに説明します。

想定するモデル構成

  • 親子関係のモデルがあり、親モデルのコンテナを子モデルで参照連動する。
  • 親モデルの繰り返しコンテナ内にファイル型項目がある。
  • 親モデルで繰り返しコンテナ内のファイル型項目が変更されても、子モデルでは元のファイルを維持させるために、参照連動した(繰り返しコンテナ内の)ファイル型項目はデータベースに保存する設定にする。

処理の流れ

  1. 親モデルの登録画面を開く。
  2. 繰り返しコンテナのデータが1行存在し、ファイル型項目が空(添付ファイルなし)の状態で親のデータを保存する。
  3. 続いて、子モデル登録画面を開く。
  4. そのまま保存する。保存されたデータは親モデルのコンテナを参照連動しているため、添付ファイルなしの1レコードのみが保存される。
  5. 親モデルの更新画面を開く。繰り返しコンテナの1行目に複数ファイルをドラッグ&ドロップで登録し、保存する。例えば4つのファイルをドラッグ&ドロップすると、展開されて4行の繰り返しコンテナデータとなって保存される。
  6. 子モデルの詳細画面を開く。子モデルの繰り返しコンテナは親モデルのコンテナを参照連動するために4行のデータが表示される。ただし1行目だけは手順4の時点で添付ファイルなしのデータが保存されていたため、これが優先され、1行目のデータのみ添付ファイルなしの状態で表示される。2-4行目は親モデルの添付ファイルが表示される。1行目だけ表示されないため、動作不良のように見える。

繰り返しコンテナの参照連動、かつ、繰り返しコンテナ内に自モデル保存の項目が存在する場合は、この処理は仕様となります。子モデルで一度参照連動した後に親モデルで添付ファイルが追加されても、子モデルのデータには反映されません。

対策

子モデルの登録時のスクリプトで対応する方法があります。

スクリプトでは親の繰り返しコンテナデータを取得し、子の繰り返しコンテナデータとして転記させます。このとき子モデルに既存のコンテナデータが存在していても、これを無視して上書きするようにする、というものです。

この処理を親モデルの同時更新画面からの登録時のみに実行するようにするという制御も考えられます。SCREENID関数を利用して判別させることができます。