Unfortunately, it has been decided that this feature is in the too hard basket for the moment to be implemented. The reason given - the new implementation of multilingual content and the way that is treated is different to V7 and the code can't be just copied across.
Disappointing as this was a very useful feature in Umbraco 7. Hopefully they'll have the capacity to implement in future versions.
Appreciate I'm very late to the party. But if anyone else googles their way here, I found it relatively easily to script the database to migrate some content from one document type to a new version.
Basically I copied the existing document type to a new version. Then used SQL to reassign all the content nodes I wanted to migrate from the old document type id to the new one.
After this I altered the new document type, leaving alone any properties containing content I wanted to keep. So this only works for "narrowing a type. I wanted to go from a generic "page" type, retaining the main grid content, to something more specific - with different templates and permissions.
I also had to rerun the migration script on the Umbraco Cloud databases after deployment.
I have a customer that has imported 8000 pages from another CMS and afterwards we found out that some page types where not correct. So instead of creating about 200 new nodes and moving all children, which would take forever, I used your instructions and scripts. Works like a charm!
Unfortunately this doesn't work in U13 and most likely all versions back to 9. It does change the document type but all content is lost as the content is associated to a property id that is not in the new template.
Did you find there was any content loss when you did this in 8, unless Umbraco fundamentally changed the property structure after, I would be very cautious with this approach.
Thankfully I did follow your instructions with a db backup first, so no real harm :D
Agreed, this approach won't work for anything using the Block Grid or Block List content (as you need to untangle the json containing property ids) , and probably not for anything multilingual. But the instructions are clearly labelled for Umbraco 8.
For modern versions I'd recommend exploring Usync Migration, or even using Usync Content to serialise content, script changes to the files and then Reimport..
Oh absolutely is marked for U8, but like any good developer stuck trying to find a solution I tried it, it didn't work, so I thought I'd say so others don't try it 👍🙂
All the content I lost was in standard properties and not any nested content or block list, but as I said, I had a back up and all is good in the world.
Although, it looks like if you employ tabs in U8 you will get content loss as each tab on a document type has a unique Id, and that tab hosts the properties. So changing a document type would mean those unique Ids get misaligned - I just tried this on a staging site for my client and everything that was in the "generic" tab was fine and data wasn't lost but the Test tab that we had created, content in the properties was lost.
I bet there would be a way to write a script in sql to manage that some how. However I am poop with Sql so I will default back to writing it in c# land :D
Being that the Umbraco code doesn't allow you to programmatically change the content type, I bet your Sql could be employed as the same time c# - write an end point, pull out all the content you want updated, clone it and hold it in memory, Sleep() for a few minutes while you hit the old Sql change-a-roo, and then update all the nodes via something like this:
content.SetProperty("", clone.GetValue<string>(""));
content.TemplateId = 1234; // cause you most likely will have changed the template.
_contentService.SaveAndPublish(content);
Oh, that might work nicely and it's not uSync (sorry... too many bad nights with uSync 😔)
I now ramble. It's been a massive 2 weeks with content importing and now they want all the news items with their own doctype.
Have had some success for using it to allow editors to change page content types...
... If its a block or nested item that has to change, then you can do it with SQL, but uSyncMigrations allows you to write a specific migration plan, to apply the changes to usync settings and content files that if all looks good, can then be imported back in to apply the changes... Have done a few nested content to block list Migrations and olg grid to block grid, which have worked out well...
I haven't seen that before and I like th story written there.
Thankfully my use case can be done with a bit of c# and a bit of SQL together after copying document types. It's easy enough to duplicate values and none of the news or blog items have associated child nodes so duplicate, delete, save and publish and I am golden.
But this might help in the future when we move our massive client to 13 - they have mor document types than you can shake a stick at and there is so no need for it 🤣
@Fiona Killer feature for me in v7... several enterprise clients won't upgrade to v8 because of the reduced agility v8 introduced by removing this feature.
I'm guessing this didn't make it into 9 either... because I've just upgraded a site from 7 to 10.3 and the option's not there. Has there been any progress on this?
Change Document Type in Umbraco 8
I've noticed in Umbraco 8 there is no option to "Change Document Type" when editing a page in the tree (Under the menu Do Something Else).
Does anyone know if this feature will come back or if it's gone for good or if kind of work is recommended now to be handled in a different way.
It was a very handy and useful feature.
Hi Mathew
It seems the action exists here, but has been commented out for now: https://github.com/umbraco/Umbraco-CMS/blob/dev-v8/src/Umbraco.Web/Actions/ActionChangeDocType.cs
I guess it is because the old one was using WebForms and it needs to be re-written with Angular + Web API in Umbraco 8.
The other actions have Angular views and controllers, which exits here: https://github.com/umbraco/Umbraco-CMS/tree/91c52cffc8b7c70dc956f6c6610460be2d1adc51/src/Umbraco.Web.UI.Client/src/views/content
It would be great if you submit an issue here: https://github.com/umbraco/Umbraco-CMS/issues
/Bjarne
Thanks for looking into it. I'll create the issue.
FYI, this was further discussed here..
https://github.com/umbraco/Umbraco-CMS/issues/5070
Unfortunately, it has been decided that this feature is in the too hard basket for the moment to be implemented. The reason given - the new implementation of multilingual content and the way that is treated is different to V7 and the code can't be just copied across.
Disappointing as this was a very useful feature in Umbraco 7. Hopefully they'll have the capacity to implement in future versions.
Appreciate I'm very late to the party. But if anyone else googles their way here, I found it relatively easily to script the database to migrate some content from one document type to a new version.
Basically I copied the existing document type to a new version. Then used SQL to reassign all the content nodes I wanted to migrate from the old document type id to the new one.
After this I altered the new document type, leaving alone any properties containing content I wanted to keep. So this only works for "narrowing a type. I wanted to go from a generic "page" type, retaining the main grid content, to something more specific - with different templates and permissions.
I also had to rerun the migration script on the Umbraco Cloud databases after deployment.
I've written some more complete instructions here: https://this.isfluent.com/blog/2021/changing-document-types-in-umbraco-8
Alan, You're a life saver :-)
I have a customer that has imported 8000 pages from another CMS and afterwards we found out that some page types where not correct. So instead of creating about 200 new nodes and moving all children, which would take forever, I used your instructions and scripts. Works like a charm!
Huge thanks :-) / Markus
Unfortunately this doesn't work in U13 and most likely all versions back to 9. It does change the document type but all content is lost as the content is associated to a property id that is not in the new template.
Did you find there was any content loss when you did this in 8, unless Umbraco fundamentally changed the property structure after, I would be very cautious with this approach.
Thankfully I did follow your instructions with a db backup first, so no real harm :D
Agreed, this approach won't work for anything using the Block Grid or Block List content (as you need to untangle the json containing property ids) , and probably not for anything multilingual. But the instructions are clearly labelled for Umbraco 8.
For modern versions I'd recommend exploring Usync Migration, or even using Usync Content to serialise content, script changes to the files and then Reimport..
Oh absolutely is marked for U8, but like any good developer stuck trying to find a solution I tried it, it didn't work, so I thought I'd say so others don't try it 👍🙂
All the content I lost was in standard properties and not any nested content or block list, but as I said, I had a back up and all is good in the world.
Although, it looks like if you employ tabs in U8 you will get content loss as each tab on a document type has a unique Id, and that tab hosts the properties. So changing a document type would mean those unique Ids get misaligned - I just tried this on a staging site for my client and everything that was in the "generic" tab was fine and data wasn't lost but the Test tab that we had created, content in the properties was lost.
I bet there would be a way to write a script in sql to manage that some how. However I am poop with Sql so I will default back to writing it in c# land :D
Being that the Umbraco code doesn't allow you to programmatically change the content type, I bet your Sql could be employed as the same time c# - write an end point, pull out all the content you want updated, clone it and hold it in memory, Sleep() for a few minutes while you hit the old Sql change-a-roo, and then update all the nodes via something like this:
Oh, that might work nicely and it's not uSync (sorry... too many bad nights with uSync 😔)
I now ramble. It's been a massive 2 weeks with content importing and now they want all the news items with their own doctype.
Hi Colin
Did you have a look at Flip?
https://www.nuget.org/packages/Flip.Umbraco/13.0.0
Have had some success for using it to allow editors to change page content types...
... If its a block or nested item that has to change, then you can do it with SQL, but uSyncMigrations allows you to write a specific migration plan, to apply the changes to usync settings and content files that if all looks good, can then be imported back in to apply the changes... Have done a few nested content to block list Migrations and olg grid to block grid, which have worked out well...
Regards
Marc
I haven't seen that before and I like th story written there.
Thankfully my use case can be done with a bit of c# and a bit of SQL together after copying document types. It's easy enough to duplicate values and none of the news or blog items have associated child nodes so duplicate, delete, save and publish and I am golden.
But this might help in the future when we move our massive client to 13 - they have mor document types than you can shake a stick at and there is so no need for it 🤣
Would echo that that the feature 'Change Document Type' is really useful, and it would be nice to have it back.
Since there is no further development on v8, is this functionally on the 'to do' list for v9?
thanks Fiona
@Fiona Killer feature for me in v7... several enterprise clients won't upgrade to v8 because of the reduced agility v8 introduced by removing this feature.
This needs to get back on the list for V9 for sure. This is a feature mostly used when upgrading sites from v7 upwards!
I'm guessing this didn't make it into 9 either... because I've just upgraded a site from 7 to 10.3 and the option's not there. Has there been any progress on this?
is working on a reply...