#c# #sharepoint-online #csom #azure-api-apps #sharepoint-list
#c# #sharepoint-online #csom #azure-api-приложения #sharepoint-список
Вопрос:
Я попытался создать простое консольное приложение, которое извлекает элементы списка из общей точки доступа в Интернете. Он отлично работает, когда я извлекаю список сайтов или заголовки списков с сайта, но я не получаю элементов списка, когда пытаюсь получить его из определенного списка. Я перечислил много примеров похожих задач, и почти все они были написаны одинаково. Вот почему я не исключаю, что причина моего случая может быть в недостаточных разрешениях (я прилагаю скриншот разрешений API).
Пожалуйста, проверьте мой код и разрешения. Любая помощь будет высоко оценена.
Код приложения
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security;
using System.Threading.Tasks;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
namespace SharePointTrigger
{
class Program
{
static async Task Main(string[] args)
{
Uri site = new Uri("https://MyCompany.sharepoint.com/sites/MyProject");
string user = $"ServiceUser@MyCompany.com";
string rawPassword = $"password";
SecureString password = new SecureString();
foreach (char c in rawPassword) password.AppendChar(c);
using (var authenticationManager = new AuthenticationManager()) //HELPER CLASS TO OBTAIN ACCESS TOKEN
using (var context = authenticationManager.GetContext(site, user, password))
{
//RETRIVING LIST TITLE - WORKS FINE
/*
Web web = context.Web;
context.Load(web.Lists,
lists => lists.Include(list => list.Title,
list => list.Id));
context.ExecuteQuery();
foreach (SP.List list in web.Lists)
{
Console.WriteLine(list.Title);
}
*/
//RETRIVING LIST ITEM
Web myWeb = context.Web;
SP.List myList = myWeb.Lists.GetByTitle("List_of_Items");
SP.ListItemCollection listItemCollection = myList.GetItems(CamlQuery.CreateAllItemsQuery());
context.Load(listItemCollection,
eachItem => eachItem.Include(
item => item,
item => item["Title"],
item => item["ID"]
)
);
context.ExecuteQuery();
foreach (SP.ListItem listItem in listItemCollection)
{
Console.WriteLine("ID: " listItem["ID"].ToString() "Title: " (string)listItem["Title"].ToString());
}
Console.ReadKey();
}
}
}
}
Разрешения API
Разрешения API
Ответ №1:
Это не похоже на проблему с разрешениями при проверке разрешений вашего приложения или проблемы с кодом.
Однако, взглянув на нижеприведенную строку :
SP.ListItemCollection listItemCollection = myList.GetItems(CamlQuery.CreateAllItemsQuery());
Вы пытаетесь ввести все элементы.
Аналогичное поведение наблюдается при возврате пустых элементов, когда список представляет собой очень большой список (> 5000 или более 12 столбцов подстановки) или список достигает порогового значения списка)
Если вы попадаете в описанный выше сценарий — вы можете создать индекс и отфильтровать элементы.
Вы можете использовать запрос CAML для фильтрации элементов вместо того, чтобы пытаться получить все элементы за один раз!
Ссылка для запроса CAML: https://techcommunity.microsoft.com/t5/sharepoint/filtering-list-item-using-caml-query-in-sharepoint/m-p/1415904
Кроме того, я бы проверил, имеют ли элементы разрешение на уровне элемента.
Настройки списка -> Дополнительные настройки
В идеале вы не должны сталкиваться с этой проблемой из-за вышеизложенного, однако эти настройки увеличивают количество областей и могут привести к превышению порогового значения раньше, потому что.
Комментарии:
1. @Mikhail — хотел проверить, помогло ли вышеупомянутое, или у вас есть какие-либо вопросы?
2. Большое вам спасибо за ваш ответ. Что касается ограничений на количество элементов, список содержит только десять элементов. Однако я принял к сведению ваши советы по дальнейшей оптимизации кода. Что касается второго предположения, я несколько раз прокручивал «Расширенный раздел», и похоже, что опция «Разрешение на уровне элемента» была удалена / заменена из этого раздела или недоступна для меня из-за отсутствия разрешения. Сталкивались ли вы с отсутствием опции «Разрешение на уровне элемента»?
3. Что такое шаблон списка? (Пользовательский список, список задач ?)
4. Кроме того, у вас есть несколько столбцов поиска?
5. Шаблон списка — «GenericList» («CustomList», ListTemplateId= 100), и в нем нет вычисляемых столбцов.