2009-06-29 27 views
10

Mam bibliotekę dokumentów w SharePoint. Kiedy nowy plik jest przesyłany do tej biblioteki, chcę, aby był automatycznie kopiowany do innej biblioteki dokumentów. Jak mogę to zrobić?Kopiowanie plików do biblioteki dokumentów w SharePoint

+0

W kontekście znaczników C# i SharePoint to pytanie ma sens - głosowanie na ponowne otwarcie. –

Odpowiedz

14

Użyj odbiornika zdarzeń przedmiotu i zastąp go wydarzenie ItemAdded. SPItemEventProperties podaje odwołanie do elementu listy za pośrednictwem właściwości ListItem.

Są dwie metody, aby to zrobić (dzięki odkryciu CopyTo).

Metoda 1: Użyj CopyTo

Metoda ta kopie dowolnego elementu listy ze związanym z nim plików i właściwości do dowolnego miejsca w tym samym zbiorze witryn (ewentualnie innych aplikacji internetowych, jak dobrze, ale nie testowałem). Program SharePoint automatycznie zachowuje także łącze do elementu źródłowego, jeśli przegląda się właściwości elementu lub korzysta z jego menu rozwijanego. Ten link można usunąć za pomocą UnlinkFromCopySource.

Jedyna sztuczka dla CopyTo polega na tym, że pełny adres URL jest wymagany dla lokalizacji docelowej.

public class EventReceiverTest : SPItemEventReceiver 
{ 
    public override void ItemAdded(SPItemEventProperties properties) 
    { 
     properties.ListItem.CopyTo(
      properties.WebUrl + "/Destination/" + properties.ListItem.File.Name); 
    } 
} 

Metoda 2: Strumień kopia ręcznie ustawić właściwości

Metoda ta byłaby konieczna tylko wtedy, gdy potrzebna była większa kontrola nad którymi właściwości elementu są kopiowane lub jeśli zawartość pliku muszą zostać zmienione.

public class EventReceiverTest : SPItemEventReceiver 
{ 
    public override void ItemAdded(SPItemEventProperties properties) 
    { 
     SPFile sourceFile = properties.ListItem.File; 
     SPFile destFile; 

     // Copy file from source library to destination 
     using (Stream stream = sourceFile.OpenBinaryStream()) 
     { 
      SPDocumentLibrary destLib = 
       (SPDocumentLibrary) properties.ListItem.Web.Lists["Destination"]; 
      destFile = destLib.RootFolder.Files.Add(sourceFile.Name, stream); 
      stream.Close(); 
     } 

     // Update item properties 
     SPListItem destItem = destFile.Item; 
     SPListItem sourceItem = sourceFile.Item; 
     destItem["Title"] = sourceItem["Title"]; 
     //... 
     //... destItem["FieldX"] = sourceItem["FieldX"]; 
     //... 
     destItem.UpdateOverwriteVersion(); 
    } 
} 

Wdrożenie

Masz różne opcje wdrażania, jak również. Możesz powiązać odbiorniki zdarzeń z funkcją związaną z typem treści lub listą i programowo je dodać. Aby uzyskać więcej informacji, patrz this article at SharePointDevWiki.

+0

Upewnij się, że nie zapomnisz również skopiować metadanych !! – Colin

+0

Dzięki, dodałem to! –

+0

Cześć Alex, zauważyłem metodę CopyTo powiązaną z obiektem SPFile. czy mogę z tego skorzystać? – raklos

Powiązane problemy