Every released version, what changed in it, and the date it went out. This page is generated from the module’s own changelog, which is the same file shipped inside technovision_ms365 and rendered on its Odoo Apps Store listing.
Five screenshots on the Apps Store listing, including the rule form with its filestore warning firing in context.
Changed
The Odoo copy removed column is labelled Copy removed. At any sensible width the old label rendered as Odoo copy remo..., and the column is already inside a Microsoft 365 app, so "Odoo" was implied.
18.0.1.0.0
Notes
First release.
Files above 4 MB are refused with an explanation rather than half-sent: Graph requires an upload session above that size, which is a different protocol, and a truncated file in a document system is worse than a refused one.
Added
Automatic filing of Odoo attachments into a SharePoint library. One rule per model, with a folder template — Odoo/{model}/{year}/{record} — so a document can be found a year later by somebody who knows nothing about Odoo.
Asynchronous by design. An attachment is created inside the transaction of whoever saved the record; calling Microsoft there would mean saving an invoice fails when SharePoint is slow. Files are queued and a scheduled job sends them, so nobody waiting on a save ever waits on Microsoft.
Optional removal of the Odoo copy, which is what reclaims the filestore. Off by default.
A complete filing log: the file, the record, who attached it, the folder, the link, the size, the state, the error, and whether the Odoo copy was removed. Immutable.
A simulated transport, and it is the default. It records exactly which files would be sent and where each would land, and sends nothing — so the whole module can be installed, configured and evaluated before anybody registers an application in Entra.
Retry with a give-up point, a manual retry button, and a library picker that asks Microsoft what the app can see rather than making somebody find a drive id by hand.
Security
The copy is removed only when Microsoft has returned an item id and a link — never on a call that merely did not error. A failed or partial upload leaves the Odoo copy exactly where it was, and there is a test whose entire job is to fail if that stops being true. The feature that reclaims a filestore is the same feature that could delete somebody's only copy of a contract.
No secret is a field. The client secret and the cached access token live in Odoo's encrypted ir.config_parameter store, written only by a system administrator through a wizard, never displayed again. A test asserts it across every model this module defines.
Setting a new secret invalidates the cached token, so the module cannot keep using a token obtained with a credential that has been replaced.
Folder templates are templates, not expressions. Every path segment is sanitised, including the slash, which would otherwise let a record's name create folders nobody intended.
Odoo's own machinery (ir.ui.view, ir.asset, report attachments) can never be filed, and neither can an attachment backing a binary field — moving one breaks the field it backs.
Ordinary users see only their own filings; the log is otherwise an administrator's.