Update Record
dynamics_crm.update_record
ActionCRM & salesconnection required
Calls the Microsoft Dynamics 365 API with the connection's credentials.
Update the named columns of one row, refusing to create it if the id does not exist.
Connection
- Required
- Yes — the node will not save without one
- Auth type
- OAuth 2.0
- Providers
- Microsoft Dynamics 365
- Secret shape
- {"client_id": "…", "client_secret": "…", "refresh_token": "…"}
- Config it needs
- org_url, tenant, api_version
- Resolved by
- config.connection_id, else node.connection_id
Configuration
5 fields, 3 required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.
| Field | Type | Required | Default | Constraints | Example |
|---|---|---|---|---|---|
entity_set The entity set to work with: 'accounts', 'contacts', 'opportunities', 'leads', 'incidents' (cases), 'tasks', or any other table's entity set name, including custom tables. It is the plural name from the table's 'Copy set name' in Power Apps, which is not always the plural of the table name. | string | Yes | — | — | accounts |
record_id The row's primary key GUID, or an alternate-key predicate such as firstname='Joe',emailaddress1='joe@contoso.com'. | string | Yes | — | — | 00000000-0000-0000-0000-000000000001 |
data The columns to write, as a JSON object of column name to value. Set a lookup through its navigation property with the @odata.bind annotation, for example {"primarycontactid@odata.bind": "/contacts(<id>)"}; clear one with {"primarycontactid": null}. | object | Yes | — | — | {"name":"Contoso Ltd","telephone1":"+1 425 555 0100"} |
select Comma-separated column names to return ($select). Always name the columns you need: without it Dataverse returns every column on the row. | string | No | — | — | name,revenue,createdon |
return_representation Ask Dataverse to answer with the affected row (Prefer: return=representation). Turn it off only when the row is not needed: Dataverse then answers 204 No Content and 'record' comes back empty. | boolean | No | true | — | — |
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"data": {
"name": "Contoso Ltd",
"telephone1": "+1 425 555 0100"
},
"entity_set": "accounts",
"record_id": "00000000-0000-0000-0000-000000000001",
"return_representation": true,
"select": "name,revenue,createdon"
}Output
One shape.
result
| Field | Type | Example |
|---|---|---|
entity_set The entity set the row belongs to. | string | — |
record_id The row that was updated. | string | — |
updated True when Dataverse accepted the update. | boolean | — |
record The updated row as Dataverse returned it, empty when 'return_representation' was turned off. | object | — |
{
"entity_set": "",
"record": {},
"record_id": "",
"updated": false
}Notes
- Lookups are set through the navigation property with @odata.bind — {"primarycontactid@odata.bind": "/contacts(<id>)"} — not by writing a GUID into the lookup column.
- Send only the columns that change: Dataverse fires business logic and writes audit rows for every column in the body, even one set to the value it already holds.
- The node sends If-Match: * so an unknown id is a 404 rather than an upsert that silently creates the row.
- When updating statecode, always send the matching statuscode as well; the two columns depend on each other.
Related Microsoft Dynamics 365 nodes
See Update Record run in a workflow.
In a technical demo we add the Microsoft Dynamics 365 connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.