自上次提取以来,该对象已被另一个用户更新

时间:2017-01-18 12:33:09

标签: c# sharepoint sharepoint-2016

我添加了somefield以便我的SharePoint解决方案,但我一直收到错误the object has been updated by another user since it was last fetched.

foreach (var field in new PageAndFieldData().Fields)
{

    var spField = web.Fields.FirstOrDefault(i => i.InternalName == field.field_name); // if dont exist = create

    if (spField == null)
    {
        var fieldXml = field.Xml;
        var newspField = web.Fields.AddFieldAsXml(fieldXml, false, AddFieldOptions.DefaultValue);
        if (groups.Contains(field.group_name))
            newspField.Group = field.group_name;
        else
        {
            newspField.Group = field.group_name;
        }
        _Ctx.Load(newspField);
        _Ctx.ExecuteQuery(); <--- This line throws the error
    }
}

有人可以指出为什么它一直在抛出错误。

2 个答案:

答案 0 :(得分:1)

确保字段架构(在您的案例中为fieldXml变量)不包含Version属性,否则SharePoint会认为该字段正在更新。

例如,使用以下字段架构创建字段时会发生错误:

<Field Version='1' Type='Geolocation' DisplayName='Location' /> 

并且不会与:

<Field Type='Geolocation' DisplayName='Location' />

答案 1 :(得分:0)

可能存在与该列表相关联的工作流程,该工作流程会被触发并与您的代码同时修改该项目。

如果没有工作流程,那么该项目可能会被其他用户修改,就像它说的那样。关键是,从您获取项目到在SharePoint中更新它时,SP中的项目不应该被SP修改(由他人),否则SP会出现“冲突的更改”错误。