【发布时间】:2017-01-30 18:17:41
【问题描述】:
在 SharePoint Online 中,我在使用 CSOM (C#) 设置网站托管元数据列默认值时遇到问题。为简洁起见,我的代码中没有包含异常处理。这是我所拥有的:
// Code snippet for what I'm trying to achieve
using (ClientContext ctx = NewCtx(SiteInfo.Url)) // NewCtx is just a static member I use to return a ClientContext object
{
Field taxColumn = (Field)ctx.Web.Fields.GetByTitle("myMMColumnName");
ctx.Load(taxColumn);
ctx.ExecuteQuery();
TaxonomyFieldValue termField = new TaxonomyFieldValue();
termField.Label = "My MM Term";
termField.TermGuid = "b269aef7-6f47-4b02-bf80-7edfb7166a30";
termField.WssId = -1;
taxColumn.DefaultValue = value;
// Place holder for added code (see below)
taxColumn.Update();
ctx.Load(taxColumn);
ctx.ExecuteQuery();
}
该值出现在 UI 中的 Site Columns 下,但没有在 TaxonomyHiddenList 中创建关联项,这是有道理的,因为将查找 WssId 设置为“-1”无法解决,因此默认值没有查找并在列表和库级别列中显示为空。
我找到的最接近的解决方案是一篇文章(尽管不是 CSOM 并在下面链接)建议创建一个“虚拟”列表项(针对消耗 MM 列的列表)。这将触发在 TaxonomyHiddenList 中创建项目,但文章建议不要提交“虚拟”项目创建。我也试过这个,但似乎没有效果。这是我添加到前面代码块中提到的占位符的代码:
List myList = ctx.Web.Lists.GetByTitle("My List");
ctx.Load(myList);
ctx.ExecuteQuery();
TaxonomyField taxField = ctx.CastTo<TaxonomyField>(myList.Fields.GetByTitle("myMMColumnName"));
ListItemCreationInformation newItemInfo = new ListItemCreationInformation();
ListItem newItem = myList.AddItem(newItemInfo);
newItem["myMMColumnName"] = termField;
taxField.SetFieldValueByValue(newItem, termField);
本文使用了 .SetFieldValue 方法,该方法在 CSOM 中不可用,因此我可能错误地假设 .SetFieldValueByValue 具有可比性。
感谢阅读!
参考资料: 文章-http://sharepointificate.blogspot.com/2014/04/setting-managed-metadata-column-default.html
【问题讨论】:
标签: c# sharepoint sharepoint-online csom