Skip to Content
Building formsSections, repeatables and subforms

Sections, repeatables and subforms

Three ways to group fields. They look similar in the builder and behave very differently in the data.

Section

A heading with fields under it. Purely visual: the fields inside a section are ordinary fields on the form, stored under their own keys. Use it to break a long form into parts a person can find their way around.

Home Inspection uses two: Exterior (roof, walls, gutters) and Interior (kitchen, bathrooms, flooring).

Repeatable section

A group the person can add rows of. Timecards has a Daily entries section with a date, cost code, start, finish and hours in each row; a week is five rows.

The rows live inside this record, as a list under the section’s key. In an export the section is one column holding the rows; in a script, rows('entries') returns them; in a calculated field, ROWSUM({entries.hours}) adds them up.

Set a minimum and maximum number of rows in the section’s properties.

A Timecard record on the web, showing the daily entries as a table of rows under the Daily entries heading, with the calculated total hours below.
A repeatable section's rows are part of the record and are shown with it.

Subform

Rows that are real records on another form, each linked to this one as its parent. Home Inspection has a Defects found subform pointing at the Property Defects form: every defect entered during an inspection becomes its own Property Defects record.

That is the difference from a repeatable section, and it is the reason to choose one over the other:

Repeatable sectionSubform
Where the rows liveinside this recordas records on another form
Own permissionsno — part of this recordyes — the child form’s grants
Own status and historynoyes — each row is approved, edited and audited on its own
Can be opened separatelynoyes — a repair crew opens a defect without the inspection
Appear in the child form’s records table—yes

Use a repeatable section when the rows only make sense as part of this record (hours in a week). Use a subform when a row has a life of its own afterwards (a defect somebody else fixes).

A Home Inspection record on the web, with its Defects found subform listing three defect records beneath the inspection's own answers.
Subform rows shown on the parent. Each is also its own record under Property Defects.

Setting one up

  1. Build the child form first (Property Defects), and publish it.
  2. On the parent, add a Subform field and choose the child form.
  3. Optionally set which of the child’s fields are shown in the row list, and a minimum and maximum number of entries.

Somebody filling in the parent can add subform entries even without a Collect grant on the child form. A subform entry is part of the record they are already permitted to create.