2016-01-14 2 views
1

Я новичок в программирование SharePoint и имею следующую проблему:Sharepoint Online: Создать и использовать список в Provider Hosted App (C#)

Я добавил список в моем проект Visual Studio SP (SampleAddInList). Теперь я хочу получить список в моей программе, чтобы заполнить примерный элемент.

Вот скриншот моего визуального проекта студии со списком: enter image description here

Вот мой код, где я пытаюсь получить список для добавления элемента:

private void AddUserToList(string accessToken) 
    { 
     if (IsPostBack) 
     { 
      sharepointUrl = new Uri(Request.QueryString["SPHostUrl"]); 
     } 


     ClientContext clientContext = 
       TokenHelper.GetClientContextWithAccessToken(
        sharepointUrl.ToString(), accessToken); 


     // Load the properties for the web object. 
     Web web = clientContext.Web; 
     clientContext.Load(web); 
     clientContext.ExecuteQuery(); 

     // Get the current user. 
     clientContext.Load(web.CurrentUser); 
     clientContext.ExecuteQuery(); 
     currentUser = clientContext.Web.CurrentUser.Email; 

     // Load the list "SampleAddInUserList" 
     List userList = web.Lists.GetByTitle("SampleAddInList"); 
     clientContext.Load<List>(userList); 
     clientContext.ExecuteQuery(); 
     ListItemCreationInformation info = new ListItemCreationInformation(); 

     Microsoft.SharePoint.Client.ListItem newItem = userList.AddItem(info); 
     newItem.ParseAndSetFieldValue("Title", "Test"); 
     newItem.ParseAndSetFieldValue("Email", currentUser); 
     newItem.Update(); 
     clientContext.ExecuteQuery(); 
    } 

Когда я запускаю проект , я получаю следующее сообщение об ошибке:

List 'SampleAddInList' does not exist at site with URL 'https://xxx.sharepoint.com/sites/test'. 

Вот скриншот ошибки: enter image description here

Похоже, приложение пытается получить список с тестового сайта SP, но там отсутствует список (проект должен создать список сам по себе, если он не существует, не так ли?).

Когда я пытаюсь использовать список (другое имя списка!), Которое я создал в веб-интерфейсе SP через «Добавить приложение», доступ работает отлично.

Может кто-нибудь дать подсказку ???

Это что-то связано с контекстным URL, который я использую ??? смотри также мой другой вопрос: Sharepoint Online: Difference between SPAppWebUrl & SPHostUrl

+0

Попробуйте использовать SPAppWebUrl вместо SPHostUrl. – STORM

ответ

1

It seems that the app tries to get the list from the SP test Site, but the list is missing there (the project should create the list by itself if not exisiting, shouldn't it??).

Это верно, ошибка возникает, поскольку ListCollection.GetByTitle method бросает исключение, если список не существует.

Вы могли бы рассмотреть следующий метод расширения, чтобы получить или создать список, если он не существует:

using System.Linq; 
using Microsoft.SharePoint.Client; 

namespace SharePoint.Client.Extensions 
{ 
    public static class ListCollectionExtensions 
    { 
     public static List EnsureList(this ListCollection lists, string listTitle, ListTemplateType listTemplateType) 
     { 
      var ctx = lists.Context; 
      var result = ctx.LoadQuery(lists.Where(l => l.Title == listTitle)); 
      ctx.ExecuteQuery(); 
      if (!result.Any()) 
      { 
       var lci = new ListCreationInformation(); 
       lci.Title = listTitle; 
       lci.TemplateType = (int)listTemplateType; 
       var list = lists.Add(lci); 
       ctx.Load(list); 
       ctx.ExecuteQuery(); 
       return list; 
      } 
      return result.FirstOrDefault(); 
     } 
    } 
} 

Использование

var customList = ctx.Web.Lists.EnsureList("Notes", ListTemplateType.GenericList); 
var documentsLibrary = ctx.Web.Lists.EnsureList("Documents", ListTemplateType.DocumentLibrary); 
var tasksList = ctx.Web.Lists.EnsureList("Tasks",ListTemplateType.TasksWithTimelineAndHierarchy); 
+1

Ваш код идеально подходит для создания списков, спасибо! –

+0

Но у меня есть следующая проблема: я уже создал список в части SP моего приложения, где уже определены столбцы. Есть ли способ изменить ваш код, чтобы он использовал этот список? –

+0

Фактически указанный метод не создает список, если список уже существует, он возвращает существующий. –

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