以编程方式在列表项上设置TaxonomyField

Mel*_*ats 12 sharepoint sharepoint-2010

情况:

我在Term Store中有一堆术语和一个使用它们的列表.

许多术语尚未使用,并且在TaxonomyHiddenList中尚不可用.如果他们还没有,那么他们没有ID,我也无法将它们添加到列表项中.

有一种方法,GetWSSIdOfTermMicrosoft.SharePoint.Taxonomy.TaxonomyField一个本应返回一个长期的ID为特定网站.

如果该术语已经使用并且存在于TaxonomyHiddenList中,则会返回ID,但如果不存在,则返回0.

有没有办法以编程方式将术语添加到TaxonomyHiddenList或强制它发生?

小智 8

不要用

TaxonomyFieldValue tagValue = new TaxonomyFieldValue(termString);
myItem[tagsFieldName] = tagValue;"
Run Code Online (Sandbox Code Playgroud)

因为当您要抓取此项目时会出现错误.

要在分类法字段中设置值,您只需使用:

tagsField.SetFieldValue(myItem , myTerm);
myItem.Update();"
Run Code Online (Sandbox Code Playgroud)

问候


Vad*_*hev 7

如果使用

string termString = String.Concat(myTerm.GetDefaultLabel(1033),
                                            TaxonomyField.TaxonomyGuidLabelDelimiter, myTerm.Id);  
Run Code Online (Sandbox Code Playgroud)

然后在实例化TaxonomyFieldValue期间

TaxonomyFieldValue tagValue = new TaxonomyFieldValue(termString);
Run Code Online (Sandbox Code Playgroud)

将抛出异常消息

价值不在预期范围内

您还提供了WssId来构造术语字符串,如下所示

// We don't know the WssId so default to -1
       string termString = String.Concat("-1;#",myTerm.GetDefaultLabel(1033),
                                                    TaxonomyField.TaxonomyGuidLabelDelimiter, myTerm.Id);  
Run Code Online (Sandbox Code Playgroud)


Gut*_*tek 5

在MSDN上,您可以找到如何创建Term并将其添加到TermSet.样本由TermSetItem类描述提供.TermSet应该有一个继承自TermSetItem的方法CreateTerm(name,lcid).因此,您可以在int catch语句下面的示例中使用它,即:

catch(...)
{
   myTerm = termSet.CreateTerm(myTerm, 1030);
   termStore.CommitAll();
}
Run Code Online (Sandbox Code Playgroud)

至于将术语分配给列表,此代码应该有效(我不确定"标签"字段的名称,但是很容易找到分类字段的正确内部名称):

using (SPSite site = new SPSite("http://myUrl")) 
{
    using (SPWeb web = site.OpenWeb())
    {
        string tagsFieldName = "Tags";
        string myListName = "MyList";
        string myTermName = "myTerm";

        SPListItem myItem = web.Lists[myListName].GetItemById(1);
        TaxonomyField tagsField = (TaxonomyField) myList.Fields[tagsFieldName];
        TaxonomySession session = new TaxonomySession(site);
        TermStore termStore = session.TermStores[tagsField.SspId];
        TermSet termSet = termStore.GetTermSet(tagsField.TermSetId);
        Term myTerm = null;

        try
        {
            myTerm = termSet.Terms[myTermName];
        }
        catch (ArgumentOutOfRangeException)
        {
            // ?
        }

        string termString = String.Concat(myTerm.GetDefaultLabel(1033),
                                            TaxonomyField.TaxonomyGuidLabelDelimiter, myTerm.Id);

        if (tagsField.AllowMultipleValues)
        {
            TaxonomyFieldValueCollection tagsValues = new TaxonomyFieldValueCollection(tagsField);
            tagsValues.PopulateFromLabelGuidPairs(
                String.Join(TaxonomyField.TaxonomyMultipleTermDelimiter.ToString(),
                            new[] { termString }));
            myItem[tagsFieldName] = tagsValues;

        }
        else
        {
            TaxonomyFieldValue tagValue = new TaxonomyFieldValue(termString);
            myItem[tagsFieldName] = tagValue;
        }
        myItem.Update();
    }
}
Run Code Online (Sandbox Code Playgroud)