使用REST API从SharePoint日历检索事件
我有一个rest端点,用于从工作时的内部网络访问sharepoint日历。看起来是这样的: .{COMPANY}.com/sites/{SITE_URI}/_api/Web/list/getbytitle({TITLE-OF-CALENDAR})/items 当我向上面的url发出授权GET请求时,它会给我一个日历中4个事件的列表,但是日期是随机的。为了检索当前月份的所有事件,我需要指定什么端点 另外,我猜我每个请求只得到4个事件的原因是因为我没有处理一些分页的事情。。。如果您知道如何在一个请求中检索所有事件,那将是一个额外的好处使用REST API从SharePoint日历检索事件,rest,sharepoint,calendar,Rest,Sharepoint,Calendar,我有一个rest端点,用于从工作时的内部网络访问sharepoint日历。看起来是这样的: .{COMPANY}.com/sites/{SITE_URI}/_api/Web/list/getbytitle({TITLE-OF-CALENDAR})/items 当我向上面的url发出授权GET请求时,它会给我一个日历中4个事件的列表,但是日期是随机的。为了检索当前月份的所有事件,我需要指定什么端点 另外,我猜我每个请求只得到4个事件的原因是因为我没有处理一些分页的事情。。。如果您知道如何在一个请求
提前谢谢 可以通过以下CAML查询检索当前月份的事件:
<Where>
<DateRangesOverlap>
<FieldRef Name='EventDate' />
<FieldRef Name='EndDate' />
<Value Type='DateTime'>
<Month />
</Value>
</DateRangesOverlap>
</Where>
在哪里
函数getListItems(webUrl、listTitle、queryText)
{
var viewXml=''+queryText+'';
var url=webUrl+“/”api/web/lists/getbytitle(“+listitle+”)/getitems“;
变量queryPayload={
“查询”:{
“_元数据”:{“类型”:“SP.CamlQuery”},
“ViewXml”:ViewXml
}
};
返回$.ajax({
url:url,
方法:“张贴”,
数据:JSON.stringify(queryPayload),
标题:{
“X-RequestDigest”:$(“#u-RequestDigest”).val(),
“接受”:“application/json;odata=verbose”,
“内容类型”:“应用程序/json;odata=verbose”
}
});
}
但是,这种方法有一个限制,REST和CSOM/JSOM API都不支持扩展周期性事件(这意味着周期性事件只返回单个事件项)。有关更多详细信息,请参阅这些请求:
$().SPServices({
操作:“GetListItems”,
async:false,
列表名:“TeamCal”,
CAMLViewFields:“+
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"",
CAMLQuery:“+
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"",
CAMLQueryOptions:“+
“v3”+
“对”+
"",
completefunc:函数(扩展数据、状态){
$(扩展数据.responseXML).SPFilterNode(“z:row”).each(函数(){
var$node=$(这个);
var eventTitle=$node.attr(“ows_Title”);
console.log(eventTitle);
});
}
})
感谢您的详细回复!我可以通过查看您发送的api链接和详细示例在代码中创建解决方案。在我的用例中,可能的重复事件问题似乎不是一个问题。
var query = `
<Where>
<DateRangesOverlap>
<FieldRef Name='EventDate' />
<FieldRef Name='EndDate' />
<Value Type='DateTime'>
<Month />
</Value>
</DateRangesOverlap>
</Where>`
getListItems(_spPageContextInfo.webAbsoluteUrl,'TeamCalendar',query)
.done(function(data){
var items = data.d.results;
for(var i = 0; i < items.length;i++) {
console.log(items[i].Title);
}
})
.fail(function(error){
console.log(JSON.stringify(error));
});
function getListItems(webUrl,listTitle, queryText)
{
var viewXml = '<View><Query>' + queryText + '</Query></View>';
var url = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/getitems";
var queryPayload = {
'query' : {
'__metadata': { 'type': 'SP.CamlQuery' },
'ViewXml' : viewXml
}
};
return $.ajax({
url: url,
method: "POST",
data: JSON.stringify(queryPayload),
headers: {
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"Accept": "application/json; odata=verbose",
"content-type": "application/json; odata=verbose"
}
});
}
$().SPServices({
operation: "GetListItems",
async: false,
listName: "TeamCal",
CAMLViewFields: "<ViewFields>" +
"<FieldRef Name='Title' />" +
"<FieldRef Name='EventDate' />" +
"<FieldRef Name='EndDate' />" +
"<FieldRef Name='Location' />" +
"<FieldRef Name='Description' />" +
"<FieldRef Name='fRecurrence' />" +
"<FieldRef Name='RecurrenceData' />" +
"<FieldRef Name='fAllDayEvent' />" +
"</ViewFields>",
CAMLQuery: "<Query>" +
"<Where>" +
"<DateRangesOverlap>" +
"<FieldRef Name='EventDate' />" +
"<FieldRef Name='EndDate' />" +
"<FieldRef Name='RecurrenceID' />" +
"<Value Type='DateTime'>" +
"<Month />" +
"</Value>" +
"</DateRangesOverlap>" +
"</Where>" +
"<OrderBy>" +
"<FieldRef Name='EventDate' />" +
"</OrderBy>" +
"</Query>",
CAMLQueryOptions: "<QueryOptions>" +
"<RecurrencePatternXMLVersion>v3</RecurrencePatternXMLVersion>" +
"<ExpandRecurrence>TRUE</ExpandRecurrence>" +
"</QueryOptions>",
completefunc: function (xData, Status) {
$(xData.responseXML).SPFilterNode("z:row").each(function() {
var $node = $(this);
var eventTitle = $node.attr("ows_Title");
console.log(eventTitle);
});
}
})