2017-02-09 17 views
0

При удалении списка a при возникновении ошибки «Список не существует». Моя последовательность:Список удалений не работает: «Список не существует»

try { deleteList("myList"); } catch { } // delete list in case it exists 
createList("myList"); 
// Do something with the list. Does not matter 
deleteList("myList"); 

Если список не существует в то время, когда я запускаю код, все работает нормально. Если, однако, список существует, я получаю ошибку. Когда я просматриваю код, я вижу (в браузере), что список действительно удаляется и воссоздается.

Когда я создаю новый clientContext между createList() и deleteList(), тогда он работает. Я предполагаю, что что-то в clientContext испортилось.

Я не думаю, что он должен делать со своими функциями, но в любом случае, здесь они:

public void CreateList(string title) 
    { 
     ListCreationInformation lci = new ListCreationInformation(); 
     lci.Title = title; 
     lci.TemplateType = (int)ListTemplateType.GenericList; 
     List spList = context.Web.Lists.Add(lci); 
     context.Load(spList); 
     spList.Update(); 
     context.ExecuteQuery(); 
    } 

    public void DeleteList(string listname) 
    { 
     List spList = context.Web.Lists.GetByTitle(listname); 
     spList.DeleteObject(); 
     context.ExecuteQuery(); 
    } 

ответ

0

@Johannes Я буду говорить о том случае, когда вы код не где список уже существует.

  1. Сначала вы получите ClientContext, который содержит информацию о всех списках, включая свой список: MyList
  2. Затем вызывается функция deleteList ("MyList"); который удалит ваш список без каких-либо проблем.
  3. Но когда вы пытаетесь воссоздать список с тем же именем со старым ClientContext, он будет ошибочным, поскольку он имеет информацию о состоянии sharepoint перед удалением списка.

Следовательно, из-за несогласованности в контексте, он будет ошибочным. Как вы уже упоминали, просто создайте новый ClientContext после удаления «myList», и он будет работать нормально.

+0

Благодарим за это подтверждение. Я весьма признателен. Была бы возможность сделать это без повторного создания клиентского контекста, например. путем удаления сохраненного состояния в контексте клиента. –

+0

Удалить ExecuteQuery() из всех функций, таких как: CreateList (название строки) и DeleteList (имя строки), и называть его ТОЛЬКО ОДИН РАЗ в конце вашего кода. Не уверен, что это сработает или нет. – Vaibhav

 Смежные вопросы

  • Нет связанных вопросов^_^