gpt4 book ai didi

c# - SharePoint Online CSOM 网站栏默认值

转载 作者:行者123 更新时间:2023-11-30 23:20:42 31 4
gpt4 key购买 nike

在 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 中,但没有在 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

最佳答案

SetFieldValue Method属于TaxonomyField类,表示行:

Field taxColumn = (Field)ctx.Web.Fields.GetByTitle(taxFieldTitle);

需要替换为:

var taxColumn = ctx.CastTo<TaxonomyField>(ctx.Web.Fields.GetByTitle(taxFieldTitle));

TaxonomyField taxColumn = ctx.CastTo<TaxonomyField>(ctx.Web.Fields.GetByTitle(taxFieldTitle));

一旦 TaxonomyField 被初始化,默认值可以设置如下:

//get taxonomy field
var taxColumn = ctx.CastTo<TaxonomyField>(ctx.Web.Fields.GetByTitle(taxFieldTitle));
ctx.Load(taxColumn);
ctx.ExecuteQuery();
//initialize taxonomy field value
var defaultValue = new TaxonomyFieldValue();
defaultValue.WssId = -1;
defaultValue.Label = termLabel;
defaultValue.TermGuid = termId.ToString();
//retrieve validated taxonomy field value
var validatedValue = taxColumn.GetValidatedString(defaultValue);
ctx.ExecuteQuery();
//set default value for a taxonomy field
taxColumn.DefaultValue = validatedValue.Value;
taxColumn.Update();
ctx.ExecuteQuery();

Note: TaxonomyField.GetValidatedString method is utilized for validation of taxonomy field value which in turn includes the resolving of WssId value

更新

使用Field.UpdateAndPushChanges method将更改传播到所有使用该字段的列表

所以,替换:

taxColumn.Update();
ctx.ExecuteQuery();

与:

taxColumn.UpdateAndPushChanges(true);
ctx.ExecuteQuery();

关于c# - SharePoint Online CSOM 网站栏默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39634481/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com