I’m upgrading a quite old EPiServer CMS website that has been alive since about 2007 from EPiServer CMS 6 to EPiServer 7 CMS.
Among the first things after using EPiServer Deployment Center to upgrade from CMS 6 R2 to 7 CMS is that I can’t use the new shiny Editor Mode.
It looks good but no reaction when I click to edit a property or trying to enter Forms Editing.
A quick look in my browser’s Developer Network gives me a HTTP Error 500 from the following url:
/secure/shell/Stores/metadata/?type=EPiServer.Core.ContentData&modelAccessor=%7B”contentLink”%3A”3_35644″%7D&dojo.preventCache=1362601343237
I also had some strange errors when trying to edit TinyMCE Property Settings:
After some Reflecting, Debugging and some hints from http://world.episerver.com/Modules/Forum/Pages/thread.aspx?id=64169 I found that in the upgrade from 6R2 to 7, the Upgrade Tool moves some DDS-items such as Property Configuration from tblBigTable to tblSystemBigTable.
But the View VW_EPiServer.Editor.TinyMCE.ToolbarRow nor the Stored Procedure Save_EPiServer.Editor.TinyMCE.ToolbarRow are not updated to load or save from the correct Big Table causing the DDS to be able to find the TinyMCESettings correctly but when the nested entities ToolbarRow are loaded, no such data is found. Hence TinyMCESettings.Toolbar returns a list but all items in the list are NULL.
The correct procedure seems to be to change the design of the View to
SELECT CAST(R01.pkId AS varchar(50)) + ':' + UPPER(CAST([Identity].Guid AS varchar(50))) AS Id, R01.pkId AS StoreId, [Identity].Guid AS ExternalId, R01.ItemType FROM dbo.tblSystemBigTable AS R01 INNER JOIN dbo.tblBigTableIdentity AS [Identity] ON R01.pkId = [Identity].pkId WHERE (R01.StoreName = 'EPiServer.Editor.TinyMCE.ToolbarRow') AND (R01.Row = 1)
and the Stored Procedure to
USE [dbStockholmPrideDev_EPi7] GO /****** Object: StoredProcedure [dbo].[Save_EPiServer.Editor.TinyMCE.ToolbarRow] Script Date: 03/04/2013 09:45:36 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[Save_EPiServer.Editor.TinyMCE.ToolbarRow] @Id bigint output, @UniqueId uniqueidentifier, @ItemType nvarchar(2048) as begin declare @pkId bigint select @pkId = pkId from tblBigTableIdentity where [Guid] = @UniqueId if @pkId IS NULL begin begin transaction insert into [tblBigTableIdentity]([Guid], [StoreName]) values(@UniqueId, 'EPiServer.Editor.TinyMCE.ToolbarRow') select @Id = SCOPE_IDENTITY() insert into [tblSystemBigTable] (pkId, StoreName, Row, ItemType) values(@Id, 'EPiServer.Editor.TinyMCE.ToolbarRow', 1, @ItemType ) commit transaction end else begin begin transaction select @Id = @pkId DECLARE @rows int select @rows = count(*) from [tblSystemBigTable] where pkId = @Id if(@rows < 1) begin insert into [tblSystemBigTable] (pkId, StoreName, Row, ItemType) values(@Id, 'EPiServer.Editor.TinyMCE.ToolbarRow', 1, @ItemType ) end commit transaction end end
Nice catch!
[…] Stockholm Pride var EPiServer användare sedan 2007 (då genom INEXOR) och på en EPiServer 6 sedan 2009. Uppgraderingen över flera versioner ska ha gett upphov till värdefull migreringsdata för andra EPiServer-utvecklare. […]
Thank you! This really helped us!
Really helpful, Alf! Thank you!
Same problem. Did I miss somethong?
Have you restarted your EPiServer web site after you’ve changed the Stored Procedure and the View?
Wow, thanks! :D You are the awesomest.
good work
really good work
Hi!
I have run sql statement for the view and updated the stored procedure.
After that I have restarted the IIS, Visual Studio, computer, … but still nothing… I get the same error as you when trying to edit TinyMCE Property Setting…
Any suggestions?
I’ve solved it…
Nice, I couldn’t see by your description what could have caused your problem.
Can you explain what you did to make it work?
Thank you, you are a life saver :)
I really don’t feel like altering EPi:s stored procedures on my own.
Honestly just clearing the property settings container seems like a safer approach, and is unlikely to make anyone sad anyway.
EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance<EPiServer.Data.Dynamic.DynamicDataStoreFactory>().GetStore(typeof(EPiServer.Core.PropertySettings.PropertySettingsWrapper)).DeleteAll();
You have a point. However having a broken Stored Procedure might cause further problems in the future. In my mind it’s better to fix it now.