SharePoint ListItemCollection.GetById возвращает пустой список?

#c# #sharepoint #listitem

#c# #sharepoint #элемент списка

Вопрос:

Итак, я пытаюсь извлечь данные из списка sharepoint server

Единственная проблема в том, что эта часть здесь:

Коллекция.GetById(ItemId)

возвращает полностью пустой элемент списка вместо элемента списка, соответствующего идентификатору

когда я проверяю с помощью отладчика, элемент действительно находится внутри коллекции, и все данные находятся там.

Как мне это исправить или я упускаю что-то важное здесь?

         public Dictionary<string, object> GetPendingEmployeeItem(int itemId)
        {
            var list = _app.Sharepoint.Web.Lists.GetByTitle("New Employee");
            var query = new CamlQuery();
            query.ViewXml = "<View></View>";

            var collection = list.GetItems(query);
            _app.Sharepoint.Load(collection, items => items.Include(
                item => item.Id,
                item => item.DisplayName,
                item => item.FieldValuesAsText));
            _app.Sharepoint.ExecuteQuery();

            return ConvertToDictionary(collection.GetById(itemId));
        }

        private Dictionary<string, object> ConvertToDictionary(ListItem item)
        {
            var dic = new Dictionary<string, object>();
            foreach (var pair in item.FieldValuesAsText.FieldValues)
            {
                dic.Add(pair.Key, pair.Value);
            }

            return dic;
        }
  

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

1. Что происходит, когда вы добавляете пустое предложение <Where></Where> в свой ViewXml (запрос), также, возможно, вам нужно добавить поля просмотра в запрос, я не уверен.

2. Насколько я вижу, я изменил ViewXML на это <View><Where></Where></View> , и, похоже, это ничего не изменило, и что вы имеете в виду, добавляя поля просмотра, подобные этому? <FieldRef Name='ID'/>

3. Почему вы сначала запрашиваете список элементов, а затем получаете только один из них? Почему бы вам просто не использовать метод getItemById из объекта SPList? Проверьте learn.microsoft.com/en-us/previous-versions/office /…

4. Та же проблема, когда я использую предложенный метод, в ListItem нет сохраненных данных

Ответ №1:

Итак, я нашел решение. я не знаю, почему это не работало раньше, но я думаю, пока это работает сейчас, все в порядке.

Вместо того, чтобы использовать данные методы GetById / GetItemById, я просто сначала обошел их. Либо я что-то пропустил, либо эти методы не работают.

 public Dictionary<string, object> GetPendingEmployeeItem(int itemId)
    {
        var list = _app.Sharepoint.Web.Lists.GetByTitle("New Employee");
        var query = new CamlQuery();
        query.ViewXml = "<View></View>";

        var collection = list.GetItems(query);

        _app.Sharepoint.Load(collection);
        _app.Sharepoint.ExecuteQuery();

        return collection.First(item => item.Id.Equals(itemId)).FieldValues;
    }