Thursday, March 26, 2026

Update SharePoint List Columns Without Touching Mandatory Fields in Power Automate

Update SharePoint List Columns Without Touching Mandatory Fields in Power Automate

The Problem

If you've ever tried to update a single column in a SharePoint list using Power Automate's standard "Update item" action, you know the frustration — it demands values for every mandatory column, even when you only want to change one field.

There's a cleaner way.


The Solution — Send an HTTP Request to SharePoint (MERGE)

Instead of using the Update item action, use "Send an HTTP request to SharePoint" in Power Automate. This lets you send only the columns you want to update — nothing more.

Action Setup

Site Address : Your SharePoint site URL
Method       : POST
Uri          : _api/web/lists/getbytitle('YourListName')/items(<ItemID>)

Headers:
  Content-Type  →  application/json;odata=verbose
  IF-MATCH      →  *
  X-HTTP-Method →  MERGE
⚠️ Use POST as the method (not PATCH). SharePoint tunnels the MERGE operation over POST via the X-HTTP-Method header.

Column-by-Column Syntax Reference

All examples below use the same action setup above. Only the Body changes per column type.


1. Single Line of Text

{
  "__metadata": { "type": "SP.Data.YourListNameListItem" },
  "Title": "Updated value"
}

2. Multi-line Text (Plain Text)

{
  "__metadata": { "type": "SP.Data.YourListNameListItem" },
  "Description": "Line one\nLine two"
}

3. Number

{
  "__metadata": { "type": "SP.Data.YourListNameListItem" },
  "Quantity": 150
}

4. Currency

{
  "__metadata": { "type": "SP.Data.YourListNameListItem" },
  "Budget": 15000.50
}
Currency uses the same plain numeric format — no currency symbol or formatting needed.

5. Yes/No (Boolean)

{
  "__metadata": { "type": "SP.Data.YourListNameListItem" },
  "IsActive": true
}

6. Date / Date & Time

{
  "__metadata": { "type": "SP.Data.YourListNameListItem" },
  "DueDate": "2026-04-30T00:00:00Z"
}
Always use ISO 8601 format in UTC. For date-only columns, T00:00:00Z is safe.

7. Choice (Single Select)

{
  "__metadata": { "type": "SP.Data.YourListNameListItem" },
  "Status": "Approved"
}
The value must match the choice label exactly — it is case-sensitive.

8. Choice (Multi-Select)

{
  "__metadata": { "type": "SP.Data.YourListNameListItem" },
  "Tags": {
    "__metadata": { "type": "Collection(Edm.String)" },
    "results": ["Option1", "Option2"]
  }
}

9. Lookup (Single)

{
  "__metadata": { "type": "SP.Data.YourListNameListItem" },
  "ProjectId": 5
}
Note the Id suffix on the internal field name. The value is the numeric ID of the target list item — not the display title.

10. Lookup (Multi-Value)

{
  "__metadata": { "type": "SP.Data.YourListNameListItem" },
  "ProjectId": {
    "__metadata": { "type": "Collection(Edm.Int32)" },
    "results": [5, 12]
  }
}

11. Person or Group — User Column (Single)

{
  "__metadata": { "type": "SP.Data.YourListNameListItem" },
  "AssignedToId": 42
}
Like Lookup columns, Person columns use the Id suffix and require the user's SharePoint numeric ID — not the email or display name.

To get the user's numeric ID dynamically in your flow, call:

_api/web/siteusers?$filter=Email eq 'user@domain.com'&$select=Id

Then use the Id value returned in the body.


12. Person or Group — User Column (Multi-Value)

{
  "__metadata": { "type": "SP.Data.YourListNameListItem" },
  "AssignedToId": {
    "__metadata": { "type": "Collection(Edm.Int32)" },
    "results": [42, 75]
  }
}

13. Hyperlink / Picture

{
  "__metadata": { "type": "SP.Data.YourListNameListItem" },
  "ProjectLink": {
    "__metadata": { "type": "SP.FieldUrlValue" },
    "Url": "https://example.com",
    "Description": "Project Site"
  }
}

14. Managed Metadata (Taxonomy)

{
  "__metadata": { "type": "SP.Data.YourListNameListItem" },
  "DepartmentId": {
    "__metadata": { "type": "SP.Taxonomy.TaxonomyFieldValue" },
    "Label": "Finance",
    "TermGuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "WssId": -1
  }
}
WssId is always -1 for write operations. The TermGuid comes from the Term Store in SharePoint Admin.

Fix the eTag Conflict Error

SharePoint uses optimistic concurrency and will throw an eTag conflict error if you skip the IF-MATCH header. Fix it by adding a wildcard value to bypass the version check:

IF-MATCH  →  *

Column Type Quick Reference

Column TypeField Name PatternValue Format
Single line textFieldName"string"
Multi-line textFieldName"string"
NumberFieldName123
CurrencyFieldName123.45
Yes/NoFieldNametrue / false
Date / DateTimeFieldName"2026-04-30T00:00:00Z"
Choice (single)FieldName"Label" (case-sensitive)
Choice (multi)FieldName{ "results": ["A", "B"] }
Lookup (single)FieldNameId5
Lookup (multi)FieldNameId{ "results": [5, 12] }
Person (single)FieldNameId42 (SP numeric user ID)
Person (multi)FieldNameId{ "results": [42, 75] }
HyperlinkFieldName{ "Url": "...", "Description": "..." }
Managed MetadataFieldNameId{ "Label": "...", "TermGuid": "...", "WssId": -1 }

Why This Approach Beats "Update Item"

Standard Update ItemHTTP Request (MERGE)
Requires all mandatory fieldsSend only what you need
Needs a "Get item" call firstSingle action
Hard to maintain as list growsClean, minimal payload
Brittle when schema changesIsolated field updates

Quick Tip — Get the Correct __metadata Type

To get the exact __metadata type value for your list, run this URL in your browser:

https://yourtenant.sharepoint.com/sites/yoursite/_api/web/lists/getbytitle('YourListName')?$select=ListItemEntityTypeFullName

Summary

Stop wrestling with mandatory fields. Use "Send an HTTP request to SharePoint", set IF-MATCH: *, use X-HTTP-Method: MERGE, and pass only the columns you need. The key rules to remember:

  • Lookup, Person, and Managed Metadata columns use the Id suffix on the internal field name
  • Multi-value columns (lookup, person, multi-choice) always use the results array pattern
  • Person columns require the SharePoint numeric user ID — use the siteusers REST API to resolve it from an email
  • Dates must be UTC ISO 8601 format
  • Choice values are case-sensitive — match the label exactly

No comments:

Post a Comment

Featured Post

Managing All Group Types with CRUD Operations

Managing All Group Types with CRUD Operations Introduction Managing groups in Microsoft 365 is a routine task for administrators and d...

Popular posts