When working with SharePoint list items using CSOM (Client-Side Object Model), you often need to update item properties — such as metadata or custom fields.
However, not all update methods behave the same way. The methods Update(), UpdateOverwriteVersion(), and SystemUpdate() look similar but have important differences that can affect version history, webhooks, and audit data.
1. Update()
What It Does
The most common way to update a SharePoint item.
Creates a new version of the item if versioning is enabled.
Updates the “Modified” and “Modified By” fields.
Triggers workflows, event receivers, and webhooks connected to the list.
item["Title"] = "Updated Title";
item.Update();
await context.ExecuteQueryRetryAsync();
When to Use
Use Update() when the change represents a real user edit — for example, a user modifying a field in a form or an automated process that should behave like a user edit.
| Action | Result |
|---|
| Creates new version | ✅ Yes |
| Triggers webhooks/workflows | ✅ Yes |
| Updates “Modified” / “Modified By” | ✅ Yes |
2. UpdateOverwriteVersion()
What It Does
Overwrites the existing version instead of creating a new one.
Still triggers workflows, events, and webhooks.
Updates the “Modified” and “Modified By” fields.
item["Title"] = "Corrected Title";
item.UpdateOverwriteVersion();
await context.ExecuteQueryRetryAsync();
When to Use
Use UpdateOverwriteVersion() when you need to make small corrections or metadata changes without cluttering version history, but still want your flows, webhooks, or event receivers to react.
| Action | Result |
|---|
| Creates new version | ❌ No (overwrites current) |
| Triggers webhooks/workflows | ✅ Yes |
| Updates “Modified” / “Modified By” | ✅ Yes |
3. SystemUpdate()
What It Does
Performs a silent update on the item.
Does not create a new version.
Does not trigger workflows, event receivers, or webhooks.
Does not change “Modified” or “Modified By” fields (unless you call SystemUpdate(true)).
item["InternalStatus"] = "Processed";
item.SystemUpdate(false);
await context.ExecuteQueryRetryAsync();
When to Use
Use SystemUpdate() when making background or system-level changes — such as updating a hidden metadata field, setting system flags, or post-processing items — where you don’t want users or automation to notice.
| Action | Result |
|---|
| Creates new version | ❌ No |
| Triggers webhooks/workflows | ❌ No |
| Updates “Modified” / “Modified By” | ❌ No (unless true) |
Conclusion
Update() → Normal user edit (new version, triggers flows)
UpdateOverwriteVersion() → Fix current version (still triggers flows)
SystemUpdate() → Silent update (no new version, no triggers)