#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;
}