In the last chapter, we built the ticket list — data is now visible. But how do users submit new tickets? In this chapter, we'll solve the "entering data" problem — building Form blocks, configuring field linkage, and even tracking every change made to a ticket.
We want to add a "New" button to the ticket list page. Clicking it will pop up a form for users to fill in a ticket.

Click the "Add new" button to open the popup.
In the popup, click "Add block" -> Data blocks -> Form (Add new).
Select "Current collection". The popup already knows which collection it's associated with — no need to specify manually.

In the form, click "Fields" and check the following fields:
| Field | Configuration Notes |
|---|---|
| Title | Required (auto-inherited) |
| Description | Rich text input |
| Status | Dropdown select (we'll set a default via linkage rules later) |
| Priority | Dropdown select |
| Category | A relation field that automatically appears as a dropdown selector |
| Submitter | Relation field (we'll set a default via linkage rules later) |
| Assignee | Relation field |

You'll notice a red asterisk * next to "Title" automatically — because we set it as required when creating the field in Chapter 2. Forms automatically inherit required rules from the collection's field settings; no extra configuration needed.

Tip: If a field isn't required at the collection level but you want it required in this specific form, you can set it individually in the field's settings.



Some fields should be auto-filled (e.g., Status defaults to "Pending"), while others need to change dynamically based on conditions (e.g., urgent tickets require a description). The default value feature in 2.0 is still evolving, so in this tutorial we'll use Linkage Rules for both default values and field linkage.

Let's first set default values for "Status" and "Submitter":

Important notes on setting values: Always select "Current form" as the data source first. For relation fields (like Category, Submitter, Assignee — any many-to-one field), you must select the object property itself, not its expanded sub-fields.
When selecting variables (like "Current user"), first single-click to select it, then double-click to fill it into the selection bar.



If you want a field to be non-editable by the submitter (e.g., Status), you can set its "Display mode" to "Readonly" in the field settings.

Three display modes: Editable, Readonly (editing disabled but field appearance preserved), and Easy-reading (displays as plain text only).

Next, add a conditional linkage rule: when a user selects Priority as "Urgent", the Description field becomes required, reminding the submitter to clearly describe the situation.



Now test it: select Priority as "Urgent" and a red asterisk * will appear next to the Description field, indicating it's required. Select any other priority and it reverts to optional.

Finally, apply what we've learned and adjust the layout a bit.

What else can linkage rules do? Beyond setting defaults and controlling required status, they can also show/hide fields and dynamically assign values. For example: when Status is "Closed", hide the Assignee field. We'll explore more in later chapters as we encounter these scenarios.
In the last chapter, we added a "View" button to table rows that opens a Drawer. Now let's configure what goes inside the Drawer.

| Area | Fields |
|---|---|
| Top | Title, Status (tag style) |
| Main body | Description (rich text area) |
| Side info | Category name, Priority, Submitter, Assignee, Created at |
How to add a large title? Select Fields > Markdown > Edit Markdown > in the editing area, select a variable > Current record > Title. This dynamically inserts the record's title into a Markdown block. Delete the default text and use Markdown syntax to make it a heading (add ## followed by a space before it).


Now the original Title field can be removed. Adjust the details layout:

Tip: You can drag multiple fields onto the same row for a more compact and visually appealing layout.

Click the "Edit" button and a new popup opens — it needs an edit form inside. The edit form has nearly the same fields as the "Add new" form. Do we really have to check all those fields again from scratch?
Nope. Let's save the "Add new" form as a template first, then the edit form can reference it directly.
Step 1: Go back to the "Add new" form and save as template



Since our ticket form isn't complex, "Reference" is simpler to maintain. If you choose "Duplicate", each form gets an independent copy that can be modified separately.
Step 2: Reference the template in the edit popup
You might think: just use "Add block -> Other blocks -> Block templates" to create the form, right? Try it and you'll find — this creates an "Add new" form, and the fields aren't actually populated. This is a common pitfall.

The correct approach:


Want to add a field later? Just modify the template once — both the "Add new" and edit forms update automatically.
Besides popup editing, NocoBase also supports quick editing directly in the table — no popups needed, just hover and click.
There are two places to enable it:

Once enabled, hovering over a table cell reveals a small pencil icon. Click it to open an inline editor for that field — changes save automatically.

When is this useful? Quick editing is perfect for batch updates like changing status or assignee. For example, an admin browsing the ticket list can click the "Status" column to quickly change a ticket from "Pending" to "In Progress" without opening each one individually.
One of the most important aspects of a ticket system: who changed what and when must be traceable. NocoBase has a built-in "Record History" plugin that automatically logs every data change.


Recommendation: You don't need to track every field. Fields like ID and Created at that are never manually changed don't need to be tracked. Only record changes to fields that matter for the business.




This way, even if a ticket passes through multiple people, every change is crystal clear.
In this chapter, we completed the full data lifecycle:
From "visible" to "enterable" to "traceable" — our ticket system now has basic usability.