我觉得我的问题相当简单,但网上的每个解决方案都非常复杂。我在 SharePoint designer 2010 中,我不是程序员,但我可以通过。我有一个包含契约(Contract)编号的 SP 列表,当您单击契约(Contract)编号时,它会将您带到该项目。我只需要 JavaScript 代码从列表中读取值(通过 ID 或其他方式)并将其存储在变量中。
例如:
var siteUrl = 'https://...';
var itemID = 22;
var TargetListItem;
Function onLoad(){
var context = new SP.ClientContent(siteUrl);
var web = context.get_web().get_lists().getByTitle('Data Call');
var list = web.getItemById(itemID);
context.load(list, 'Contract Number');
var value = list.get_item('Contract Number');
var url = "/sites/... " + value + "...";
return url
}
如果我对值进行硬编码以便返回的 URL 具有参数,那么代码可以工作,但当我在上面设置值时则不行。如果有人有一个非常简单的方法来完成这个,请告诉我!
最佳答案
你错过了SP.ClientContext.executeQueryAsync method 在服务器上异步执行当前挂起的请求
SP.ClientContext.executeQueryAsync method具有以下签名:
SP.ClientContext.executeQueryAsync(succeededCallback, failedCallback)
因为它是async 方法,您不能从您的方法返回,但必须声明包含返回结果的succeededCallback
函数。
使用 JSOM 等异步 API 时,通常使用以下模式:
- 使用嵌套回调
- 使用 promise 模式
请引用Asynchronous programming in apps for Office了解 SharePoint 异步编程的文章。
下面的示例演示了如何使用回调方法获取列表项:
function getItem(listTitle,itemId,success,error){
var context = SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle(listTitle);
var listItem = list.getItemById(itemId);
context.load(listItem);
context.executeQueryAsync(
function() {
success(listItem);
},
error
);
}
例子
getItem('Data Call', 22,
function(item){
var result = item.get_item('Contract Number');
},
function(sender,args){
console.log(args.get_message());
}
);
引用资料
How to: Create, Update, and Delete List Items Using JavaScript
关于javascript - 使用 javascript 读取 Sharepoint 列表值并设置为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23962098/