如何防止在通过 CSOM 保存到选项字段时填充值
本文关键字:字段 选项 填充 保存 何防止 CSOM | 更新日期: 2023-09-27 17:56:44
我正在编写一些ETL代码来在外部系统和SharePoint Online之间移动数据。
我正在使用 nuget 包 Microsoft.SharePointOnline.CSOM 在 C# 中与 SP 通信。
我使用以下代码来更新我的字段值。
spListItem[fieldName] = "Test Value";
spListItem.Update();
spClientContext.ExecuteQuery();
我注意到使用"选项"字段,如果我保存不存在的值,即使"允许填写"选项设置为"否",SharePoint 也不会抱怨,只会添加该值。
SharePoint 中是否有验证功能? 我看到了一些方法,如ValidateUpdateListItem,但它们似乎没有做我需要的。
您可以考虑在保存选项字段值之前验证其值,如下所示:
static class ListItemExtensions
{
public static bool TryValidateAndUpdateChoiceFieldValue(this ListItem item, string fieldName, string fieldValue)
{
var ctx = item.Context;
var field = item.ParentList.Fields.GetByInternalNameOrTitle(fieldName);
ctx.Load(field);
ctx.ExecuteQuery();
var choiceField = ctx.CastTo<FieldChoice>(field);
if (!choiceField.FillInChoice)
{
var allowedValues = choiceField.Choices;
if (!allowedValues.Contains(fieldValue))
{
return false;
}
}
item.Update();
return true;
}
}
在这种情况下,
ListItem
一旦验证 成功。
用法
using (var ctx = new ClientContext(webUri))
{
var list = ctx.Web.Lists.GetByTitle(listTitle);
var listItem = list.GetItemById(itemId);
if(listItem.TryValidateAndUpdateChoiceFieldValue(fieldName,fieldValue))
ctx.ExecuteQuery();
}