Può capitare, in SharePoint, che un content type (CT) deployato con una solution non aggiorni il CT figlio associato alla lista.

In particolare mi è capitato di aggiungere dei field ad un CT a livello di site collection e non vederli nel CT associato alla lista (la lista conteneva già degli item che usavano quel CT, quindi non potevo rimuoverlo e poi aggiungerlo).

Anche facendo, sul CT di site collection, un update spuntando il flag per aggiornare i figli, non ho ottenuto risultati, sembra un bug.
Infatti andando a vedere nell'oggetto SPContentType della lista, risultavano presenti i campi nella collection FieldLinks ma non in quella Fields.

L'unica alternativa che ho trovato per risolvere il problema, è questo codice C#:

C#

string url = "http://sharepoint.sgart.local/helpdesk/";

using (SPSite site = new SPSite(url))
{
  using (SPWeb web = site.RootWeb)
  {
    SPList list = web.Lists["Requests"];
    SPContentType ct = list.ContentTypes["SgartCTHelpDesk"];
    //prendo il riferimento al campo nella site collection
    SPField fld = web.Fields.GetFieldByInternalName("SgartCostCenter");
    //lo elimino dal CT di lista
    ct.FieldLinks.Delete(fld.Id);
    //lo riaggiungo
    ct.FieldLinks.Add(new SPFieldLink(fld));
    //aggiorno il content type
    ct.Update();
  }
}
che ovviamente va ripetuto per ogni campo mancante.

Questa la versione in PowerShell:

PowerShell

$u = "http://sharepoint.sgart.local/helpdesk/"
$w = Get-SPWeb $u
$l = $w.lists["Requests"]
$ct = $l.ContentTypes["SgartCTHelpDesk"]
$f = $w.Fields.GetFieldByInternalName("SgartCostCenter")
$ct.FieldLinks.Delete($f.Id);
$fl = New-Object Microsoft.SharePoint.SPFieldLink $f
$ct.FieldLinks.Add($fl)
$ct.update()
Tags:
C#236 Errori120 PowerShell200 SharePoint498 SharePoint 2010224 SharePoint 2013137
Potrebbe interessarti anche: