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

How to retrieve Sharepoint List in Sharepoint App?

我的网站内容中有我的应用程序和列表,如下所示:

我想在我的应用程序中读取、写入和操作来自 TestList 的数据。

TestList的内容是这样的:

我一直在尝试用这个来阅读它:

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());
};

以及概述的其他一些方法 here and here,但我经常遇到错误:

List 'TestList' does not exist at site with URL 'https://mysite.sharepoint.com/sites/developer/TestApp'.

我认为这可能与 TestList 是与 TestApp 处于同一目录级别的应用程序有关,而不是 TestApp 中的列表,这就是我包含图片的原因。但是,我不知道如何在 TestApp 中嵌入 TestList。

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

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

我认为您的方向是正确的。您似乎想使用主机网络上的列表,但您使用的是 appweb 端点。我可以想到两个选项:

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

您需要使用正确的 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/