Я новичок в Sharepoint, и после ссылки на url - Доступ к SharePoint онлайн с использованием клиентской объектной модели - Запрещенная ошибка мне удалось успешно подключиться к sharepoint и получить сведения в консольном приложении C#. Моя проблема в том, что когда я переместил тот же код на веб-сайт asp.net, он дает мне ошибку «Коллекция не была инициализирована». Вот код
using (ClientContext clientContext = new ClientContext("https://.../sites/.../"))
{
SecureString passWord = new SecureString();
foreach (char c in "abcdefghijklmnop".ToCharArray()) passWord.AppendChar(c);
clientContext.Credentials = new SharePointOnlineCredentials("[email protected]", passWord);
List list = clientContext.Web.Lists.GetByTitle("ABC DEF");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View><RowLimit>1200</RowLimit></View>";
ListItemCollection collListItem = list.GetItems(camlQuery);
clientContext.Load(collListItem, li => li.Include(
pi => pi.Id,
pi => pi["Title"],
pi => pi["Application"],
pi => pi["URL"],
pi => pi["AIR_x0020_ID"]
));
clientContext.ExecuteQuery();
List<string> listofapplications = new List<string>();
foreach (ListItem oListItem in collListItem)
{
{ Console.WriteLine(oListItem["Title"] + ", Application " + oListItem["Application"]); }
}
Console.ReadLine();
}
Это дает мне ошибку в foreach (Listitem oListItem в collListItem):
An exception of type 'Microsoft.SharePoint.Client.CollectionNotInitializedException' occurred in Microsoft.SharePoint.Client.Runtime.dll but was not handled in user code
Additional information: The collection has not been initialized. It has not been requested or the request has not been executed. It may need to be explicitly requested.
Вот подробная ошибка:
Microsoft.SharePoint.Client.CollectionNotInitializedException was unhandled by user code HResult=-2146233079 Message=The collection has not been initialized. It has not been requested or the request has not been executed. It may need to be explicitly requested.
Source=Microsoft.SharePoint.Client.Runtime StackTrace: at Microsoft.SharePoint.Client.ClientObjectCollection`1.d__0.MoveNext() at Home.btn_Click(Object sender, EventArgs e) in c:\Users\rakesh.a.srivastava\Documents\Visual Studio 2015\WebSites\DNSProvisioningPortal\Home.aspx.cs:line 45 at System.Web.UI.WebControls.Button.OnClick(EventArgs e) at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException:
Обратите внимание: у меня нет проблем с консольным приложением, но с нажатием кнопки asp.net. Я также добавил ссылки на Client и Client.Runtime! Я не могу понять, почему он работает в консоли, но не работает на веб-сайте. Мне не хватает какого-либо пространства имен, ссылки? Я сослался на эти URL-адреса Коллекция не инициализирована, Поле Sharepoint не было инициализировано в C#, Клиентская объектная модель Sharepoint Свойство или поле не инициализировано, но ничего не говорит мне о моей проблеме. Пожалуйста помоги. Спасибо
Основываясь на моем тесте, иногда мы можем игнорировать исключение в проекте aspnet. (Для вашего кода вам необходимо заменить ["XXX"] на Client_XXX)
Подготовка
Установите Microsoft.SharePointOnline.CSOM с помощью диспетчера пакетов NuGet для проецирования.
Мой тестовый код: Сначала метод расширений (необязательно для вас)
public static class CSOMExtensions
{
public static Task ExecuteQueryAsync(this ClientContext clientContext)
{
return Task.Factory.StartNew(() =>
{
clientContext.ExecuteQuery();
});
}
}
Замените код из вашего сообщения моим:
List list = clientContext.Web.Lists.GetByTitle("CustomList1");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View><RowLimit>1200</RowLimit></View>";
ListItemCollection collListItem = list.GetItems(camlQuery);
clientContext.Load(collListItem, li => li.Include(
pi => pi.Client_Title
//pi => pi["Application"],
// pi => pi["AIR_x0020_ID"]
));
//clientContext.ExecuteQueryAsync();
Task t2 = clientContext.ExecuteQueryAsync();
await t2.ContinueWith((t) =>
{
foreach (ListItem oListItem in collListItem)
{
System.Diagnostics.Debug.WriteLine(oListItem.Client_Title);
}
});
Если мы используем ["Title"] напрямую, он выйдет из строя в aspnet, но Client_XXX не будет на моей стороне.
У меня нет более глубокого исследования, почему, и я не пробовал настраиваемые поля. Я буду исследовать больше, пока у меня будет время
Я добавляю библиотеки CSOM от Nuget, можете попробовать. Я предполагаю, что локальные библиотеки DLL из шаблона VS SharePoint могут быть не самыми последними, я не уверен в этом.
Отлично, сработало !!! Сохранил свой код и обновил свои dll, и теперь все работает гладко :) Большое спасибо :) Я пометил это как ответ, к сожалению, он не регистрирует мой голос. Для всех, кто сталкивается с этой проблемой, используйте приведенный выше код и удалите все ссылки на sharepoint! в диспетчере пакетов NuGet найдите Microsoft.SharePointOnline.CSOM и установите! Это должно решить проблему. Спасибо, Сейя! :)
Привет, Сейя, я не вижу Client_Title, мне не хватает ссылки?
using System; using Microsoft.SharePoint.Client; using System.Security; using System.Threading.Tasks;
Ошибка:ListItem не содержит определения Client_Title, вам не хватает какой-либо ссылки