OneDrive and SharePoint integration for Odoo via Microsoft Graph — mirror attachments into Microsoft 365: OAuth2 admin consent, one folder per record, transfer queue, Retry-After honoured, token expiry detected, three remote deletion policies, call log. Document cloud storage sync, Community.
Overview
OneDrive and SharePoint — Odoo attachments in Microsoft 365
Odoo attachments live in Odoo. The company's documents live in SharePoint. In between, someone copies things over — and that someone forgets.
Also searched as: OneDrive Odoo, SharePoint Odoo, Microsoft 365 Odoo, Microsoft Graph Odoo, SharePoint attachments Odoo, cloud storage Odoo, OneDrive connector Odoo 19, Microsoft documents Odoo Community.
One folder per record, following a folder structure you decide. {modele}/{annee}/{enregistrement} by default, and the tokens can be rearranged. Names are sanitized before upload: characters Windows rejects, reserved names — CON, NUL — and path traversal attempts are neutralized, rather than letting the upload fail with an obscure message.
The refresh token expires, and the module says so. This is the case connectors handle poorly, because it is rare in testing and certain in production. Here, the connection switches to the “token expired” state, displays the reason returned by Microsoft with its date, stops the queue for that connection — tasks stay pending, none is lost or marked as failed — and waits for human action. No retry loop: hammering a dead token does not revive it, and eventually gets the account locked.
Rate limiting is respected, not suffered. On a 429, the module reads the Retry-After header, pauses the connection until that time and puts the task back in the queue. It is the module's only automatic retry, and it is justified: on a 429, we know the call did nothing.
Deletion is your decision, never ours. Three policies, selectable per connection: keep the remote file — this is the default —, move it to the trash, or delete it permanently. Removing a duplicate in Odoo is not the same as deciding the fate of a company's supporting document.
No network call in a process that serves a page. Uploading a document only writes a record: sending happens from the cron job or from a “now” action. A call attempted from a computed field is refused — this is a safeguard verified by a test, not a guideline.
An orphaned task is flagged, never retried. A task whose process died mid-upload may have succeeded. Running it again would create a duplicate in SharePoint that would have to be tracked down by hand. It is marked, counted, and awaits a decision.
Nothing is sent until you have named something. No model is tracked by default.
Not proven in production
This module has not been tested against a real Microsoft tenant. The Microsoft 365 Developer Program, which used to provide a free trial tenant, is now restricted to Visual Studio Professional or Enterprise subscribers and members of qualifying programs — verified on September 14, 2026. Exchanges with Microsoft Graph are tested against recorded responses, including errors, expired tokens and quota rejections. The logic is tested; end-to-end conformance with a real tenant is not, and we would rather state that here than let you find out for yourself.
What the module does not do
It does not upload files larger than four megabytes: beyond that, Graph requires a chunked upload session, which this version does not include — the file stays in Odoo, intact, and the task says so. It does not bring files created in SharePoint back into Odoo. It does not sync in both directions. It does not replace the Documents app of Odoo Enterprise.
Specifications
| Price | €149 excl. VAT |
|---|---|
| License | OPL-1 |
| Odoo series | 19.0: published on the Odoo Apps Store; 20.0: published on the Odoo Apps Store |
| Version | 1.0.0 |
| Edition | Odoo Community / on-premise |
| Technical name | dyo_ms_graph_documents |
| Domain | Connectors and automation |
Price excluding VAT as displayed on the Odoo Apps Store; purchase and installation are done on the Store or through your Omnifloo instance.