Как добавить термин в TermCollection (поле таксономии) - PullRequest
2 голосов
/ 30 ноября 2011

В sharePoint 2010 я хочу установить таксономические значения поля документа. Поле может принимать несколько терминов таксономии.

Я делаю это неправильно, потому что сбой приведения taxoTerms.Concat(terms) в TermCollection классе:

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

Знаете ли вы, как я могу добавить термины в мой TermCollection объект, чтобы я мог сохранить значения терминов в поле?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Я нашел свое решение.Вот оно:

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

Надеюсь, это поможет другим.

1 голос
/ 30 ноября 2011

Вот пример, который может сработать:

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

Я не тестировал его на жизненной системе, поэтому возможна дополнительная работа, но я надеюсь, что вы поняли общую идею.Значения в строке entry.Value должны содержать |а также ;разделенный список тегов.Если тег не существует, вы должны создать его и получить его идентификатор, прежде чем сохранить его в элементе.

HTH Vojta

...