In Dokumentbibliotheken in SharePoint gibt es eine nette Funktion zum Kopieren von Dokumenten an einen anderen Speicherort: die Senden-An Aktion.

image

Doch leider kann hier nur jeweils eine einzelne Datei kopiert werden. Sobald man ein zweites Dokument auswählt, ist der Menüpunkt nicht mehr aktiviert.

image

Diese Funktion kann man jedoch mit Hilfe einer Custom Action selbst erweitern, so dass auch mehrere Dateien an einen neuen Speicherort kopiert werden können (der Button “Export” in den Screenshots).

Die Lösung besteht aus 2 Teilen:

  • der Custom Action in der Ribbon Bar
  • der Kopierfunktion auf einer Application Page

Für die Umsetzung der Custom Action bediene ich mich bei einem von mir erstellen Blog-Artikel zur Erkennung von ausgewählten Dokumenten in einer Bibliothek (siehe hier). Mit Hilfe der dort vorgestellten Aktion wird die ID aller selektierter Dokumente an eine Application Page weitergeleitet, auf der der Benutzer noch einmal bestätigen kann, dass er die Dokumente kopieren möchte.

image

Nach dem Klick auf den Start-Button wird die Verarbeitung der Dokumente vorgenommen. Der folgenden Code-Ausschnitt wird ausgeführt. Jedes Dokument wird mit Hilfe der CopyTo Methode zum Ziel kopiert. Praktischerweise werden beim Kopieren die zugehörigen Metadaten mitgenommen, wenn in der Zielbibliothek der passende Inhaltstyp verfügbar ist.

string destinationListUrl = "http://hansevision-dev-sp/Dokumente";

string[] itemIds = Request.QueryString["ItemId"].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
SPList list = SPContext.Current.Web.Lists[new Guid(Request.QueryString["ListId"])];

foreach (string itemId in itemIds)
{
    SPListItem item = list.GetItemById(Convert.ToInt32(itemId, CultureInfo.InvariantCulture));
    item.File.CopyTo(SPUrlUtility.CombineUrl(destinationListUrl, item.File.Name), true);
}

Infos zur CopyTo Methode gibt es hier (Link zur MSDN-Referenz):

 

Leave a comment

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

Time limit is exhausted. Please reload the CAPTCHA.