在SharePoint Online中,使用CSOM(C#)设置站点Managed Metadata列默认值时出现问题。为了简洁,我没有在我的代码中包含异常处理。下面是我有:SharePoint Online CSOM站点列默认值
// 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,但没有相关的项目在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
嗨瓦迪姆。这是一个很好的回应,也感谢你解释我错过了什么。现在我可以在TaxonomyHiddenList中看到关联的项目,而站点列看起来很好,但是当我在继承站点列的列表中创建新项目时,默认值仍然为空。我是否也需要对列表/库实现这一点? – feganmeister
您可能需要用'UpdateAndPushChanges'替换'Update'方法。更多详细信息请参阅更新后的答案(更新部分) –
非常棒,所有工作都如您所愿!谢谢Vadim = D – feganmeister