Передать по значению - Имя списка
Может кто-нибудь сказать мне, что я здесь делаю не так? Я пытаюсь передать имя списка в метод, который удалит все строки в списке:
public static void DeleteLastUpdate(Microsoft.SharePoint.Client.List oList)
{
using (var context = new ClientContext(FrontEndAppUrl))
{
var ss = new System.Security.SecureString();
Array.ForEach("hhh".ToCharArray(), (c) => { ss.AppendChar(c); });
context.Credentials = new SharePointOnlineCredentials("yyy", ss);
var web = context.Web;
ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View><Query><OrderBy><FieldRef Name='ID' Ascending='TRUE' /></OrderBy></Query></View>";
ListItemCollection collListItem = oList.GetItems(camlQuery);
context.Load(collListItem);
context.ExecuteQuery();
foreach (ListItem oListItem in collListItem)
{
string i = oListItem["ID"].ToString(); ;
ListItem ListItemToDelete = oList.GetItemById(i);
ListItemToDelete.DeleteObject();
context.ExecuteQuery();
}
oList.Update();
}
}
public static void GetCountry()
{
using (var context = new ClientContext(FrontEndAppUrl))
{
Microsoft.SharePoint.Client.List oList_Country = context.Web.Lists.GetByTitle("LISTNAME");
DeleteLastUpdate(oList_Country);
}
}
Я получаю ошибку в context.Load(collListItem);
Он говорит, что объект используется в контексте, отличном от того, который связан с объектом. Как еще можно передать значение списка в метод Delete()?
2 ответа
Именно то, что говорит исключение, - это то, что происходит. Вы создаете oList_Country
в контексте GetCountry()
а затем передать его DeleteLastUpdate()
где вы работаете в другом контексте.
Может быть, вам стоит подумать о передаче контекста DeleteLastUpdate()
через параметр. Тогда ваш код станет примерно таким:
public static void DeleteLastUpdate(ClientContext context, Microsoft.SharePoint.Client.List oList)
{
// You should not create a context here, but use the supplied context
// using (var context = new ClientContext(FrontEndAppUrl))
// {
var ss = new System.Security.SecureString();
...
}
public static void GetCountry()
{
using (var context = new ClientContext(FrontEndAppUrl))
{
Microsoft.SharePoint.Client.List oList_Country = context.Web.Lists.GetByTitle("LISTNAME");
DeleteLastUpdate(context, oList_Country); // Pass the context
Я думаю, вы можете попытаться повторно использовать контекст в DeleteLastUpdate
метод приобрел в GetCountry
метод. КСТАТИ DeleteLastUpdate
выглядит неэффективно, выполняя много запросов.