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

时间:2015-06-17 20:08:18

标签: c# sharepoint csom

我正在编写一些ETL代码来在外部系统和SharePoint Online之间移动数据。

我正在使用nuget包Microsoft.SharePointOnline.CSOM与C#中的SP进行通信。

我使用以下代码更新字段值。

    spListItem[fieldName] = "Test Value";
    spListItem.Update();
    spClientContext.ExecuteQuery();

我注意到了Choice字段,如果我保存一个不存在的值,SharePoint就不会抱怨,只是添加了值即使允许'填写'选项设置为NO。

SharePoint中的任何位置都有验证功能吗?我看到了一些像ValidateUpdateListItem这样的方法,但它们似乎没有做我需要的。

1 个答案:

答案 0 :(得分:1)

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

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

 }