четверг, 1 июля 2010 г.

SharePoint 2010 CSOM: ServerException - Item does not exist. It may have been deleted by another user.

Оказывается если при работе с клиентской моделью между вызовами AddItem() и Update() для item'а произойдет вызов ExecuteQuery() то вылетит "ServerException - Item does not exist. It may have been deleted by another user."

Столкнулся с этим когда при создании Item мне потребовалось заполнить поля на основании уже существующей информации. Вариантов решения я вижу два, либо сразу после AddItem() делать Update() (это может привести к проблемам с некоторыми типами листов , например с Disucssion), либо получать все необходимое перед созданием.

Примерчик вызывающий ошибку:
using (var clientContext = new ClientContext(@"http://server"))
{
    var lst = clientContext.Web.Lists.GetByTitle("Tasks");

    var lci = new ListItemCreationInformation();
    lci.UnderlyingObjectType = FileSystemObjectType.File;
    var it = lst.AddItem(lci);
    //it1.Update(); 
    clientContext.Load(it);
    clientContext.ExecuteQuery();

    it["Title"] = "check1";

    it.Update();
    clientContext.ExecuteQuery();

    Console.WriteLine(it.Id);
}

Комментариев нет: