PageTypeBuilder 2.0 with EPiServer CMS 7 Preview
This is a long overdue post about getting PageTypeBuilder 2.0 working with EPiServer 7 Preview.
I´m not sure the changes I made is the best or even correct, but they work. Joel Abrahamsson, please comment on this.
Lets begin.
Get the source for PageTypeBuilder 2.0
Update the references from EPiServer CMS 6 to CMS 7.
Changes have to be made in three files, TabDefinitionUpdater.cs, PageDefinitionUpdater.cs and PageTypeRepository.cs.
First up, PageTypeRepository
Add a new private member to the class and add a constructor
private EPiServer.DataAbstraction.IContentTypeRepository _contentTypeRepository;
public PageTypeRepository()
{
_contentTypeRepository = EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance<IContentTypeRepository>();
}
In each of the Load methods (should be three of them) change PageType.Load(arg) to
var pageType = (PageType)_contentTypeRepository.Load(arg).CreateWritableClone();
where arg is string name, Guid guid or int id.
Last change IEnumerable<IPageType> List() from
PageType.List().Select(pageType => new WrappedPageType(pageType)).Cast<IPageType>();
to
return _contentTypeRepository.List().Select(pageType => new WrappedPageType((PageType)pageType)).Cast<IPageType>();
Now, compile and you will get four errors about ambiguous references due to referencing the new EPiServer dll. Clear them up by adding changing
ITabDefinitionRepository to PageTypeBuilder.Abstractions.ITabDefinitionRepository where the errors occurs.
Compile again and you will have a working PageTypeBuilder although there are 78 warnings all of them marking obsolete methods or calls.
That’s it.
Hi Oskar,
Nice blog post! Helped me a lot!
Just one question. Which build version of EPiServer did you perform this upgrade against? Versjon 7.0.449.1?
Regards, Tore
Glad to be able to help. I used the public preview, 7.0.449.1. It should work with more recent versions as well as the only big change I made is to use the IContentTypeRepository.
Hi again,
I am using the 7.0.524 version. Everything compiles, but I get an error when trying to run the site. Did you upgrade the site or did you start from scratch?
Multiple custom attributes of the same type found.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Reflection.AmbiguousMatchException: Multiple custom attributes of the same type found.
/Tore
The problem is that we're using the obsolete attribute PageDefinitionTypePlugin in several of our referenced assemblies. While I do not understand why an obsolete attribute should give this type of errors, changing it to PropertyDefinitionTypePlugin solved this error.