Read-Only Fields in SharePoint Forms with Power Automate Auto-Population
Modern SharePoint list forms are excellent for collecting business data, but they are not always the best place to let users type every value manually. In many real projects, some fields should be controlled by the process instead of by the person filling the form.
Typical examples include:
- requester identity
- submission timestamp
- submitter email
- workflow status
- technical helper flags
The cleanest pattern is to make those fields effectively read-only in the form experience and let Power Automate populate them after the item is created or updated. This aligns well with how SharePoint form visibility and connector-based updates are designed to work.
Introduction
A common mistake in SharePoint solutions is trying to make the default form behave like a full application screen. That usually leads to brittle customization, confusing form rules, and too many process-owned fields exposed to end users.
A better design is to split responsibilities:
- the SharePoint form collects business input
- Power Automate fills system-owned or governance-owned fields
- Power Apps is only introduced when truly advanced UX behavior is required
This article shows a practical and maintainable approach for implementing that pattern in SharePoint Online.
The problem we are solving
Imagine a request list with these columns:
TitleDescriptionCategoryPriorityRequestorSubmittedOnSubmittedByEmailSubmitStatusFlowProcessed
Now imagine the requirement:
- the user must fill
Title,Description,Category, andPriority - the user must not fill
Requestor,SubmittedOn, orSubmittedByEmail - those fields must be controlled automatically
- after submission, some fields should no longer be editable in practice
This is exactly the kind of scenario where native SharePoint forms and Power Automate work very well together. The form can control field visibility, while the flow updates the actual values in the list item.
Understanding “read-only” in the native SharePoint form
In the modern SharePoint form, the most reliable native capability is conditional visibility. Microsoft documents the ability to show or hide fields in list and library forms using conditional formulas.
That means that in many real implementations, “read-only” is best interpreted as one of these practical patterns:
1. Hidden from manual entry
The field exists in the list, but it is removed from the form for normal users.
2. Conditionally visible
The field appears only in specific states, such as draft or review.
3. Flow-controlled
The field is technically part of the item, but the process populates it automatically, not the end user.
This is an important design decision. Instead of fighting the form engine, let the form focus on user-entered data and let automation own the process fields.
Why Power Automate is the right tool for this
Power Automate’s SharePoint connector provides list triggers and update actions specifically for creating and modifying item data. That makes it the natural place to stamp metadata such as:
- requestor
- submission date
- helper flags
- process status
In other words, the form controls experience, while the flow controls data completion. That division is both cleaner and easier to maintain.
Recommended solution architecture
The best production-ready pattern looks like this:
SharePoint form responsibilities
Use the form to:
- collect business input
- simplify the UI
- hide process-owned columns
- conditionally hide fields after submit
Power Automate responsibilities
Use the flow to:
- fill
Requestor - fill
SubmittedOn - fill
SubmittedByEmail - set
Status - stamp helper flags such as
FlowProcessed
Power Apps responsibilities
Only use Power Apps when you need:
- advanced defaults before save
- card-level edit/view control
- richer validation
- a more custom user experience
This layered approach matches Microsoft’s documented capabilities for SharePoint form behavior, SharePoint connector actions, and SharePoint form integration with Power Apps.
Step 1 — Create the right columns
Create or reuse these columns in your list.
Editable business fields
TitleDescriptionCategoryPriority
Process-controlled fields
Requestor— Person or GroupSubmittedOn— Date and TimeSubmittedByEmail— Single line of textSubmit— Yes/NoStatus— ChoiceFlowProcessed— Yes/No
If you want reusability across lists, site columns are supported in SharePoint Online and can be added to lists as needed.
Step 2 — Configure the SharePoint form
Open the list form and use the native Edit columns and conditional formula experience to control field visibility.
Recommended visibility strategy
Hide these fields from normal data entry:
SubmittedOnSubmittedByEmailFlowProcessed
Decide whether to hide Requestor completely or show it only to a restricted audience. In many governance-oriented solutions, hiding it is cleaner because Flow will fill it anyway.
Use conditional formulas for business fields that should disappear after submit.
Example formula: hide after submit
=if([$Submit] == true, 'false', 'true')
This formula means:
- visible when
Submit = false - hidden when
Submit = true
This style matches Microsoft’s supported conditional form visibility model.
Step 3 — Build the first Power Automate flow
Create an Automated cloud flow.
Trigger
When an item is created
Main action
Update item
Use the item ID from the trigger and populate the process-owned fields.
Suggested mapping
SubmittedOn=utcNow()SubmittedByEmail= Created By EmailFlowProcessed=YesStatus=DraftorSubmittedRequestor= creator identity or another mapped user
The SharePoint connector supports this create/update item pattern.
Step 4 — Special note about the Requestor person field
A SharePoint Person field is not the same as a text field. It requires proper user identity handling. Microsoft support discussions around list person fields note that these fields often require identity-aware mapping rather than plain strings, especially in API-driven scenarios.
Because of that, a very practical enterprise pattern is to store both:
Requestoras a real Person fieldSubmittedByEmailas a text snapshot
This gives you:
- a proper people field for SharePoint and Microsoft 365 usage
- a simple text value for reporting, auditing, and troubleshooting
Step 5 — Build the submit flow or submit logic
You may also want a second automation.
Trigger
When an item is created or modified
Condition
Check whether:
Submit = true- and optionally
FlowProcessed = true
Action
Use Update item to:
- set
Status = Submitted - stamp any additional review columns
- optionally notify reviewers or owners
This gives you a clear lifecycle:
- create item
- stamp process values
- submit item
- transition status
Again, this follows the connector-based SharePoint automation model Microsoft documents.
Step 6 — “Read-only after submit” design
This is where many solutions become much cleaner.
Instead of trying to hard-lock every field with complex UI tricks, use a simpler process rule:
Before submit
User can edit:
- Title
- Description
- Category
- Priority
After submit
Hide those fields or selected fields using conditional visibility.
Always automation-owned
Never let users manually control:
- Requestor
- SubmittedOn
- SubmittedByEmail
- FlowProcessed
This creates a form that feels read-only where it matters, even though the implementation is based on visibility and process ownership rather than a deep custom UI.
Step 7 — Example formulas
Hide field after submit
=if([$Submit] == true, 'false', 'true')
Show field only in Draft
=if([$Status] == 'Draft', 'true', 'false')
Show field only for one admin
=if([$CurrentUser.email] == 'admin@contoso.com', 'true', 'false')
These examples follow the documented conditional-formula pattern for SharePoint list forms.
Step 8 — What not to do
Do not use formatting as a data engine
Column and form formatting change how things are displayed, not how values are stored. Microsoft’s formatting guidance treats formatting as presentation, not data mutation.
Do not expose too many technical columns
If the process owns a field, let automation own it fully.
Do not mix audit and business meaning
Author or Created By is an audit field. Requestor is a business field. Keep them separate.
Do not assume a Person field behaves like plain text
Always test person-field updates early, especially in flows and integrations.
Step 9 — When Power Apps becomes the better option
There is a point where native SharePoint forms plus Flow are no longer enough.
Use Power Apps when you need:
- current-user defaults before save
- true client-side card locking
- custom validation rules
- dynamic screen-like behavior
- more advanced layout and UX
Microsoft documents SharePoint form integration with Power Apps for exactly these richer scenarios.
So the decision framework is straightforward:
- Native form + Power Automate for lightweight governance
- Power Apps for advanced UX and stronger form-side control
Final recommendation
For most SharePoint Online request forms, the best long-term design is this:
- keep the SharePoint form simple
- hide or conditionally show system-owned fields
- let Power Automate populate those fields
- use Power Apps only when the business requirement truly needs it
This approach is cleaner, easier to support, and much more aligned with how Microsoft’s modern SharePoint form and connector model actually works.
Final summary table — implementation steps
| Step | Action | Tool |
|---|---|---|
| 1 | Create business fields and process-controlled fields | SharePoint |
| 2 | Hide or conditionally show process-owned columns | SharePoint form |
| 3 | Add formulas based on Submit or Status | SharePoint form |
| 4 | Create a flow triggered on item creation | Power Automate |
| 5 | Populate Requestor, SubmittedOn, and SubmittedByEmail | Power Automate |
| 6 | Create submit/status update logic | Power Automate |
| 7 | Move to Power Apps only if richer UX is needed | Power Apps |
Final summary table — technical guidance
| Topic | Recommended approach | Why |
|---|---|---|
| Read-only fields in native form | Use visibility and process ownership | Most stable native pattern |
| Auto-populated fields | Use Power Automate | Reliable connector-based updates |
| Requestor | Real Person field plus email snapshot | Good balance of usability and reporting |
| Formatting | Treat as presentation only | Does not write data |
| Advanced defaults and lock behavior | Use Power Apps | Better client-side control |
| Reusable metadata | Use site columns when appropriate | Better standardization |
Final summary table — Microsoft references
| Reference area | Purpose |
|---|---|
| SharePoint form conditional visibility | Show or hide fields in native forms |
| SharePoint form configuration | Understand form customization model |
| SharePoint connector for Power Automate | Create and update list items |
| SharePoint person field behavior | Understand identity-aware field handling |
| Power Apps SharePoint form integration | Use when native forms are not enough |
