Xuntos migreert in Umbraco 7

Om menselijke fouten tot een minimum te beperken hebben we een methode ontwikkeld wat ervoor kan zorgen dat als het gaat om het inrichten van de backoffice van Umbraco ons leven een stuk makkelijker is geworden. Met behulp van deze methode is het voor de ontwikkelaar makkelijker om Umbraco in te richten met Document Types, Data Types en Macro’s. Normaal gesproken zijn dit handmatige acties, welke, over het algemeen gezien, sneller leiden tot fouten. Daarom vroegen we ons af of dit niet geautomatiseerd kon worden. De Custom Migration biedt de ontwikkelaar deze optie. Maar hoe werkt het nou eigenlijk? Om te beginnen een stukje historie.

Umbraco migraties

De geboorte van de Custom Migration

Toen Umbraco 7 nog de standaard was, ontstond het idee van het automatisch aanmaken van Document Types. Jarenlang waren wij gewend om de nodige Document Types en bijbehorende Data Types met de hand in de backoffice aan te maken en te configureren. We hadden wel geëxperimenteerd met andere tools die voor Umbraco beschikbaar waren, maar liepen altijd tegen problemen aan.

Ondertussen liepen wij op tegen de hoeveelheid werk die een uitrol met aanpassingen aan documenttypes en dergelijke met zich meebracht. Dit zou sneller moeten kunnen. Het idee was om met een druk op de knop, die wij in de backoffice programmeren, Document Types aan te laten maken en in te stellen.

Na wat uitzoekwerk hebben wij deze manier van werken toegepast in de website van Joris Zorg. In dit project hebben wij nieuwe properties toegevoegd aan bestaande Document Types.

Toepassing in Umbraco 7

Om de migratie van Document Types toe te passen op een Umbraco 7 project, dien je een Controller aan te maken welke afgeleid is van de class “UmbracoAuthorizedApiController” uit de Umbraco.Web.WebApi class. Zodat deze API Controller alleen aangesproken kan worden door gebruikers die ingelogd zijn in de BackOffice.

using Umbraco.Web.WebApi;

[UmbracoAuthorize]
public class MigrationController : UmbracoAuthorizedApiController

In deze controller voegden wij een Migration class toe waarin wij de properties instellen. In versie 7 van Umbraco is het mogelijk om op basis van een IContentType (Die wij ophalen door middel van de ContentTypeService van Umbraco.Core) een property toe te voegen door middel van de functie "AddPropertyType".

var newsPage= Services.ContentTypeService.GetContentType("newsPage");
string imageAlias = "image";
newsPage.AddPropertyType(new PropertyType(Services.DataTypeService.GetDataTypeDefinitionByName("Media Picker"), imageAlias), "Content");

In het voorbeeld hierboven hebben wij het Document Type (noot: Intern gebruikt Umbraco  voor Document Types de naam ContentType) met de alias "homePage" opgehaald door middel van de ContentTypeService van Umbraco. Vervolgens voegen wij de property "image" toe van het type "Media Picker". Deze property plaatsen wij in de Document Type in de section "Content".

Vervolgens halen wij deze property op en stellen wij nog wat andere informatie in, zoals een "Name" en een "Description". 

var image = newsPage.PropertyTypes.FirstOrDefault(x => x.Alias == imageAlias);
image.Name = "Afbeelding";
image.Description = "Selecteer een afbeelding voor het item (wordt getoond in overzichten).";

Uiteindelijk slaan wij de property op via de ContentTypeService.

Services.ContentTypeService.Save(newsPage);

De complete code van deze controller is de vinden op GitHub.

Uiteindelijk hebben wij een aparte sectie in Umbraco gemaakt waar wij een knop tonen welke de migratie uitvoert. Hierna is het Document Type aangemaakt binnen Umbraco.

Voortdurende ontwikkeling

Na het project Joris Zorg hebben wij deze manier van configureren van de Document Types uitgebreid in andere projecten welke ook op versie 7 draaien. We hebben het voor elkaar gekregen dat we niet alleen Document Types en DataTypes kunnen programmeren, maar ook:

  • Macro’s
  • Nested Content
  • Compositions

Inmiddels is voor Umbraco versie 8 gereleased. Om de migratie ook in Umbraco 8 toe te passen hebben wij de code omgeschreven. De story over het toepassen van Migrations in Umbraco 8 is binnenkort te lezen.