SPQuery – Какие поля (ViewFields) необходимы для обновления элемента списка?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/85556

  •  10-12-2019
  •  | 
  •  

Вопрос

Какие поля в SPQuery необходимы для обновления элемента списка?

SPQuery query = new SPQuery();
query.Query = @"
    <OrderBy>
        <FieldRef Name='ID' Ascending='true' />
    </OrderBy>";
query.ViewFields = string.Concat(
    "<FieldRef Name='ID' />",
    "<FieldRef Name='Title' />");
query.ViewFieldsOnly = true;
query.RowLimit = 2000; // Effective batch size.
query.QueryThrottleMode = SPQueryThrottleOption.Override;

Если я побегу listItem.Update() без изменения каких-либо полей обновление завершается с ошибкой 'value does not fall within the expected range'.Но если я изменюсь ViewFieldsOnly значение false, обновление пройдет успешно.Мой вопрос: какие поля необходимы для успешного обновления элемента списка (за исключением полей, которые могли быть изменены)?

Это было полезно?

Решение

AFAIK нигде не документировано, какие поля должны быть включены, чтобы иметь возможность выполнять обновление после запроса с ViewFieldOnly, для которого установлено значение true, но в соответствии с SPQuery.ViewFieldsOnly и обновление SPListItem это среди других идентификаторов, UniqueID, типа объекта...

НО я определенно рекомендую даже не пытаться, просто установите для ViewFieldsOnly значение false, и тогда вы будете уверены, что получите то, что необходимо, даже в будущих версиях SharePoint.

Другие советы

У меня тоже была эта проблема, и мне удалось ее обойти.Я включил идентификатор ListItem в ViewFields, а затем создал новую переменную SPListItem, используя List.GetItemByID.Затем вы можете выполнить обычное обновление элемента списка, используя эту новую переменную.

        SPQuery q = new SPQuery();
        q.Query = "Query here";
        q.ViewFields = "...Fields Here...<FieldRef Name='ID' />";
        q.ViewFieldsOnly = true;

        foreach (SPListItem item in list.GetItems(q))
        {
            SPListItem i = list.GetItemById(int.Parse(item["ID"].ToString()));
            //code to update item here
            i.Update();
        }

Возможно, это не лучшее решение, но оно помогло мне начать работу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top