2

在 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对象中,以便将术语值保存在字段中吗?

谢谢你。

4

2 回答 2

2

我找到了我的解决方案。这里是 :

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

希望它可以帮助别人。

于 2011-12-01T10:34:15.903 回答
1

这是一个可以工作的示例:

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 字符串中的值必须包含 | 和 ; 分隔的标签列表。如果标签不存在,您必须在将其保存到项目之前创建它并获取其 ID。

HTH 沃伊塔

于 2011-11-30T18:13:26.227 回答