gpt4 book ai didi

javascript - Sharepoint OnlineexecuteQueryAsync JSOM - 返回值

转载 作者:行者123 更新时间:2023-11-28 00:07:53 25 4
gpt4 key购买 nike

使用 Sharepoint Online 2013 通过 JSOM 构建应用程序。当前部分是在将数据提交到列表(工作正常)之后,将打开一个模式,允许用户根据该列表和其他列表创建 PDF。当前的问题是,列表中的数据必须在客户端准备好,然后才能开始将其制作为 PDF,我已经阅读了有关“Promise”方法的文献,这就是我最近一直在尝试的方法成功。

函数 getQuoteDetails() {

var d = $.Deferred(function(){

var ListName = "Quote";
var context = new SP.ClientContext.get_current();
var lstObject = context.get_web().get_lists().getByTitle(ListName);
var camlQuery = new SP.CamlQuery();
//var _valuetofind = $('#QuoteID').text();
var _valuetofind = '1';
camlQuery.set_viewXml("<View><ViewFields>" +
"<FieldRef Name='Q_ID' />" +
"<FieldRef Name='CPY_ID' />" +
"<FieldRef Name='CUST_ID' />" +
"<FieldRef Name='Q_RaiseDate' />" +
"<FieldRef Name='Q_DueDate' />" +
"<FieldRef Name='Q_Price' />" +
"<FieldRef Name='Q_GST' />" +
"<FieldRef Name='Q_TotalPrice' />" +
"<FieldRef Name='Q_PurchaseOrder' />" +
"</ViewFields>" +
"<Query><Where><Contains>" +
"<FieldRef Name='Q_ID'/>" +
"<Value Type='Number'>" + _valuetofind + "</Value></Contains></Where></Query></View>");

var listItemCollection = lstObject.getItems(camlQuery);
context.load(listItemCollection, "Include(Q_ID, CPY_ID, CUST_ID, Q_RaiseDate, Q_DueDate, Q_Price, Q_GST, Q_TotalPrice, Q_PurchaseOrder)");
context.executeQueryAsync(onGetItemsSuccess, onGetItemsFail);

function onGetItemsSuccess(sender, args) {
var listItemEnumerator = listItemCollection.getEnumerator();
while (listItemEnumerator.moveNext()) {
var quotearray = [];

quotearray['Q_ID'] = listItemEnumerator.get_current().get_item('Q_ID');
quotearray['CPY_ID'] = listItemEnumerator.get_current().get_item('CPY_ID');
quotearray['CUST_ID'] = listItemEnumerator.get_current().get_item('CUST_ID');
quotearray['Q_RasiedDate'] = listItemEnumerator.get_current().get_item('Q_RasiedDate');
quotearray['Q_DueDate'] = listItemEnumerator.get_current().get_item('Q_DueDate');
quotearray['Q_Price'] = listItemEnumerator.get_current().get_item('Q_Price');
quotearray['Q_GST'] = listItemEnumerator.get_current().get_item('Q_GST');
quotearray['Q_TotalPrice'] = listItemEnumerator.get_current().get_item('Q_TotalPrice');
quotearray['Q_PurchaseOrder'] = listItemEnumerator.get_current().get_item('Q_PurchaseOrder');
}
d.resolve(quotearray);

}

function onGetItemsFail(sender, args) {
alert('Failed to get items. Error: ' + args.get_message());
}

});
return d.promise();

}

然后调用此代码:

函数 CreateQuotePDF() {

getQuoteDetails().done(function (quotearray) {
var quotedetails = quotearray;
alert('Nothing'); <---- quotedetails is undefined at this point
});

警报('什么都没有'); <---- quotedetails 此时未定义}

希望您能帮忙!

最佳答案

一些建议

  • 确保您使用的 jQuery 版本 >= 1.5,因为 Deferred 对象在 jQuery 1.5 中引入
  • 无需需要指定 CAML ViewFields 以及 SP.ClientContext.load 函数的第二个参数的值同时,因为它们都用于指定要检索的属性
  • 总是更喜欢包含 SP.ClientContext.executeQueryAsync失败回调函数以处理任何发生的错误

话虽如此,我建议您使用以下更通用的方法来获取列表项:

function getListItems(listTitle,propertiesToInclude)
{
var ctx = SP.ClientContext.get_current();
var web = ctx.get_web();
var list = web.get_lists().getByTitle(listTitle);
var items = list.getItems(SP.CamlQuery.createAllItemsQuery());
var includeExpr = 'Include(' + propertiesToInclude.join(',') + ')';
ctx.load(items,includeExpr);
var d = $.Deferred();
ctx.executeQueryAsync(function() {
var result = items.get_data().map(function(i){
return i.get_fieldValues();
});
d.resolve(result);
},
function(sender,args){
d.reject(args);
});
return d.promise();
}

在这种情况下,可以检索列表项,如下所示:

SP.SOD.executeFunc('SP.js', 'SP.ClientContext', function() {

var listTitle = 'Documents'; //set list title here
var properties = ['Title','ID']; //specify items properties here
getListItems(listTitle,properties)
.done(function(items){
console.log(items);
})
.fail(function(error){
console.log(error.get_message()); //if any error is occurred?
});

});

关于javascript - Sharepoint OnlineexecuteQueryAsync JSOM - 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31185851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com