I think that you know that Dynamics 365 Business Central 2021 Wave 2 (version 19) introduced the possibility to do a forcing of the schema syncronization mode directly from the Extension Management page when uploading a new per-tenant extension. With this new option, it’s now possible to force any destructive table schema changes and circumvent the usual error when such changes are detected.
But there’s a problem 🙂
To directly explain the problem, I have created an extension that defines the following table:
This extension is on version 188.8.131.52 and it’s deployed as a per-tenant extension (PTE scope) on my SaaS sandbox environment. All good.
Now imagine that I want to remove the Active field from the above table, because on reviewing my code design I decide that it’s not needed (I’m in a development stage now, so I can do that).
For doing that, I create a new 184.108.40.206 version of my extension where I remove the Active field from the table definition (breaking change!) and I deploy the new PTE version on my online sandbox as follows, because I’m distracted:
This is the standard deployment way, where Schema Sync Mode is default setted as Add (so no breaking change admitted). What happens to my deployment? An epic fail, obviously:
The PTE deployment fails because a breaking change is detected (Active field is removed from the previous version).
Oh what a careless… I should use Schema Sync Mode = Force in order to do a breaking change. Let’s do that:
I select the same app file (version 220.127.116.11 previously failed) and now I redeploy it with force. Result? This:
Again, the deployment is failed for a breaking schema change, also with the Force schema setting! :O
This is not what I was expecting…
In this case, my Schema Sync Mode = Force is ignored and the system is using the Add option again (so, no breaking changes possible).
In general, please remember that Microsoft is working on a “fix” for this strange behaviour. If you are in this situation, what you should always do is to create a new extension version (also if the previous upload with Schema Sync Mode = Add is failed) and then do the force sync with this new app version.
In the above example, just create a new 18.104.22.168 version of the app (with the Active field removed) and then upload it with Schema Sync Mode = Force:
The app is now successfully updated and the Active field is removed from the table.
Hoping this will help you on avoiding headaches on trying to understand WHY this noise… 😉