我正在尝试从 SharePoint 网站中的所有列表中获取每个项目。 为了做到这一点,我发现的所有文档和回答的问题通常都解释了如何从一个列表中获取所有列表或所有项目,但不是站点上下文中所有列表中的每个项目。
我在下面有我的代码,我能够很好地获取所有列表,我最大的困难是获取项目,而不仅仅是从最后一个列表中获取(出于某种原因,当我在控制台中测试时它继续这样做 - 这个版本可能会只是产生空错误,因为我从以前进行了更改)。
var allInfo = "";
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', getAllListsAndItems);
function getAllListsAndItems() {
var context = new SP.ClientContext('https://mysites.sprcompanies.com/personal/cnorman/charpractice/');
var web = context.get_web();
var lists = web.get_lists();
context.load(lists);
context.executeQueryAsync(onQuerySucceeded, onQueryFailed);
function onQuerySucceeded(sender, args) {
var listEnumerator = lists.getEnumerator();
while (listEnumerator.moveNext()) {
var list = listEnumerator.get_current();
allInfo += " List: " + list.get_title() + "\n";
if (list.get_itemCount() > 0) {
var query = new SP.CamlQuery();
query.set_viewXml('<View></View>');
var items = list.getItems(query);
context.load(items);
context.executeQueryAsync(onSuccess, onFail);
function onSuccess(sender, args) {
var itemsEnumerator = items.getEnumerator();
while (itemsEnumerator.moveNext()) {
var item = itemsEnumerator.get_current();
}
}
function onFail(sender, args) {
console.log('Request on items failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
}
}
console.log(allInfo);
}
function onQueryFailed(sender, args) {
console.log('Request on lists failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
}
我知道一般问题区域在这里:
var itemsEnumerator = items.getEnumerator();
while (itemsEnumerator.moveNext()) {
var item = itemsEnumerator.get_current();
}
我最初将它附加到allInfo
,但它所做的只是产生“未初始化”错误。我最初以为我只是没有正确加载项目,但是在控制台中对其进行测试后,它确实显示了项目集合对象,所以这就是为什么我认为它与上述有关。
我不能只使用for
循环来循环遍历项目吗?我只需要每个项目的标题。我尝试了 afor
和 a for in
,但它再次导致错误。所以这就是我访问每个项目的方式(使用错误的属性)。先感谢您!
编辑:
所以我把它放在项目onSuccess
块中:
if (items.get_item("Title") == null) {
items.get_data().forEach(function(item) {
console.log(item.get_item('URL').get_description());
});
}
else {
items.get_data().forEach(function(item) {
console.log(item.get_item('Title'));
});
}
无论是常规项目还是链接项目,两者都会获得项目的“标题” - 问题在于它只获取最后一个列表的项目并重复多次而不是遍历每个列表。