Patch Every SharePoint Column Type in Power Apps: A Complete Reference
A practical guide with ready-to-use Patch function patterns for all major SharePoint column types, including single and multiple lines of text, choices, people, lookups, hyperlinks, images, currency, yes/no, task outcome, and more.
Whether you are building a project tracker, a leave request app, or a custom ticket system, the Patch function in Power Apps is the most reliable way to create and update items in SharePoint. But each SharePoint column type expects data in a slightly different shape. This reference brings together examples for all major column types, using a consistent sample list.
Sample List Used in the Examples
All code blocks below are written for a SharePoint list called ProjectTracker. Below are the columns we will be patching:
- ProjectName – Single line of text
- Description – Multiple lines of text
- Budget – Currency
- StartDate – Date and Time
- TargetDate – Date only
- Priority – Choice (single select: High, Medium, Low)
- Tags – Choice (multi-select: Design, Development, Testing, Security)
- Lead – Person or group (single)
- TeamMembers – Person or group (multiple)
- ParentProject – Lookup to a Projects list (get Title)
- ProjectURL – Hyperlink
- ProjectImage – Image
- IsActive – Yes/No
- TaskOutcome – Task Outcome (from a Task list)
Calculated columns, External Data columns, and Location columns cannot be modified using Patch. Those values are derived from formulas or external systems.
General Patch Syntax
Every Patch call follows the same structure:
Patch(DataSource, BaseRecord, ChangeRecord1, ChangeRecord2, ...)
- DataSource – name of your SharePoint list.
- BaseRecord – either
Defaults(DataSource)for a new item, or an existing record to update (e.g.,Gallery1.Selected). - ChangeRecord(s) – one or more records with the columns you want to set.
Now let us see how each column type is handled.
Single and Multiple Lines of Text
ProjectName – a plain text column. Pass a string directly.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{ProjectName: "Mobile App v2"}
)Description – for a multi-line text column, the same pattern works. Even if the column is configured as “Enhanced rich text”, plain text will be accepted.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{Description: "This project modernizes the onboarding experience."}
)Number and Currency
Both Number and Currency columns expect a numeric value.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{Budget: 42500}
)For a plain number column the code is identical; just change the column name and value type.
Date and Time
StartDate (Date and Time) – use Now(), Today(), or a date/time literal.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{StartDate: Now()}
)TargetDate (Date only) – it is safer to use DateValue() or Date() to avoid time drift.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{TargetDate: DateValue("2026-08-15")}
)When working with Date & Time columns, be aware that Power Apps sends UTC values. Always verify the displayed time after the patch.
Choice (Single and Multi‑Select)
Priority (single choice) – pass the exact choice string as it appears in the column settings.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{Priority: "High"}
)Tags (multi-choice) – pass an array of strings. SharePoint expects a JSON array, but Power Apps handles the conversion automatically.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{Tags: ["Design", "Security"]}
)Person or Group (Single and Multi‑Select)
Lead (single person) – provide an object with Claims, DisplayName, and Email. The easiest way is to pass the whole record from a People Picker control or from Office365Users.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{Lead: {
Claims: "i:0#.f|membership|jane@contoso.com",
DisplayName: "Jane Doe",
Email: "jane@contoso.com"
}}
)If you are using a People Picker control named PeoplePicker1, simply use its .Selected property.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{Lead: PeoplePicker1.Selected}
)TeamMembers (multiple people) – you must pass a table of person objects. Use the Table() function to build the list.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{TeamMembers: Table(
{Claims: "i:0#.f|membership|bob@contoso.com", DisplayName: "Bob Smith", Email: "bob@contoso.com"},
{Claims: "i:0#.f|membership|alice@contoso.com", DisplayName: "Alice Wu", Email: "alice@contoso.com"}
)}
)Lookup
ParentProject – a lookup column that pulls the Title from the Projects list. The safest method is to set the ID field (usually ParentProjectId) rather than the lookup display field.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{ParentProjectId: 3}
)If you also want to specify the display value, pass a nested record.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{ParentProject: {Id: 3, Title: "Project Omega"}}
)Hyperlink
ProjectURL – this column is a record with two fields: Url and Description.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{ProjectURL: {
Url: "https://powerapps.microsoft.com",
Description: "Project Documentation"
}}
)Image
ProjectImage – an image column cannot be patched with a binary stream. Instead, you must provide information about an image that already exists in SharePoint. Use the RelativeUri, FileName, and optionally Id.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{ProjectImage: {
RelativeUri: "/sites/ProjectTracker/ProjectTracker/attachments/logo.png",
FileName: "logo.png",
Id: 1
}}
)For a brand new image, you usually create the item first and then upload the file using Patch on the image column or a separate file upload flow.
Yes/No
IsActive – a boolean column is patched with the true or false value.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{IsActive: true}
)Task Outcome
TaskOutcome – this column type is common in SharePoint Task lists. The valid strings are “Not Started”, “In Progress”, “Completed”, “Waiting on someone else”, and “Deferred”.
Patch(
ProjectTracker,
Defaults(ProjectTracker),
{TaskOutcome: "In Progress"}
)If you use a choice column manually set with those five values, the same code works. For the official Task Outcome column, the values are predetermined by SharePoint.
Security and Performance Considerations
- Permissions – Patch respects the user’s SharePoint edit rights. If the user can modify the item through the SharePoint UI, they can modify it through Patch.
- Delegation – Patch itself is not a delegable function, but it operates on individual records. If you first retrieve a record (e.g.,
LookUporFirstN(Filter(...))), ensure that retrieval uses delegable operators to avoid hitting the 500 or 2000 record limit. - Batching – Avoid chaining many Patch calls in a single
ForAll. If you must process multiple items, consider a Power Automate flow or a single Patch with multiple change records (works only for updating a single item).
Common Mistakes
- Using the display name instead of the internal name – For example, a person column might be called
Leadin the UI butLeadIdis the relationship column. Power Apps usually resolves the display name, but it is safer to confirm the internal name from the advanced pane. - Forgetting Claims in a person object – Missing
Claimscan cause the patch to fail silently. - Patching a lookup with the wrong ID – The ID must exist in the related list, otherwise the patch returns an error.
- Using
DateValuefor a DateTime column –DateValuereturns a date only. UseDateTimeValueif you need the time component. - Confusing single‑choice and multi‑choice – Always verify the column’s “Allow multiple selections” setting. A single‑choice expects a string; multi‑choice expects an array.
Final Recommendation
Start with simple columns (text, number, yes/no) to confirm your data source connection is correct. Then add more complex types one at a time. Keep the internal column names at hand and test each Patch with a single item before rolling it out to your app. By understanding the exact data shape each column expects, you can confidently handle any SharePoint list from Power Apps.
References
- Original idea: Matthew Devaney’s Power Apps Patch Function Examples
- Microsoft Learn: Patch function in Power Apps (search for latest docs)
- Microsoft Learn: SharePoint column types in Power Apps (refer to official list)
Create a professional signature popup using the Pen Input control and save the result to a SharePoint document library with Power Automate.
Practical techniques for building collections that exceed the standard delegation threshold, including concurrent batch loading, dynamic filtering with ForAll, returning large datasets from Power Automate, and importing static Excel data.
Eliminate the login requirement for new team members: use a Power Automate flow to force-sync users and update the Dataverse team when they are added to an Entra security group.