我觉得我有一个相当简单的问题,但是每个在线解决方案都非常复杂。我在SharePoint设计师2010中,我不是程序员,但我可以顺利通过。我有一个带有合同编号的SP列表,当您单击合同编号时,它会将您带到该项目。我只想要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有一个参数,但是当我设置上面的值时,代码就有效。如果有人有一个非常简单的方法来实现这一点,请告诉我!
答案 0 :(得分:2)
您缺少SP.ClientContext.executeQueryAsync method 在服务器上异步执行当前待处理请求
SP.ClientContext.executeQueryAsync method具有以下签名:
SP.ClientContext.executeQueryAsync(succeededCallback, failedCallback)
由于它是 async 方法,您无法从方法返回,但必须声明包含返回结果的succeededCallback
函数。
使用JSOM等异步API时,通常会使用以下模式:
请参阅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