Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sharepoint 如何将术语添加到TermCollection(分类字段)_Sharepoint_Taxonomy_Term - Fatal编程技术网

Sharepoint 如何将术语添加到TermCollection(分类字段)

Sharepoint 如何将术语添加到TermCollection(分类字段),sharepoint,taxonomy,term,Sharepoint,Taxonomy,Term,在sharePoint 2010中,我想设置文档字段的分类值。该字段可以接受多个分类术语 我这样做是错误的,因为在TermCollection类中对taxoTerms.Concat(terms)的强制转换失败: TaxonomyField taxoField = file.Item.Fields.GetFieldByInternalName(entry.Key) as TaxonomyField; TaxonomySession taxoSessi

在sharePoint 2010中,我想设置文档字段的分类值。该字段可以接受多个分类术语

我这样做是错误的,因为在
TermCollection
类中对
taxoTerms.Concat(terms)
的强制转换失败:

    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); 
    }
TaxonomyField taxoField=file.Item.Fields.GetFieldByInternalName(entry.Key)
作为分类学领域;
TaxonomySession TaxonomySession=新的TaxonomySession(web.Site);
TermStore store=taxoSession.TermStores[taxoField.SspId];
TermSet TermSet=store.GetTermSet(taxoField.TermSetId);
if(taxoField.AllowMultipleValues)
{   
字符串[]taxoValues=entry.Value.Split(“;”);
TermCollection taxoTerms=termSet.GetTerms(taxoValues[0],true);
对于(int j=1;j0)
{
taxoTerms=(术语集合)taxoTerms.Concat(术语);
}
}
taxoField.SetFieldValue(file.Item,taxoTerms);
}
您知道如何将术语添加到我的
TermCollection
对象中,以便将术语值保存在字段中吗


谢谢。

以下是一个可能有效的示例:

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,然后才能将其保存到项目中


瞧,我找到了解决办法。这是:

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);
} 
TaxonomyField-taxoField=
file.Item.Fields.GetFieldByInternalName(entry.Key)作为TaxonomyField;
TaxonomySession TaxonomySession=新的TaxonomySession(web.Site);
TermStore store=taxoSession.TermStores[taxoField.SspId];
TermSet TermSet=store.GetTermSet(taxoField.TermSetId);
if(taxoField.AllowMultipleValues)
{   
字符串[]taxoValues=entry.Value.Split(“;”);
TermCollection terms=termSet.GetAllTerms();
List taxonomyValueList=taxoValues.ToList();
TaxonomyFieldValueCollection fieldValues=新的TaxonomyFieldValueCollection(TaxOfeld);
foreach(术语中的术语)
{
if(taxonomyValueList.Contains(term.Name))
{
TaxonomyFieldValue fieldValue=新的TaxonomyFieldValue(TaxOfeld);
fieldValue.TermGuid=term.Id.ToString();
fieldValue.Label=term.Name;
fieldValue.Add(fieldValue);
}
}
taxoField.SetFieldValue(file.Item,fieldvalue);
} 

希望它能帮助其他人。

谢谢你的建议。我增加了另一种方法来做这项工作。