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; }