Filter Items with REST API SharePoint / Office 365 DateTime
Contents
Problemstellung
Das Erhalten und Filtern von Elementen in SharePoint-Listen ist via REST an sich kein Problem.
Zeitaufwändig wird das Filter wenn die Doku von Microsoft nicht mehr ausreicht. Dies ist bei Formatierung für Zeitangaben sehr häufig der Fall.
Deshalb nachfolgend ein Beispiel zum Filtern von Einträgen nach Datum. Ich möchte alle Einträge erhalten, die zur Veröffentlichung freigegeben sind und bei denen das Ablaufdatum der Veröffentlichung noch nicht eingetreten ist.
Code
var today = new Date();
//today.setHours(0);
//today.setMinutes(0);
var todayStr = today.toISOString();
// Sortierung festlegen
var sort = "orderby=Ver_x00f6_ffentlichungsdatum desc";
//Filter festlegen Format: "filter=(Ver_x00f6_ffentlichungsdatum lt datetime'2017-12-14T23:00:19.576Z')"
var filter = "filter=(Ver_x00f6_ffentlichungsdatum lt datetime'" + todayStr +"') and (Endedatum gt datetime'"+todayStr+"')";
var fileCollectionEndpoint = String.format(
"{0}/_api/web/lists/getByTitle('{1}')/items?$"+sort+"&$"+filter,
appWeb, listname);
return $.ajax({
url: fileCollectionEndpoint,
type: "GET",
contentType: "application/json;odata=verbose",
headers: {
"accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
}
});
}
Erläuterung
Ein Filter nach einem Datum verlangt nach folgender Formatierung: „&filter=(SPALTEN_NAME lt datetime’ZEIT_ANGABE_ALS_ISO_FORMAT‘)“.
Meine Spalte nennt sich „Ver_x00f6_ffentlichungsdatum“ – „lt“ steht für größer als und dient dem Vergleich.
Die Funktion „var today = new Date();“ erzeugt ein Datum zum aktuellen Zeitpunkt, mit „today.toISOString();“ wird noch das gewünschte Format generiert.