获取列表项数
Get list item count
我有一个 SharePoint 日历,其中包含事件类别("Visit","Meeting"...)
我想检索当天事件的计数 ,类别是 "Visit"。
这是我的脚本:
var clientContext = SP.ClientContext.get_current();
var list = clientContext.get_web().get_lists().getByTitle("Artdesk-calendrier");
var caml = new SP.CamlQuery();
caml.set_viewXml("<View><Query>"+
"<Where>"+
"<And>"+
"<Eq><FieldRef Name=\"Category\" /><Value Type=\"Choice\">Visite</Value></Eq>" +
"<And>"+
"<Leq><FieldRef Name=\"EventDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today Offset=\"1\"/></Value></Leq>"+
"<Geq><FieldRef Name=\"EndDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today /></Value></Geq>"+
"</And>"+
"</And>"+
"</Where>"+
"</View></Query>"); // empty query also works
var listItemCollection = list.getItems(caml);
clientContext.load(listItemCollection);
clientContext.executeQueryAsync(function() {
var listItemEnumerator = listItemCollection.getEnumerator();
var count = 0;
var eventsToday = [];
var eventsTomorrow = [];
var today = new Date();
today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0);
var tomorrow = new Date(today);
tomorrow.setDate(tomorrow.getDate()+1);
while (listItemEnumerator.moveNext()) {
count++;
var item = listItemEnumerator.get_current();
var startDate = item.get_item("EventDate");
var endDate = item.get_item("EndDate");
var title = item.get_item("Title");
if(endDate < tomorrow || eventDate < tomorrow){
eventsToday.push(title);
}else{
eventsTomorrow.push(title);
}
}
document.getElementById("TodaysEvents").innerHTML = eventsToday.join("\n");
document.getElementById("TomorrowsEvents").innerHTML = eventsTomorrow.join("\n");
document.getElementById("alerte1").innerHTML = count;
}, function(sender, args) {
window.console && console.log(args.get_message());
});
它工作得很好,但它只检索了类别 "Visit" 的最后一个事件的标题。
我想要的是:检索类别为 "Visit".
的当天的事件计数
欢迎任何帮助。
当您在当前日期获得带有过滤器的正确 CAML 查询时,您可以在使用查询加载列表项目集合后使用 get_itemCount()
方法获取项目编号。试试下面的代码
clientContext.executeQueryAsync(function() {
window.console && console.log('Total Visits: ' + list.get_itemCount());
}, function(sender, args) {
window.console && console.log(args.get_message());
});
获取列表项目集合中的项目计数
您可以按照 Nizzik 的建议(使用 listItemCollection.get_count()
)直接访问列表项集合的计数 属性,或者自己做一些简单的数学运算,如下所示。
var count = 0;
while (listItemEnumerator.moveNext()) {
count++;
}
document.getElementById("alerte1").innerHTML = count;
将结果限制在今天和明天的事件中
如果您不需要担心任何重复发生的事件,您可以更新 CAML 查询以过滤结果,限制为明天或更早开始以及今天或更晚结束的事件。使用 EventDate
字段过滤 "Start Date",使用 EndDate
字段过滤 "End Date"(这些是这些字段的内部名称)。
您生成的 CAML 查询最终可能如下所示:
"<View><Query>"+
"<Where>"+
"<And>"+
"<Leq><FieldRef Name=\"EventDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today Offset=\"2\"/></Value></Leq>"+
"<Geq><FieldRef Name=\"EndDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today /></Value></Geq>"+
"</And>"+
"</Where>"+
"</View></Query>"
如在您提供的示例代码中一样,要将其限制为类别等于 "Visite" 的事件,您可以使用以下 CAML:
"<View><Query>"+
"<Where>"+
"<And>"+
"<Eq><FieldRef Name=\"Category\" /><Value Type=\"Choice\">Visite</Value></Eq>" +
"<And>"+
"<Leq><FieldRef Name=\"EventDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today Offset=\"1\"/></Value></Leq>"+
"<Geq><FieldRef Name=\"EndDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today /></Value></Geq>"+
"</And>"+
"</And>"+
"</Where>"+
"</View></Query>"
为了区分今天和明天的事件,您可以在枚举结果时从 while
循环中检查它们的 EventDate
和 EndDate
值。
var count = 0;
var eventsToday = [];
var eventsTomorrow = [];
var today = new Date();
today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0);
var tomorrow = new Date(today);
tomorrow.setDate(tomorrow.getDate()+2);
while (listItemEnumerator.moveNext()) {
count++;
var item = listItemEnumerator.get_current();
var startDate = item.get_item("EventDate");
var endDate = item.get_item("EndDate");
var title = item.get_item("Title");
if(endDate < tomorrow || startDate < tomorrow){
eventsToday.push(title);
}else{
eventsTomorrow.push(title);
}
}
document.getElementById("TodaysEvents").innerHTML = eventsToday.join("<br/>");
document.getElementById("TomorrowsEvents").innerHTML = eventsTomorrow.join("<br/>");
document.getElementById("alerte1").innerHTML = count;
您可能需要自定义逻辑,具体取决于您希望如何在 "today's" 事件和 "tomorrow's events," 之间划清界限,尤其是在奇怪的情况下,例如某个事件在某天开始并在某天结束另一个。
您好,我找到了获得 day+1 计数的解决方案:
我已经更改并且它工作得很好,这是整个脚本:
function getevents()
{
var clientContext = SP.ClientContext.get_current();
var list = clientContext.get_web().get_lists().getByTitle("Artdesk-calendrier");
var caml = new SP.CamlQuery();
caml.set_viewXml("<View><Query>"+
"<Where>"+
"<And>"+
"<Eq><FieldRef Name=\"Category\" /><Value Type=\"Choice\">Visite</Value></Eq>" +
"<And>"+
"<Leq><FieldRef Name=\"EventDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today OffsetDays='1'/></Value></Leq>"+
"<Geq><FieldRef Name=\"EndDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today /></Value></Geq>"+
"</And>"+
"</And>"+
"</Where>"+
"</View></Query>"); // empty query also works
var listItemCollection = list.getItems(caml);
clientContext.load(listItemCollection);
clientContext.executeQueryAsync(function() {
var listItemEnumerator = listItemCollection.getEnumerator();
var count_ajrd = 0;
var count_demain = 0;
var eventsToday = [];
var eventsTomorrow = [];
var today = new Date();
today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0);
var tomorrow = new Date(today);
tomorrow.setDate(tomorrow.getDate()+1);
while (listItemEnumerator.moveNext()) {
var item = listItemEnumerator.get_current();
var startDate = item.get_item('EventDate');
var endDate = item.get_item('EndDate');
var title = item.get_item('Title');
if(endDate < tomorrow || startDate < tomorrow){
eventsToday.push(title);
count_ajrd++;
}else{
eventsTomorrow.push(title);
count_demain++;
}
}
document.getElementById("alerte2").innerHTML = eventsToday.join("\n");
document.getElementById("alerte1").innerHTML = eventsTomorrow.join("\n");
document.getElementById("todaynum").innerHTML = count_ajrd;
document.getElementById("tomorrownum").innerHTML = count_demain;
}, function(sender, args) {
window.console && console.log(args.get_message());
});
}
感谢@Thriggle 的帮助
我有一个 SharePoint 日历,其中包含事件类别("Visit","Meeting"...) 我想检索当天事件的计数 ,类别是 "Visit"。 这是我的脚本:
var clientContext = SP.ClientContext.get_current();
var list = clientContext.get_web().get_lists().getByTitle("Artdesk-calendrier");
var caml = new SP.CamlQuery();
caml.set_viewXml("<View><Query>"+
"<Where>"+
"<And>"+
"<Eq><FieldRef Name=\"Category\" /><Value Type=\"Choice\">Visite</Value></Eq>" +
"<And>"+
"<Leq><FieldRef Name=\"EventDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today Offset=\"1\"/></Value></Leq>"+
"<Geq><FieldRef Name=\"EndDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today /></Value></Geq>"+
"</And>"+
"</And>"+
"</Where>"+
"</View></Query>"); // empty query also works
var listItemCollection = list.getItems(caml);
clientContext.load(listItemCollection);
clientContext.executeQueryAsync(function() {
var listItemEnumerator = listItemCollection.getEnumerator();
var count = 0;
var eventsToday = [];
var eventsTomorrow = [];
var today = new Date();
today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0);
var tomorrow = new Date(today);
tomorrow.setDate(tomorrow.getDate()+1);
while (listItemEnumerator.moveNext()) {
count++;
var item = listItemEnumerator.get_current();
var startDate = item.get_item("EventDate");
var endDate = item.get_item("EndDate");
var title = item.get_item("Title");
if(endDate < tomorrow || eventDate < tomorrow){
eventsToday.push(title);
}else{
eventsTomorrow.push(title);
}
}
document.getElementById("TodaysEvents").innerHTML = eventsToday.join("\n");
document.getElementById("TomorrowsEvents").innerHTML = eventsTomorrow.join("\n");
document.getElementById("alerte1").innerHTML = count;
}, function(sender, args) {
window.console && console.log(args.get_message());
});
它工作得很好,但它只检索了类别 "Visit" 的最后一个事件的标题。 我想要的是:检索类别为 "Visit".
的当天的事件计数欢迎任何帮助。
当您在当前日期获得带有过滤器的正确 CAML 查询时,您可以在使用查询加载列表项目集合后使用 get_itemCount()
方法获取项目编号。试试下面的代码
clientContext.executeQueryAsync(function() {
window.console && console.log('Total Visits: ' + list.get_itemCount());
}, function(sender, args) {
window.console && console.log(args.get_message());
});
获取列表项目集合中的项目计数
您可以按照 Nizzik 的建议(使用 listItemCollection.get_count()
)直接访问列表项集合的计数 属性,或者自己做一些简单的数学运算,如下所示。
var count = 0;
while (listItemEnumerator.moveNext()) {
count++;
}
document.getElementById("alerte1").innerHTML = count;
将结果限制在今天和明天的事件中
如果您不需要担心任何重复发生的事件,您可以更新 CAML 查询以过滤结果,限制为明天或更早开始以及今天或更晚结束的事件。使用 EventDate
字段过滤 "Start Date",使用 EndDate
字段过滤 "End Date"(这些是这些字段的内部名称)。
您生成的 CAML 查询最终可能如下所示:
"<View><Query>"+
"<Where>"+
"<And>"+
"<Leq><FieldRef Name=\"EventDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today Offset=\"2\"/></Value></Leq>"+
"<Geq><FieldRef Name=\"EndDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today /></Value></Geq>"+
"</And>"+
"</Where>"+
"</View></Query>"
如在您提供的示例代码中一样,要将其限制为类别等于 "Visite" 的事件,您可以使用以下 CAML:
"<View><Query>"+
"<Where>"+
"<And>"+
"<Eq><FieldRef Name=\"Category\" /><Value Type=\"Choice\">Visite</Value></Eq>" +
"<And>"+
"<Leq><FieldRef Name=\"EventDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today Offset=\"1\"/></Value></Leq>"+
"<Geq><FieldRef Name=\"EndDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today /></Value></Geq>"+
"</And>"+
"</And>"+
"</Where>"+
"</View></Query>"
为了区分今天和明天的事件,您可以在枚举结果时从 while
循环中检查它们的 EventDate
和 EndDate
值。
var count = 0;
var eventsToday = [];
var eventsTomorrow = [];
var today = new Date();
today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0);
var tomorrow = new Date(today);
tomorrow.setDate(tomorrow.getDate()+2);
while (listItemEnumerator.moveNext()) {
count++;
var item = listItemEnumerator.get_current();
var startDate = item.get_item("EventDate");
var endDate = item.get_item("EndDate");
var title = item.get_item("Title");
if(endDate < tomorrow || startDate < tomorrow){
eventsToday.push(title);
}else{
eventsTomorrow.push(title);
}
}
document.getElementById("TodaysEvents").innerHTML = eventsToday.join("<br/>");
document.getElementById("TomorrowsEvents").innerHTML = eventsTomorrow.join("<br/>");
document.getElementById("alerte1").innerHTML = count;
您可能需要自定义逻辑,具体取决于您希望如何在 "today's" 事件和 "tomorrow's events," 之间划清界限,尤其是在奇怪的情况下,例如某个事件在某天开始并在某天结束另一个。
您好,我找到了获得 day+1 计数的解决方案: 我已经更改并且它工作得很好,这是整个脚本:
function getevents()
{
var clientContext = SP.ClientContext.get_current();
var list = clientContext.get_web().get_lists().getByTitle("Artdesk-calendrier");
var caml = new SP.CamlQuery();
caml.set_viewXml("<View><Query>"+
"<Where>"+
"<And>"+
"<Eq><FieldRef Name=\"Category\" /><Value Type=\"Choice\">Visite</Value></Eq>" +
"<And>"+
"<Leq><FieldRef Name=\"EventDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today OffsetDays='1'/></Value></Leq>"+
"<Geq><FieldRef Name=\"EndDate\"/><Value Type=\"DateTime\" IncludeTimeValue=\"False\"><Today /></Value></Geq>"+
"</And>"+
"</And>"+
"</Where>"+
"</View></Query>"); // empty query also works
var listItemCollection = list.getItems(caml);
clientContext.load(listItemCollection);
clientContext.executeQueryAsync(function() {
var listItemEnumerator = listItemCollection.getEnumerator();
var count_ajrd = 0;
var count_demain = 0;
var eventsToday = [];
var eventsTomorrow = [];
var today = new Date();
today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0);
var tomorrow = new Date(today);
tomorrow.setDate(tomorrow.getDate()+1);
while (listItemEnumerator.moveNext()) {
var item = listItemEnumerator.get_current();
var startDate = item.get_item('EventDate');
var endDate = item.get_item('EndDate');
var title = item.get_item('Title');
if(endDate < tomorrow || startDate < tomorrow){
eventsToday.push(title);
count_ajrd++;
}else{
eventsTomorrow.push(title);
count_demain++;
}
}
document.getElementById("alerte2").innerHTML = eventsToday.join("\n");
document.getElementById("alerte1").innerHTML = eventsTomorrow.join("\n");
document.getElementById("todaynum").innerHTML = count_ajrd;
document.getElementById("tomorrownum").innerHTML = count_demain;
}, function(sender, args) {
window.console && console.log(args.get_message());
});
}
感谢@Thriggle 的帮助