Während eines Vortrages eines Kollegen von mir an der ShareConnect 2009 kam die Frage nach dem Löschen aller nicht mehr gebrauchten Versionen einer gesamten Dokumentbibliothek. Während dem Vortrag wurde dann die kurze Zwischendiskussion beendet, in dem man sich auf folgendes einigte; wenn man in den Library-Einstellungen die Haupt- und Nebenversionen global auf eine Version stellt, werden alle Versionen gelöscht.
Nach dem Vortrag diskutierten wir dieses Topic jedoch weiter. Denn der Punkt der da aufgegriffen wurde hat seine Berechtigung. Die Idee dahinter ist, dass man eine Projektsite, die nicht mehr gebraucht wird für alle Benutzer auf „read-only“ setzt und (um Platz zu sparen) von allen Dokumenten nur noch die letzte Version behält.
Bei dieser Diskussion in den Gängen der Rheingoldhalle waren wir uns einig, dass es so nicht geht. Wieder zuhause testete ich das kurz. Um es kurz zu machen, so geht es nicht.
Die Frage nun wie geht es dann. Über das SharePoint-WebInterface gibt es keinen Weg um alle „nicht benötigten“ Versionen zu löschen. Auch STSADM bietet keine Möglichkeit. Während meiner Suche bin ich auf drei Varianten gestossen.
PowerShell: Ein Benutzer der SharePointCommunity.de hat ein elegantes PowerShell-Script gepostet um nicht gebrauchte Versionen auf einer SiteCollection zu löschen.
Ein anderer Weg ist Thomas Palmié zu diesem Problem bereits gegangen. Um die Versionen in einer Document Library zu löschen kann man entweder den WebService:
http://<moss>/_vti_bin/versions.asmx
oder das SPFileVersion API verwenden.
1. Web Service
foreach (SPListItem item in library.Items)
{
SPFile file = (SPFile)item.File;
int counter = item.Versions.Count;
VersionService.Versions objVersion = new VersionService.Versions();
objVersion.Credentials = System.Net.CredentialCache.DefaultCredentials;
System.Xml.XmlNode ndVersion = objVersion.DeleteAllVersions(item.File.ToString());
}
2. API
SPWeb web = new SPSite(“<url>”).OpenWeb();
SPFolder folder = web.Folders["<document library>"];
SPFile file = folder.Files["<document>"];
SPFileVersionCollection versions = file.Versions;
SPFileVersion version = versions[<version #>];
version.Delete();
Bei allen Varianten bleibt aber ein Problem das nur der Benutzer selber löschen kann. Damit SharePoint das Löschen zulässt, muss eine Hauptversion publiziert sein. Wenn die letzte Version des Dokuments keine Hauptversion, sondern eine Nebenversion (z.B. Version 2.1) ist, kann das Dokument nicht gelöscht werden.





















