繰り返しコンテナ

最終更新日: 2023年6月22日
R8 | R9

繰り返しコンテナを用意した画面を示します。

追加

繰り返しコンテナはグループ(行)単位で追加することができます。「追加」ボタンを押下すると現在の行の下に、追加されます。

繰り返しコンテナの追加ボタンを押下する
行が追加された

挿入

「挿入」ボタンを押下すると、行の挿入を行うことができます。

繰り返しコンテナの挿入ボタンを押下する
行が挿入された

削除

「削除」ボタンを押下すると、行の削除を行うことができます。

繰り返しコンテナの削除ボタンを押下する
行が削除された

ワンポイント

1つのモデルに、複数の「繰り返しコンテナ」を含めることができます。(上限はありません。)

定義方法

はじめに、繰り返しコンテナ型の項目を用意します。

以降、繰り返しコンテナに含まれる項目を連続で定義します。項目IDは次のようになります。

Container ID + "/" + Item ID

なお、繰り返しコンテナ型項目の直下に「繰り返しコンテナID」を必ず用意してください。
今回の例では「No」項目がこれに該当します。

繰り返しコンテナを定義する
  • コンテナ名の右側の項目IDは、他の項目名と重複しないようにしてください。例えばモデル内にすでに "mdate" という項目が定義されていた場合、コンテナ内に "report/mdate" という項目を用意することはできません。
  • 上に関連して、コンテナ名が異なるが、そのあとの名称が同じという設定も行えません。例えば "report1/mdate" と "report2/mdate" は、いずれも "mdate" が重複しているとみなされます。
  • コンテナ内の項目に、再びコンテナを指定することはできません。具体的には "report1/report2/name" といった繰り返しの繰り返しには対応していません。
  • 同様にコンテナ内の要素を繰り返しとすることもできません。具体的には "report/email" を用意した場合、この "email" を繰り返し項目とすることはできません。
  • コンテナ項目は離して定義することはできません。(通常の項目を間に挟んで定義することはできません。)必ず連続して項目を定義してください。

列幅の設定

列の数が多い場合、お使いのブラウザによっては4つの列まで表示し、5つ目以降の列表示が潰れてしまうことがあります。 それぞれの列の幅を指定することで、見栄えを調節してください。

詳細は"レイアウト>繰り返しコンテナ - 列幅の調整"をお読みください。

繰り返しコンテナID

「繰り返しコンテナID」項目は必ず必要です。また、この項目を隠し設定にすることはできません。登録・更新画面で「追加」「削除」ボタンが表示されるためです。また「繰り返しコンテナID」はデータベースに保存する必要があります。データベース非保存とすると正しく動作しません。

コンテナIDの値 "1", "2", ... を隠すことはできます。詳細は"コンテナIDを非表示にする"をお読みください。

仕様・制約

繰り返しコンテナIDはデータベースには "0" から開始される連番として値が保存されています。nullは許容しません。また、飛び番号も認められません。

Wagbyアプリケーションからデータの登録や更新を行う場合はこれらの制約を満たすように内部では動作していますので問題ありません。外部システムから直接、繰り返しコンテナへ値をセットする場合や、スクリプトを用いて繰り返しコンテナを操作する場合は、この制約を満たすようにしてください。

データベースとの関係

繰り返しコンテナは別テーブルに分割されるため、登録できるデータ数の上限はありません。

親子関係との違い

外部キー設定による親子関係も、繰り返しコンテナと同等の動作をします。違いは次の通りです。

  • 親子モデル同時更新機能では子モデル部のページネーションを設定できます。繰り返しコンテナはページネーションがありません。
  • 親子モデル同時更新機能は変更のあったデータのみを処理します。繰り返しコンテナは常にすべてのデータを処理します。
  • 親子モデル関係では1つの親に複数の子を紐づけることができます。繰り返しコンテナは常に1つの親とのみ、紐づきます。

トラブルシューティング

追加や削除ボタンが表示されない

「レイアウト>リポジトリ>レイアウト名」の「表示順」の値を確認してください。
ドラッグ&ドロップでレイアウトを作成したとき、この値が空白で設定される場合があります。
繰り返しコンテナ項目およびコンテナID項目が空白の場合、繰り返しコンテナとして認識されなくなります。

表示順が空白になっている