Wie kann ich aus einer Sharepoint-URL die Version auslesen.
Ein typischer Link eines Verweises auf die History in Sharepoint sieht in etwa so aus:
https://company.sharepoint.com/sites/TeamName/_vti_history/518/document.docx
Erkennbar ist der Link durch das „_vti_history“ in der URL. Daraus lässt sich programmatisch auch leicht die Original-URL aus der neuen Version basteln:
https://company.sharepoint.com/sites/TeamName/document.docx
Im Prinzip schneidet man hierzu einfach die „_vti_history“ und die Zahl heraus. Die Zahl ist übrigens die Version, in dem Fall die Version des Dokuments. Diese entspricht der folgenden Version:

Die 512 ist kodiert die Version 1.6. Dabei kommt folgende Formel zum Einsatz:
Version = Major * 512 + Minor
Also in unserem Beispiel:
518 = 1 * 512 + 6
Umwandlung von Major.Minor mit C#
/// <summary>
/// Converts a major.minor version information to the sharepoint version
/// number
/// </summary>
/// <param name="version">e.g. 1.6</param>
/// <returns></returns>
public static int MajorMinorToSharepointVersion(string version)
{
var splitted = version.Split('.');
if (splitted.Length != 2) return -1;
var major = Convert.ToInt16(splitted[0]);
var minor = Convert.ToInt16(splitted[1]);
int result = major * 512 + minor;
return result;
}
Umwandlung von Sharepoint Version nach Major.Minor
/// <summary>
/// Converts a sharepoint version to the readable major.minor format
/// </summary>
/// <param name="sharepointVersion">e.g. 518</param>
/// <returns></returns>
public static string SharepointVersionToMajorMinor(int sharepointVersion)
{
var remainder = sharepointVersion % 512;
var major = sharepointVersion / 512;
var version = major + "." + remainder;
return version;
}
Ermitteln, ob ein Link ein History-Link ist
/// <summary>
/// Checks if the url is a history link from Sharepoint
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static bool IsHistoryLink(string url)
{
var result = url.Contains("_vti_history");
return result;
}
Version aus Sharepoint-URL auslesen
/// <summary>
/// Extracts the version from a Sharepoint history url
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static int GetVersionFromUrl(string url)
{
var pattern = @"_vti_history\/(?<version>.*?)\/";
var regex = new Regex(pattern);
var match = regex.Match(url);
if (match.Success)
{
var versionString = match.Groups["version"].Value;
var versionInt = Convert.ToInt16(versionString);
return versionInt;
}
return -1;
}
