Leggere gli eventi ricorrenti di un calendario di SharePoint da JavaScript
Un esempio in JavaScript per recuperare da un calendario SharePoint 2010 tutti gli eventi, compresi quelli ricorrenti:
per recuperare gli items utilizza il web service SAOP Lists.asmx che ritorna un XML con gli eventi.
La funzione può essere richiamata passando la url relativa del web in cui si trova il calendario (webUrl) e il guid della lista (calendarGuid):
inoltre è possibile indicare quanti elementi ritornare (rowLimit) e se visualizzare nella console del browser gli elementi ritornati (debug).
JavaScript
var sgart = sgart || {};
sgart.getCalendarItems = function(webUrl, calendarGuid, rowLimit, debug) {
var wsUrl = webUrl + "_vti_bin/Lists.asmx";
var xmlSoap = "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>" +
"<soap:Body>" +
"<GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'>" +
"<listName>" + calendarGuid + "</listName>" +
"<query>" +
"<Query>" +
"<Where>" +
"<DateRangesOverlap>" +
"<FieldRef Name=\"EventDate\" />" +
"<FieldRef Name=\"EndDate\" />" +
"<FieldRef Name=\"RecurrenceID\" />" +
"<Value Type='DateTime'><Year/></Value>" +
"</DateRangesOverlap>" +
"</Where>" +
"</Query>" +
"</query>" +
"<rowLimit>" + rowLimit + "</rowLimit>" +
"<queryOptions>" +
"<QueryOptions>" +
"<ExpandRecurrence>TRUE</ExpandRecurrence>" +
"</QueryOptions>" +
"</queryOptions>" +
"</GetListItems>" +
"</soap:Body>" +
"</soap:Envelope>";
$.ajax({
url: wsUrl,
type: "POST",
contentType: "text/xml; charset=\"utf-8\"",
dataType: "xml",
data: xmlSoap,
complete: function (data, status) {
var result = [];
if (status === "success") {
var root = $(data.responseText);
root.find("listitems").children().children().each(function () {
var item = $(this);
var ids= item.attr("ows_UniqueId").split(";")[0];
var id = ids[0];
var guid = ids[1];
var recurrence = item.attr("ows_fRecurrence") === '1' ? true : false;
result.push({
startTime: item.attr("ows_EventDate"),
endTime: item.attr("ows_EndDate"),
title: item.attr("ows_Title"),
recurrence: recurrence,
description: item.attr("ows_Description"),
guid: guid,
"id": id
});
});
}
//solo per debug
if (debug === true) {
for (var i = 0; i < result.length; i++) {
var item = result[i];
console.log(i + ") " + item.startTime + " - " + item.title);
}
console.log(result); // visualizzo l'oggetto con i risultati
}
//TODO: inserire qui la logica di visualizzazione/gestione degli items ritornati
return result;
}
});
};
In JavaScript sia con il client object model, sia con le chiamate REST, non è possibile avere gli eventi ricorrenti.
La funzione può essere richiamata passando la url relativa del web in cui si trova il calendario (webUrl) e il guid della lista (calendarGuid):
JavaScript
sgart.getCalendarItems("/", "{CC7E271C-9B1F-4072-ADFE-53FA542BADED}", 2, true);