使用 REST API 从 SharePoint 日历中检索事件



我有其余终结点,用于从工作中的内部网络访问 sharepoint 日历。它看起来像这样: https://teamsites。{COMPANY}.com/sites/{SITE_URI}/_api/Web/Lists/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>

就此而言GetItems可以使用该方法,如下所示:

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"
}
});
}

但是这种方法有一个限制,REST 和 CSOM/JSOM API 都不支持针对周期性事件进行扩展(这意味着对于周期性事件,只会返回一个事件项(。有关更多详细信息,请参阅这些请求:

  • 为定期日历事件提供 CSOM 和 REST API
  • 在 REST API 中添加对重复事件的支持

对于这种情况,旧版 SharePoint Web Services 会派上用场,特别是列表 Web 服务。

下面的示例演示如何检索当月的事件并展开定期事件(此处使用 SPServices 库(:

$().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);
});
}
})

最新更新