我正在编写一些ETL代码来在外部系统和SharePoint Online之间移动数据。
我正在使用nuget包Microsoft.SharePointOnline.CSOM与C#中的SP进行通信。
我使用以下代码更新字段值。
spListItem[fieldName] = "Test Value";
spListItem.Update();
spClientContext.ExecuteQuery();
我注意到了Choice字段,如果我保存一个不存在的值,SharePoint就不会抱怨,只是添加了值即使允许'填写'选项设置为NO。
SharePoint中的任何位置都有验证功能吗?我看到了一些像ValidateUpdateListItem这样的方法,但它们似乎没有做我需要的。
答案 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();
}