Der SharePoint Changelog speichert alle Arten an Veränderungen in der Site und in Listen.
Was im Changelog abgefragt werden kann, ergibt sich aus der SP.ChangeType Enumeration. Hier ein Auszug:
Member |
Value |
Description |
add |
1 |
Enumeration whoese values speicify that an object has beend added within the scope of a list, site, site collection, or content database |
assignmentAdd |
11 |
Enumeration whose values specifiy that a auser has been given permissions to al ist. The list must have unique permissions enabled. |
assignmentDelete |
12 |
Enumeration whose values specify that a user has lost permissions to a list. The list must have unique permissions enabled. |
deleteObject |
3 |
Enumeration whose values specify that an object has been deleted within the scope of a list, site, site collection, or content database. |
listContentTypeAdd |
undefined |
|
listContentTypeDelete |
undefined |
|
memberAdd |
13 |
Enumeration whose values specify that a user has been added to a group. |
memberDelete |
14 |
Enumeration whose values specify that a user has been removed from a group. |
moveAway |
5 |
Enumeration whose values specify that a non-leaf section within a URL has been renamed. The object was moved away from the location within the site specified by the change. |
moveInto |
6 |
Enumeration whose values specify that a non-leaf section within a URL has been renamed. The object was moved into the location within the site specified by the change. |
navigation |
16 |
Enumeration whose values specify that a change in the navigation structure of a site collection has been made. |
noChange |
0 |
Enumeration whose values indicate that no change has taken place. |
rename |
4 |
Enumeration whose values specify that the leaf in a URL has been renamed. |
restore |
7 |
Enumeration whose values specify that an object has restored from a backup or from the recycle bin. |
roleAdd |
8 |
Enumeration whose values specify that a role definition has been added. |
roleDelete |
9 |
Enumeration whose values specify that a role definition has been deleted. |
roleUpdate |
10 |
Enumeration whose values specify that a role definition has been updated. |
scopeAdd |
17 |
Enumeration whose values specify that a change in permissions scope has been made to break inheritance from an object's parent. |
scopeDelete |
18 |
Enumeration whose values specify that a change in permissions scope has been made to revert back to inheriting permissions from an object's parent. |
systemUpdate |
18 |
Enumeration whose values specify that a change has been made to an item using the SystemUpdate method. |
update |
2 |
Enumeration whose values specify that an object has been modified within the scope of a list, site, site collection, or content database. |
registerEnum |
Undefined |
|
Aus der ChangeType Enumeration lässt sich erkennen, dass viele Informationen über den Changelog abfragbar sind. Diese Informationen sind allerdings nur asynchron und zeitlich versetzt verfügbar. Das heißt, wenn ein Listenelement in einer Bibliothek oder Liste hinzugefügt, geändert oder gelöscht wurde, sind diese Informationen nicht sofort im Changelog, sondern etwas später. Der Changelog enthält auch nur den Zeitpunkt der Veränderung in der Site, Liste oder Bibliothek.
Der Changelog lässt sich sowohl über CSOM als auch über die REST API abfragen.
SharePoint ChangeLog über REST API abfragen
ChangeLog Query Objekt
var query = { "Item": true, "Add": true, "Update": true, "DeleteObject": true, "ChangeTokenStart": null };
ChangeLog Abfragen
var requestUrl = "[SHAREPOINT-SITE-URL]/_api/web/lists(guid'[LIST-ID]')/GetChanges(@qry)?@qry=" + JSON.stringify(query)
Die Abfrage der ChangeLog Elemente muss in einem gesicherten Kontext erfolgen. Daher ist es notwendig im Vorfeld ein Request Digest für den ausführenden Nutzer zu generieren. Den Request Digest erhält man über die Abfrage des ContextInfo Objekts, und verwendet dann die Eigenschaft FormDigestValue.
POST requestUrl
headers:
Content-Type: application/json; charset=utf8
Accept: application/json; odata=nometadata
X-RequestDigest: [REQUEST DIGEST]
response:
{
"value": [
{
"ChangeToken": {
"StringValue": "1;3;ee496550-61f2-4ec2-9cba-ab94bea1083e;638608712817200000;8625136"
},
"ChangeType": 1,
"SiteId": "7a210832-9909-4984-a695-fe2b2d938ee3",
"Time": "2024-09-02T10:54:42Z",
"Editor": "",
"ItemId": 1,
"ListId": "ee496550-61f2-4ec2-9cba-ab94bea1083e",
"ServerRelativeUrl": "",
"WebId": "33cf9a56-c832-4e14-a5e7-5086b29544cf"
},
{
"ChangeToken": {
"StringValue": "1;3;ee496550-61f2-4ec2-9cba-ab94bea1083e;638608754051170000;8625156"
},
"ChangeType": 2,
"SiteId": "7a210832-9909-4984-a695-fe2b2d938ee3",
"Time": "2024-09-02T12:03:25Z",
"Editor": "",
"ItemId": 2,
"ListId": "ee496550-61f2-4ec2-9cba-ab94bea1083e",
"ServerRelativeUrl": "",
"WebId": "33cf9a56-c832-4e14-a5e7-5086b29544cf"
},
{
"ChangeToken": {
"StringValue": "1;3;ee496550-61f2-4ec2-9cba-ab94bea1083e;638608713485170000;8625137"
},
"ChangeType": 3,
"SiteId": "7a210832-9909-4984-a695-fe2b2d938ee3",
"Time": "2024-09-02T10:55:48Z",
"Editor": "",
"ItemId": 1,
"ListId": "ee496550-61f2-4ec2-9cba-ab94bea1083e",
"ServerRelativeUrl": "",
"WebId": "33cf9a56-c832-4e14-a5e7-5086b29544cf"
}
]
}
Die Abfrage gibt ein vollständiges Resultset zurück, welches Alle Veränderungen an Listenelementen innerhalb der Liste enthält. In der folgende Tabelle wird das Changlog Objekt erklärt:
Eigenschaft |
Typ |
Beschreibung |
ChangeToken |
SP.ChangeToken |
Gets a value that specifies a change token that identifies the changed object. |
StringValue |
String |
Gets or sets a string value that contains the serialized representation of the change token generated by the protocol server. |
ChangeType |
SP.ChangeType |
Contains the value of the type of change |
SiteId |
Guid |
Gets a value that identifies the site that contains the changed object. |
Time |
DateTime |
Gets a value that specifies the time that the object was modified. |
ItemId |
Number |
Gets a value that identifies the changed item. |
ListId |
Guid |
Gets a value that identifies the list that contains the changed item. In the case of a change that includes moving the item between lists, ListId must contain the value it had before the move. |
WebId |
Guid |
Gets a value that identifies the site that contains the changed item. |
Die Eigenschaften Editor und ServerRelativeUrl sind nicht beschrieben.
An Hand des Change Token kann auch festgelegt werden, ab welchen Zeitpunkt die Changelog Einträge zurückgegeben werden sollen. Dazu ist es lediglich notwendig den Startzeitpunkt an der Eigenschaft ChangeTokenStart des Changelog Query Objekts festzulegen:
query.ChangeTokenStart = { "StringValue": "1;3;ee496550-61f2-4ec2-9cba-ab94bea1083e;638608713485170000;-1" }
Der ChangeToken Start Wert besteht aus fünf Elementen, die durch ein Semikolon getrennt sind:
Eigenschaft |
Typ |
Wert |
Version |
Number |
1 |
Scope |
Number |
0 - Content Database, 1 - site collection, 2 - site, 3 - list |
GUID |
Guid |
GUID of the item the scope applies to (for example, GUID of the list) |
Time |
DateTime |
Time (in UTC) from when changes occurred. Must be the universal time |
Item |
Number |
Initialize the change item on the ChangeToken using a default value of -1 |
Bei der Angabe von -1 im Item-Teil, werden alle Elemente ab dem Zeitstempel zurückgegeben. Der Wert ist gut für die erste Iteration durch den Changelog. Möchte man die Werte in der nächsten Iteration nicht mehr haben, so muss der ChangeToken aus dem letzen Changelog Eintrag der letzten Iteration in der neuen Query übergeben werden.
query.ChangeTokenStart = { "StringValue": "1;3;ee496550-61f2-4ec2-9cba-ab94bea1083e;638617503070600000;8735668" }
Die Anzahl der zurückzugebenen Werte ist durch weitere Parameter in der REST API Url eingrenzbar. Durch die Angabe von $top=10, werden beispielsweise nur 10 Changelog Elemente zurückgeben.