如何防止在通过 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,但它们似乎没有做我需要的。

如何防止在通过 CSOM 保存到选项字段时填充值

您可以考虑在保存选项字段值之前验证其值,如下所示:

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();
 }