如何在Sharepoint App中检索Sharepoint列表?

时间:2015-02-02 19:44:40

标签: javascript list sharepoint sharepoint-2013 sharepoint-list

我的应用和我的网站内容列表如下:

enter image description here

从我的应用程序中,我想读取,编写和操作TestList中的数据。

TestList的内容如下:

enter image description here

我一直试图用这个来读它:

function setup() {

    var context = SP.ClientContext.get_current();

    var lists = context.get_web().get_lists();
    var list = lists.getByTitle('TestList');
    var listItem = list.getItemById("Title1"); // is Id the list title?

    context.load(listItem);
    context.executeQueryAsync(onLoadSuccess, onLoadFail);

    console.log(listItem);

}

function onLoadFail(sender, args) {
    alert(args.get_message());
    console.log(args.get_message());
};

除了herehere概述的其他一些方法外,我还经常受到错误的欢迎:

  

列出' TestList'在具有URL的站点上不存在   ' https://mysite.sharepoint.com/sites/developer/TestApp'

我认为它可能与TestList是一个与TestApp在同一目录级别的应用程序有关,而不是TestApp中的列表,这就是我包含图片的原因。但是,我无法弄清楚如何在TestApp中嵌入TestList。

我在应用程序中制作列表的另一个问题是,每当我更新和重新部署TestApp时,它都会擦除TestList的任何新更新。

有人可以看到我做错了什么或提出一些建议吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您需要使用正确的ClientContext。



var hostUrl = decodeURIComponent(getQueryStringParameter("SPHostUrl"));
currentcontext = new SP.ClientContext.get_current();
hostcontext = new SP.AppContextSite(currentcontext, hostUrl);
web = hostcontext.get_web(); // hostcontext instead of currentcontext

var lists = web .get_lists(); 
var list = lists.getByTitle('TestList');
var listItem = list.getItemById(1); // Id is Id (number)

context.load(listItem);
context.executeQueryAsync(onLoadSuccess, onLoadFail);




更多详情:http://blog.appliedis.com/2012/12/19/sharepoint-2013-apps-accessing-data-in-the-host-web-in-a-sharepoint-hosted-app/

答案 1 :(得分:0)

我认为你走在正确的轨道上。您似乎希望使用主机Web上的列表,但您正在使用appweb端点。我可以想到两个选择:

  1. 在您的应用中创建列表实例(转到在Visual Studio中添加项目,您可以选择SharePoint项目并选择列表),然后在部署应用程序时该列表将存在于appweb中。正如您所说,当您重新部署应用程序时,这将清除列表,因为它将卸载并重新安装应用程序。如果您正在制作,更新应用程序将不会执行相同的操作。
  2. 对主机网站进行跨域调用,直接使用主机网络列表。这可能是更好的解决方案,具体取决于应用程序的性质。请记住,您必须确保为应用程序设置权限才能使网站集具有权限才能使调用生效,然后您必须捕获主机上下文才能使用主机SP.Web对象。我认为this link可能会有所帮助。