lunedì 19 giugno 2017

Attenzione!! Rimuovete l'attributo 'Version' se esportate e importate le Site Columns con Powershell

Come dice il titolo, eliminate l'attributo 'Version' da ogni tag Field che lo contiene nel file XML generato se esportate e importate le Site Columns con Powershell, altrimenti non potrete modificare la Site Column in nessun modo.

domenica 4 giugno 2017

Aggiornare un Taxonomy Field utilizzando l'object model

(Aggiornamento: accertatevi di avere gli stessi language packs se lavorate su farm diverse per via dei campi aggiunti alla TaxonomyHiddenList)


Per aggiornare un campo Taxonomy va utilizzato il metodo statico SetFieldValue della classe TaxonomyField. Nel caso però in cui il campo appartiene ad un content type pubblicato attraverso il Content Type Hub o sia creato in Visual Studio e la definizione non sia del tutto corretta si avrà il seguente criptico errore "The SPListItem being updated was not retrieved with all taxonomy fields". Il metodo sicuro per l'update è il seguente, dove aggiorniamo un taxonomy field multivalued, per i single valued si utilizza TaxonomyFieldValue e non TaxonomyFieldValueCollection, e il tutto si basa sul fatto che il TaxonomyField ha un campo Note nascosto associato:


  // create new TaxonomySession based on the current Site
TaxonomySession taxonomySession = new TaxonomySession(oSite);
TermStore termStore = taxonomySession.DefaultKeywordsTermStore;

// connect to the Term Store Group
var group = termStore.Groups["Mio Gruppo"];
TermSet temaChoice = null;

for (var i = 0; i < group.TermSets.Count; i++)
 {
   if (group.TermSets[i].Name == "Mio Campo")
    {
      temaChoice = group.TermSets[i];
      break;
    }
 }


TaxonomyField tagsField = (TaxonomyField)ctype.Fields.GetField("Mio Campo");


 var results = temaChoice.GetTerms("label_termine", false);
 if (results.Count > 0)
 {
   string TermGuid = Convert.ToString(results[0].Id);
   Guid TermID = new Guid(TermGuid);
   Term ToAddTerm = temaChoice.GetTerm(TermID);
   TaxonomyFieldValue taxonomyFieldValue = new                  TaxonomyFieldValue(tagsField);
   taxonomyFieldValue.TermGuid = ToAddTerm.Id.ToString();
   taxonomyFieldValue.Label = ToAddTerm.Name;
   int[] wssIds = TaxonomyField.GetWssIdsOfTerm(oSite,                  ToAddTerm.TermStore.Id,                                              ToAddTerm.TermSet.Id, ToAddTerm.Id, false, 1);
   if (wssIds.Length>0)
       taxonomyFieldValue.WssId = wssIds[0];
                      taxonomyFieldValueColl.Add(taxonomyFieldValue);
            }

item[tagsField.Id] = taxonomyFieldValueColl.ToString();
item[tagsField.TextField] = taxonomyFieldValueColl.ToString();
item.Update()