Titel-veld van inhoudstype Item wijzigen
Vorige week was ik bezig om enkele content types (inhoudstypes) aan te maken in m’n MOSS 2007 omgeving. Van een van die content types moest het titel veld eigenlijk een andere naam krijgen, soms komt het namelijk voor dat je geen titel hebt bij een type, maar wel iets anders. Uiteraard kun je dan kiezen om Titel te verbergen, maar ik wilde hem nu hernoemen. Dat hernoemen kan uiteraard wel, maar ik zat alweer een niveau te hoog en was ik bezig met het content type Item te wijzigen.
Nu ging ik vrolijk door met het wijzigen hiervan. Je krijgt dan zo’n melding dat je de betreffende site-kolom in een ander venster kan worden bewerkt. Dit deed ik dus en door de aanwijzingen op het scherm te volgen had ik dus Titel gewijzigd. Dit bleek niet een echt slimme actie te zijn geweest, want nu had ik het basis type in Sharepoint gewijzigd. Dit heeft als gevolg dat er veel dingen niet meer goed werken en dat al je types geen Titel meer hebben.
Het terug aanpassen van deze site kolom blijkt ook alweer onmogelijk te zijn, vanwege de beveiliging binnen Sharepoint. Wanneer je je kolom weer terug wilt aanpassen naar Titel, dan krijg je een foutmelding dat deze al bestaat. Op zich wel logisch, maar niet echt wenselijk. Gelukkig ben ik niet voor een gat te vangen en heb ik een fix kunnen doen. De fix uitte zich in een console applicatie met enkele parameters waar je op kunt geven welke kolom gehernoemd moet worden. Zo werk je eigenlijk dus om de beveiliging van Sharepoint heen. De code die ik gebruikt heb is dit:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
namespace RenameField {
class Program {
static void Main(string[] args)
{
if (args.Length < 3)
{
Console.WriteLine("Usage: RenameField ");
return;
}
SPSite site = new SPSite(args[0]);
SPField f = site.RootWeb.Fields[args[1]];
f.Title = args[2]; f.Update();
}
}
}
Om bovenstaande code succesvol uit te kunnen voeren moet je de applicatie wel uitvoeren als een gebruiker die voldoende rechten heeft op de SQL database.
Ik kreeg eerst namelijk de fout dat de website niet gevonden kon worden en later dat er niet genoeg rechten waren. Later heb ik de applicatie dus uitgevoerd als de SQL gebruiker die we binnen Sharepoint gebruiken. Daarna werkte de applicatie perfect en deed het wat het moest doen. Toch ben ik hier weer een paar uur mee bezig geweest, alleen maar vanwege deze bug binnen Sharepoint. Ach, voor een volgende keer weet ik hoe het opgelost moet worden.