Mel*_*ats 12 sharepoint sharepoint-2010
情况:
我在Term Store中有一堆术语和一个使用它们的列表.
许多术语尚未使用,并且在TaxonomyHiddenList中尚不可用.如果他们还没有,那么他们没有ID,我也无法将它们添加到列表项中.
有一种方法,GetWSSIdOfTerm在Microsoft.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)
问候
如果使用
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)
在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)
| 归档时间: |
|
| 查看次数: |
28106 次 |
| 最近记录: |