2011-11-30 6 views
2

Dans sharePoint 2010, je souhaite définir des valeurs de taxonomie d'un champ de document. Le champ peut prendre plusieurs termes de taxonomie.Comment ajouter un terme à TermCollection (champ taxonomie)

Je le fais dans le mauvais sens parce que le casting de taxoTerms.Concat(terms) dans TermCollection classe échoue:

TaxonomyField taxoField = file.Item.Fields.GetFieldByInternalName(entry.Key) 
       as TaxonomyField; 

    TaxonomySession taxoSession = new TaxonomySession(web.Site); 

    TermStore store = taxoSession.TermStores[taxoField.SspId]; 

    TermSet termSet = store.GetTermSet(taxoField.TermSetId); 

    if (taxoField.AllowMultipleValues) 
    { 
     string[] taxoValues = entry.Value.Split(';'); 

     TermCollection taxoTerms = termSet.GetTerms(taxoValues[0], true); 

     for (int j = 1; j < taxoValues.Length; j++) 
     { 
      TermCollection terms = termSet.GetTerms(taxoValues[j], true); 

      if (terms.Count > 0) 
      { 
       taxoTerms = (TermCollection)taxoTerms.Concat(terms); 
      } 
     } 

     taxoField.SetFieldValue(file.Item, taxoTerms); 
    } 

Savez-vous comment puis-je ajouter des termes à mon objet TermCollection afin que je puisse enregistrer les valeurs à long terme dans le domaine ?

Merci.

Répondre

2

J'ai trouvé ma solution. Le voici:

TaxonomyField taxoField = 
    file.Item.Fields.GetFieldByInternalName(entry.Key) as TaxonomyField; 

TaxonomySession taxoSession = new TaxonomySession(web.Site); 

TermStore store = taxoSession.TermStores[taxoField.SspId]; 

TermSet termSet = store.GetTermSet(taxoField.TermSetId); 

if (taxoField.AllowMultipleValues) 
{ 
    string[] taxoValues = entry.Value.Split(';'); 

    TermCollection terms = termSet.GetAllTerms(); 

    List<string> taxonomyValueList = taxoValues.ToList<string>(); 

    TaxonomyFieldValueCollection fieldValues = new TaxonomyFieldValueCollection(taxoField); 

    foreach (Term term in terms) 
    { 
     if (taxonomyValueList.Contains(term.Name)) 
     { 
      TaxonomyFieldValue fieldValue = new TaxonomyFieldValue(taxoField); 

      fieldValue.TermGuid = term.Id.ToString(); 
      fieldValue.Label = term.Name; 
      fieldValues.Add(fieldValue); 
     } 
    } 

    taxoField.SetFieldValue(file.Item, fieldValues); 
} 

Espérons que cela aide les autres.

1

Voici un exemple qui pourrait fonctionner:

var item = file.Item; 
var taxonomyField = item.Fields.GetFieldByInternalName(entry.Key); 
var values = new TaxonomyFieldValueCollection(taxonomyField); 
values.PopulateFromLabelGuidPairs(entry.Value); 
item[entry.Key] = values; 
item.Update(); 

Je n'ai pas testé sur un système de vie donc il peut y avoir un peu de travail supplémentaire, mais j'espère que vous avez l'idée générale. Les valeurs de la chaîne entry.Value doivent contenir le | et ; liste séparée des étiquettes. Si la balise n'existe pas, vous devez la créer et obtenir son identifiant avant de l'enregistrer dans l'élément.

HTH Vojta

+0

merci pour votre proposition. J'ai ajouté une autre façon de faire le travail. – Dino

Questions connexes