Search code examples
sharepointtaxonomy

How to add a term to TermCollection (taxonomy field)


In sharePoint 2010, I want to set taxonomy values of a document field. The field can take multiple taxonomy terms.

I am doing it the wrong way because the cast of taxoTerms.Concat(terms) in TermCollection class fails :

    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); 
    }

Do you know how can I add terms to my TermCollection object so I can save the term values in the field ?


Solution

  • I found my solution. Here it is :

    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);
    } 
    

    Hope it helps others.