在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