***

title: Configuring Conditional Subfields in RTF
position: 2
excerpt: >-
Use Update Rules to show, hide, or require fields dynamically based on a
user's earlier selections.
deprecated: false
hidden: false
metadata:
robots: index
-------------

<Callout intent="info">
  **What this covers:** How to configure Update Rules on a Rich Ticket Filing (RTF) form so that fields show, hide, or become required/optional dynamically — based on values the user has already entered.
</Callout>

***

## How It Works

Update Rules evaluate a **condition** against the current field values in the form. When that condition is met (or not met), Moveworks applies a set of **field updates** — toggling visibility or required state — in real time as the user fills out the form.

Each rule has three parts:

| Part                   | Description                                                                                                    |
| ---------------------- | -------------------------------------------------------------------------------------------------------------- |
| **Condition**          | A boolean expression evaluated against the current field values (use the `field_` prefix for field references) |
| **Updates when True**  | What to do to other fields when the condition passes                                                           |
| **Updates when False** | What to do to other fields when the condition fails                                                            |

<Callout intent="note">
  **Supported update types:** Only `REQUIRED` / `NOT REQUIRED` and `VISIBLE` / `NOT VISIBLE` are currently supported for dynamic field updates.
</Callout>

<Callout intent="warning">
  **Rule execution order matters.** Rules are executed in the order they are defined. If two rules target the same field, the last rule wins. Design your rules accordingly.
</Callout>

***

## When to Use Update Rules

Use Update Rules when the answers a user gives earlier in a form should change what fields they see or are required to fill out next. Common scenarios include:

* **Conditional fields:** Only show a "Manager Approval Required" field when the request cost exceeds a threshold
* **Mutually exclusive options:** Show different dropdown options depending on a prior selection (e.g., different software tiers based on department)
* **Progressive disclosure:** Keep the form simple by hiding fields that are irrelevant given the user's earlier choices

### The Key RTF Pattern

RTF Update Rules work by toggling the visibility and required state of **named fields**. This means that to present a user with *different options for the same question*, you need to model it as **two separate fields** — one per option set — and show only the relevant one at a time.

For example: if users in different departments should see different priority options, you'd create `priority_it` and `priority_hr` as separate fields (both labeled "Priority"), and use an Update Rule to show only the one that matches the user's department. The user sees a single "Priority" question; the form handles the branching behind the scenes.

***

## Worked Example: Shirt Order Form

This example walks through a form where a user orders a shirt by selecting a **Size** (Small, Medium, or Large) and a **Color**. The business constraint: **Medium Blue and Large Blue shirts are not available**, so the color options must change based on the size selected.

### The Scenario

The form presents two visible labels — **Shirt Size** and **Shirt Color** — but the color field is actually implemented as **two separate fields** with different option sets:

| Field Name                           | Label       | When to Show                     |
| ------------------------------------ | ----------- | -------------------------------- |
| `size`                               | Shirt Size  | Always                           |
| `color_options_small_size`           | Shirt Color | Only when size = Small           |
| `color_options_medium_or_large_size` | Shirt Color | Only when size = Medium or Large |

This lets you offer Red/Green/Blue for Small, but only Red/Green for Medium and Large.

**The form as the user sees it — initial state:**

![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/f57d1fa8ec438886fc5af4d2d30bef4064f7ec418292c86654ef7812d56d2df8/docs/assets/images/forms/rtf_4e393132_Screenshot_2023-11-07_at_2.57.24_PM.png)

**Depending on which size is selected, the correct color field appears:**

![When Small is selected, the Small color options field appears](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/0329dd27d842eca771d54f4578a071672da83aed123cfbba8e437e7b2d906f11/docs/assets/images/forms/rtf_de6e2ac2_Screenshot_2023-11-07_at_3.01.51_PM.png)
![When Medium or Large is selected, the Medium/Large color options field appears](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/9128df44b145875e90ea444b1633c07e8d4ce230dae7763c164a614d3c970b19/docs/assets/images/forms/rtf_280a09cb_Screenshot_2023-11-07_at_3.02.18_PM.png)

***

## Step 1: Identify Your Field Names

Before opening Moveworks Setup, confirm the exact field names for every field involved — both the field driving the condition and the fields being updated.

**`size` field:**
![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/da442462207e65b43dceb203a3c6f5f7b769afa24d61b5e9733912af5e0b588d/docs/assets/images/forms/rtf_18f65478_Screenshot_2023-11-07_at_3.08.51_PM.png)

**`color_options_small_size` field:**
![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/70597e31a9878a3490b4bd46b2f5af81524f96051eeb23ef9168479f102aeb1e/docs/assets/images/forms/rtf_3cce9fdf_Screenshot_2023-11-07_at_3.12.57_PM.png)

**`color_options_medium_or_large_size` field:**
![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/5903ec2eca8e70f964a95e69bf2627a1e31b25e0545a1f0e144bf64267f83354/docs/assets/images/forms/rtf_5a1422f3_Screenshot_2023-11-07_at_3.14.15_PM.png)

<Callout intent="note">
  The field **label** (what the user sees) and the field **name** (used in rules) are different. Always use the field name — not the label — in your condition expressions and update targets.
</Callout>

***

## Step 2: Define the Logic

Before touching the UI, write out the intended behavior. For this example:

```
if size == 'Small':
    color_options_small_size       → VISIBLE, REQUIRED
    color_options_medium_or_large_size → NOT VISIBLE, NOT REQUIRED

elif size == 'Medium' or size == 'Large':
    color_options_medium_or_large_size → VISIBLE, REQUIRED
    color_options_small_size       → NOT VISIBLE, NOT REQUIRED
```

In Moveworks, this becomes **two Update Rules** — one for each condition branch.

***

## Step 3: Locate the Update Rules Section

1. Navigate to **Moveworks Setup**
2. Search for **Rich Ticket Filing**
3. Select **Edit** on the form you want to configure
4. Scroll down to the **Update Rules** section

![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/fa5b7aa1a9f5b3619693c9f4a793e894f77a2ab911012ff3f1d23b4d60de36ea/docs/assets/images/forms/rtf_update_rules_section.png)

***

## Step 4: Configure Rule 1 — "If Small"

### 4.1 Add the condition

Enter the condition expression. **Always prefix field names with `field_`** when referencing them in expressions.

* **Condition:** `field_size == 'Small'`
* **Policy Field IDs:** add any fields referenced in the condition (e.g., `size`)

![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/513936d815f74ffb348ccbc131215dc73f1c4814ea2a849ef90101a348daa921/docs/assets/images/forms/rtf_cf722335_Screenshot_2023-11-07_at_3.35.13_PM.png)

<Callout intent="warning">
  Always use the `field_` prefix in condition expressions. To reference the `size` field, write `field_size` — not `size`.
</Callout>

### 4.2 Add updates when the condition is True

Each field update entry in the UI has two parts:

* **Policy Field Id** — the field to update, using the `field_` prefix (e.g., `field_color_options_small_size`)
* **Field Action Type** — a radio button selecting which property to change (`Property Required` or `Property Visible`), followed by a checkbox that sets the value: **checked = true, unchecked = false**

When size is Small, add four entries — two per field:

| Policy Field Id                            | Field Action Type | Checkbox                 |
| ------------------------------------------ | ----------------- | ------------------------ |
| `field_color_options_small_size`           | Property Required | Checked (Required)       |
| `field_color_options_small_size`           | Property Visible  | Checked (Visible)        |
| `field_color_options_medium_or_large_size` | Property Required | Unchecked (Not Required) |
| `field_color_options_medium_or_large_size` | Property Visible  | Unchecked (Not Visible)  |

**Setting a field to Required (checkbox checked):**
![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/3a3e6ecad2a761214f8a2e5112c518b3dfc8ea0e8d3a4b49dc43eb73e823bc5e/docs/assets/images/forms/rtf_field_action_required_true.png)

**Setting a field to Not Visible (checkbox unchecked):**
![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/9160567ab433505b898c18a58e9834500bc7579a2df02affee52e4f7d436d6cb/docs/assets/images/forms/rtf_field_action_visible_false.png)

### 4.3 Add updates when the condition is False

When size is not Small, reverse the visibility and required state:

| Policy Field Id                            | Field Action Type | Checkbox                 |
| ------------------------------------------ | ----------------- | ------------------------ |
| `field_color_options_medium_or_large_size` | Property Required | Checked (Required)       |
| `field_color_options_medium_or_large_size` | Property Visible  | Checked (Visible)        |
| `field_color_options_small_size`           | Property Required | Unchecked (Not Required) |
| `field_color_options_small_size`           | Property Visible  | Unchecked (Not Visible)  |

### 4.4 (Optional) Add a description

Adding a description helps future editors understand what the rule is doing at a glance.

![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/735de49783992024294b9d1057bf296eccce140aa912376582d8d63b7505e743/docs/assets/images/forms/rtf_9d3c7fd2_Screenshot_2023-11-07_at_3.42.41_PM.png)

***

## Step 5: Add Rule 2 — "If Medium or Large"

Follow the same steps to create a second rule for the `Medium` and `Large` case:

* **Condition:** `field_size == 'Medium' or field_size == 'Large'`
* **Updates when True:** set `color_options_medium_or_large_size` to `VISIBLE` + `REQUIRED`, set `color_options_small_size` to `NOT VISIBLE` + `NOT REQUIRED`
* **Updates when False:** reverse of the above

<Callout intent="note">
  In this example, Rule 1's "when False" branch already handles the Medium/Large case. Whether you add a second explicit rule or rely on the False branch is a design choice — either works. Adding the explicit rule makes the intent clearer and is recommended for maintainability.
</Callout>

***

## Key Rules to Remember

| Rule                   | Detail                                                                                            |
| ---------------------- | ------------------------------------------------------------------------------------------------- |
| Use `field_` prefix    | All field references in condition expressions must be prefixed with `field_` (e.g., `field_size`) |
| Supported update types | Only `REQUIRED` / `NOT REQUIRED` and `VISIBLE` / `NOT VISIBLE` are supported                      |
| Execution order        | Rules run top-to-bottom; the last rule to target a field wins                                     |
| Field names vs. labels | Use the field's system name, not its display label, in rules                                      |
