venerdì 17 gennaio 2020

Come sistemare un campo Taxonomy che dia l’errore “The SPListItem being updated was not retrieved with all taxonomy fields” in fase di update


  1. Con uno script powershell creare un CSV con l'URL delle pagine contenenti il campo in questione e il valore dello stesso (un esempio è riportato in fondo a questo post)
  2. Rimuovere il campo dalla Document Library "Pages"
  3. Rimuovere il campo dai content types che lo contengono
  4. Cancellare la Site Column dalla site collection
  5. Ricrearla con lo stesso Internal Name
  6. Aggiungerla di nuovo tutti i Content Type interessati
  7. Reinserire i valori nelle pagine con uno script powershell che legga il file creato al punto 1 (lo script di inserimento lo lascio a voi, io l'ho già scritto, ma è un po' troppo corposo per inserirlo nel post)

filter Get-PublishingPages {
       $pubweb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($_)
       $query = new-object Microsoft.SharePoint.SPQuery

       $query.ViewAttributes = "Scope='Recursive'"
       $pubweb.GetPublishingPages($query)
}

$str = "https://[sitecollectionURL]"
$site = Get-SPSite -Identity $str

$web = $site.RootWeb

$web | Get-PublishingPages | select Uri, @{Name="[Display Name colonna]";Expression={$_.ListItem["[Internal Name colonna]"]}}| Export-CSV -Append  "[Path File CSV]"

Script di esportazione valori taxonomy

giovedì 2 gennaio 2020

ClientCallableSettings questi sconosciuti

Che bello utilizzare il CSOM su Sharepoint On Premise, giusto? Poche righe di Javascript e sul browser faccio tutto quello che facevo con il Server Object Model. Peccato però che il CSOM controlli prima che diritti ha l'utente e normalmente nei vostri (nostri) portali Web, l'utente è Anonimo. Così avete errori del tipo: "Error: The Method “GetItems” of the type “List” with id “{Lists’s Guid}” is blocked by the administrator on the server". In questo caso vi viene in aiuto la classe ClientCallableSetting. Con poche righe di Powershell potete abilitare l'utente anonimo ad eseguire get_items.

$web = Get-SPWebApplication -Identity http://[your web address]
$web.ClientCallableSettings.AnonymousRestrictedTypes.Remove
([Microsoft.SharePoint.SPList],"GetItems")
$web.Update()

Se poi vi pentite della vostra decisione, potete ritornare sui vostri passi:

$web = Get-SPWebApplication -Identity http://[your web address]
$web.ClientCallableSettings.AnonymousRestrictedTypes.Add
([Microsoft.SharePoint.SPList],"GetItems")
$web.Update()