通过 SharePoint Online 加载项中的 CSOM/JSOM 获取 SharePoint ClientContext
Get SharePoint ClientContext via CSOM/JSOM in SharePoint Online Add-in
我到处都在寻找解决这个问题的方法,但都没有成功。如果有人能告诉我诀窍,我将不胜感激。
Scope:我正在为 SharePoint Online 构建 SharePoint 加载项。在 appweb 中,我尝试使用 Web 部件通过 CSOM 或 JSOM 获取 ListItem 的 ClientContext。我不能使用沙盒解决方案。
主要目标:我需要 ClientContext,这样我就可以获取 ListItem 的主体,使用 GetBytes,并对主体进行 zip 或 UTF8 编码。我还需要使用 SP.ListOperation.Selected.getSelectedItems(clientContext) 以便 select 多个已被用户 select 编辑的 ListItem。
代码示例(不完整):
<script>
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', sharePointReady);
function helloWorldTest() {
alert("Function helloWorldTest Active");
var listURL = '/sites/dev/';
var clientContext = new SP.ClientContext(listURL);
var olist = clientContext.get_web().get_lists().getByTitle('Secure List')
var currentLib = web.get_lists().getById(currentlibid); //Gets the current Library
var selectedItems = SP.ListOperation.Selection.getSelectedItems(clientContext);
for (var i in selectedItems) {
var currentItem = currentLib.getItemById(selectedItems[i].id);
context.load(currentItem);
for (i in items) {
selItems += '|' + selectedItems[i].id;
}
}
}
/*
var itemCreateInfo = new SP.ListItemCreationInformation();
this.oListItem = oList.addItem(itemCreateInfo);
oListItem.set_item('Title', 'Test');
oListItem.set_item('Body', 'Hello World!');
oListItem.update();
clientContext.load(oListItem);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
alert("fuction complete");
}
function onQuerySucceeded() {
alert('Item created: ' + oListItem.get_id());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
}
*/
</script>
非常感谢您的帮助。谢谢你。
如果您正在尝试获取当前站点的客户端上下文,那么您可以使用:
SP.ClientContext.get_current()
如果您尝试构建客户端上下文以从应用程序网络访问主机网络,那么您需要使用主机网络的完整 URL。在上面的代码中,您似乎正在像这样构建客户端上下文:
var listURL = '/sites/dev/';
var clientContext = new SP.ClientContext(listURL);
这是一个亲戚 URL,在创建客户端上下文时不起作用。通常,主机 Web 的 URL 可用作名为 SPHostUrl 的查询字符串参数,因此您可能必须从那里获取它。并且知道它必须是单独的站点的 URL,例如http://server/sites/dev/ and not something like http://server/sites/dev/default.aspx 或另一个 URL 到站点中的资源。
我到处都在寻找解决这个问题的方法,但都没有成功。如果有人能告诉我诀窍,我将不胜感激。
Scope:我正在为 SharePoint Online 构建 SharePoint 加载项。在 appweb 中,我尝试使用 Web 部件通过 CSOM 或 JSOM 获取 ListItem 的 ClientContext。我不能使用沙盒解决方案。
主要目标:我需要 ClientContext,这样我就可以获取 ListItem 的主体,使用 GetBytes,并对主体进行 zip 或 UTF8 编码。我还需要使用 SP.ListOperation.Selected.getSelectedItems(clientContext) 以便 select 多个已被用户 select 编辑的 ListItem。
代码示例(不完整):
<script>
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', sharePointReady);
function helloWorldTest() {
alert("Function helloWorldTest Active");
var listURL = '/sites/dev/';
var clientContext = new SP.ClientContext(listURL);
var olist = clientContext.get_web().get_lists().getByTitle('Secure List')
var currentLib = web.get_lists().getById(currentlibid); //Gets the current Library
var selectedItems = SP.ListOperation.Selection.getSelectedItems(clientContext);
for (var i in selectedItems) {
var currentItem = currentLib.getItemById(selectedItems[i].id);
context.load(currentItem);
for (i in items) {
selItems += '|' + selectedItems[i].id;
}
}
}
/*
var itemCreateInfo = new SP.ListItemCreationInformation();
this.oListItem = oList.addItem(itemCreateInfo);
oListItem.set_item('Title', 'Test');
oListItem.set_item('Body', 'Hello World!');
oListItem.update();
clientContext.load(oListItem);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
alert("fuction complete");
}
function onQuerySucceeded() {
alert('Item created: ' + oListItem.get_id());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
}
*/
</script>
非常感谢您的帮助。谢谢你。
如果您正在尝试获取当前站点的客户端上下文,那么您可以使用:
SP.ClientContext.get_current()
如果您尝试构建客户端上下文以从应用程序网络访问主机网络,那么您需要使用主机网络的完整 URL。在上面的代码中,您似乎正在像这样构建客户端上下文:
var listURL = '/sites/dev/';
var clientContext = new SP.ClientContext(listURL);
这是一个亲戚 URL,在创建客户端上下文时不起作用。通常,主机 Web 的 URL 可用作名为 SPHostUrl 的查询字符串参数,因此您可能必须从那里获取它。并且知道它必须是单独的站点的 URL,例如http://server/sites/dev/ and not something like http://server/sites/dev/default.aspx 或另一个 URL 到站点中的资源。