Im ein oder anderen Anwendungsfall ist es sinnvoll und / oder notwendig, programmatische auf die Versionen eines Dokumentes in einer Dokumentbibliothek zuzugreifen. Zu diesem Zweck stellt die SharePoint API die Klassen SPListItemVersion und SPFileVersion bereit.

Ein Dokument könnte z.B. in folgenden Versionen vorliegen:

image

Nun kann man im Code entweder für das Listenelement (SPListItem) oder für die Datei (SPFile) die Versionen abrufen:

string itemUrl = "http://hansevision/TestBibliothek/Dokument1.rtf";

using (SPSite site = new SPSite(itemUrl))
{
    using (SPWeb web = site.OpenWeb())
    {
        SPFile file = web.GetFile(itemUrl);

        Console.WriteLine("File versions:");
        for (int i=0; i < file.Versions.Count; i++)
        {
            SPFileVersion version = file.Versions[i];
            Console.WriteLine(version.VersionLabel + ", " + version.ID);
        }

        Console.WriteLine();
        Console.WriteLine("Item versions:");
        for (int i=0; i < file.Item.Versions.Count; i++)
        {
            SPListItemVersion version = file.Item.Versions[i];
            Console.WriteLine(version.VersionLabel + ", " + version.VersionId);
        }
    }
}

Wenn man nun allerdings die Anzahl der Versionen und die IDs vergleicht, dann stellt man fest, dass es immer genau eine Listenelementversion mehr gibt als Dateiversion, wie die folgende Ausgabe verdeutlicht.

image

Zusätzlich sind auch noch die Versionen in unterschiedlichen Reihenfolgen abgelegt. Daher kann der Zugriff nur mit Hilfe der eindeutigen ID erfolgen, denn diese ID ist in SPListItemVersion und SPFileVersion identisch (mit Ausnahme der aktuellen Dateiversion).

Mit Hilfe des folgenden Codes ist so z.B. das Auslesen des Dokumentinhalts ausgehend von einer Listenelementversion möglich.

SPListItemVersion listItemVersion = ...
byte[] content;

if (listItemVersion.IsCurrentVersion)
{
    content = file.OpenBinary();
}
else
{
    SPFileVersion fileVersion = file.Versions.GetVersionFromID(listItemVersion.VersionId);
    content = fileVersion.OpenBinary();
}

 

Leave a comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.