SharePoint

Upgraden van Content Types en Field Columns

10 november 2011

In SharePoint 2010 is het mogelijk om Content Types en Field Columns te upgraden via xml. In dit artikel leg ik stap voor stap uit hoe je dit kan doen.

Aanmaken van Content type en Fields

Voorbeeld Scenario: AdventureWorks heeft een lijst met contacten in SharePoint die gebruikt wordt door de gehele organisatie voor het opzoeken van contactgegevens van klanten, medewerkers, etc. Aan die lijst met contacten moet een nieuwe kolom toegevoegd worden. In die kolom komt het “Contact Type” te staan. Het bestaande Content Type zal dus geupdated moeten worden met de nieuwe kolom.

[listdot]

  • Begin met het openen van Visual studio. Maak een “Empty SharePoint Project” aan en noem het “AdventureWorks.Contacts” (je mag het natuurlijk ook een andere naam geven). Vul de juiste SharePoint Server Url in en kies “Deploy as a sandboxed Solution”. Alle code bestaat uit xml dus een Sandboxed Solution is prima hier.
  • Voeg een Content Type feature toe en noem hem “Contact.Site”. In deze feature komen alle content types en de bijbehorende kolommen te zitten.
  • Kies “Contact” als het content type waarvan overerft moet worden.

[/listdot]

 

[listdot]

  • Na het toevoegen van de content type feature ziet de xml er zo uit:

[/listdot]

[sourcecode language=’xml’]








[/sourcecode]

[listdot]

  • We gaan een extra kolom toevoegen aan het Contact Content Type genaamd “Adventure Department”. Hierna ziet de xml er zo uit:

[/listdot]

[sourcecode language=’xml’]









[/sourcecode]
Aanmaken van de List Instance

De volgende stap is het aanmaken van een List Instance Feature. Deze feature creëert een Custom List met daaraan het Contact Type gekoppeld.

[listdot]

  • Klik met de rechtermuisknop op de Feature Folder in de Solution Explorer en kies “Add Feature”

[/listdot]


[listdot]

  • Hernoem de Feature Map, in de feature properties, naar “Contact.Web”

[/listdot]

 

[listdot]

  • Voeg een List Instance aan het project toe, genaamd “ContactList”

[/listdot]

 

[listdot]

  • Voeg de List Instance toe aan de “Contact.Web” Feature

[/listdot]

 

[listdot]

  • De volgende stap is het koppelen van het “Contact” Content type aan de “Contacts” List Instance. Open de elements.xml van de List Instance en voeg het “ContentTypeBinding” element toe. Voeg daaraan de “List Url” en de “ContentTypeID” toe. De xml ziet er dan als volgt uit:

[/listdot]

[sourcecode language=’xml’]





[/sourcecode]

[listdot]

  • Build en deploy de solution.

[/listdot]

Test data toevoegen

Nadat de solution gedeployed is wordt het tijd om wat data toe te voegen aan de nieuwe “Contact” lijst.

[listdot]

  • Open de SharePoint site en selecteer de nieuwe “ContactList” die aan de Quick Launch Bar is toegevoegd.
  • Klik op de Items Tab in de Ribbon, klik op “New Item” en selecteer het “AdventureWorks Contact” Content Type.

[/listdot]

 

[listdot]

  • Voeg wat data toe aan de lijst.

[/listdot]

Upgraden van de Feature

Nu de lijst in gebruik is en er data aan toegevoegd is kunnen we de feature gaan upgraden. We gaan een nieuwe kolom toevoegen aan het “Contact Content Type”.

[listdot]

  • Om te beginnen, klik met de rechtermuisknop op de Project File, klik “Add” -> “New Item”.Voeg een “Empty Element” item toe en en geeft het de naam “Contacts.Iteration2”.

[/listdot]

 

[listdot]

  • De solution zal er nu zo uitzien:

[/listdot]

[listdot]

  • Voeg het volgende toe aan de elements.xml:

[/listdot]

[sourcecode language=’xml’]




Customer

Customer
Employee
Supplier


[/sourcecode]

[listdot]

  • Controleer of het nieuwe “Contact.Iteration2” element toegevoegd is aan de Site Scoped Feature.

[/listdot]

 

[listdot]

  • De volgende stap is het aanpassen van de Feature Manifest van de Site Scoped Feature. Selecteer de Manifest tab, onderaan links in de bovenstaande feature (zie afbeelding hierboven), klik op (+), naast de edit opties. Klik dan op “Open in XML Editor”.
  • Voeg een “Version” attribute toe aan de Feature node. Vul als waarde 1.0.0.0 in.
  • Voeg de volgende xml toe aan de feature node

[/listdot]

[sourcecode language=’xml’]











[/sourcecode]
[listdot]

  • Zorg ervoor dat “Location” naar de juiste locatie wijst en dat het Field ID overeenkomt met de nieuwe “Customer Type” kolom. De “Pushdown” attribute moet op TRUE staan. Dit zorgt ervoor dat als de nieuwe kolom toegevoegd wordt aan het “Contact” content type, de kolom ook meteen toegevoegd wordt aan de List Instance.
  • Build het project. De nieuwe xml in de editor zal dan samengevoegd worden met de bestaande xml van de designer.

[/listdot]

Upgrade Tools

Farm solution moeten geupgraded worden door de SharePoint API. Hier bestaat geen out of the box PowerShell Cmdlet of STSADM commando voor. Solutions kunnen alleen geupgraded worden door het aanroepen van de Feature.Upgrade() methode. Voordat je dit commando aanroept, moet je eerst aangeven welke features er geupgraded moeten worden. Hiervoor gebruik je de QueryFeatures() methode.

Chris O’Brien heeft een Feature Upgrading Pack gemaakt en een PowerShell Cmdlet geschreven voor het upgraden van SharePoint 2010 solutions. Je kan de Feature Upgrading Pack downloaden van CodepLex: http://spfeatureupgrade.codeplex.com/.

Op zijn blog staat een post hoe je het kan gebruiken: http://www.sharepointnutsandbolts.com/2010/08/feature-upgrade-part-5-using-powershell.html

Serge Luca beschrijft een hele andere manier op zijn blog: http://sergeluca.wordpress.com/2011/06/15/sharepoint-2010-upgrading-feature-with-versioning-is-easier-in-the-sandbox/ . Zijn oplossing is alleen voor Sandboxed Solutions. Door de wsp een andere naam te geven voordat je hem deployed in SharePoint, vraagt SharePoint automatisch of je de solution wilt upgraden. Het hernoemen van wsp’s lijkt mij echter niet de juiste oplossing. Dit kan veel fouten en onduidelijkheden met zich meebrengen. Het is wel de meest simpele oplossing voor het upgraden van Sandboxed Solutions.

Samenvatting

In dit artikel heb ik een voorbeeld gegeven over het upgraden van features. Aangezien het daadwerkelijke upgraden van de feature alleen via de SharePoint API gedaan kan worden, blijft het toch een ingewikkeld proces. Gelukkig zijn er tools beschikbaar om dit toch op een eenvoudige manier uit te voeren.

You Might Also Like

Geen reacties

Plaats een reactie