2009-06-29 60 views
10

私はSharePointにドキュメントライブラリを持っています。新しいファイルがそのライブラリにアップロードされると、自動的に別のドキュメントライブラリにもコピーされます。これどうやってするの?SharePointのドキュメントライブラリにファイルをコピー

+0

C#タグとSharePointタグのコンテキスト内では、この質問は理にかなっています。投票を再開することです。 –

答えて

14

アイテムイベント受信者を使用し、ItemAddedイベントを上書きします。 SPItemEventPropertiesは、ListItemプロパティを使用してリストアイテムへの参照を提供します。

これを行うには2つの方法があります(CopyToを検出したため)。

方法1:(同様おそらく他のWebアプリケーションが、私はテストしていない)同じサイトコレクション内の任意の場所にそれに関連するファイルおよびプロパティを持つCopyTo

この方法でコピーする任意のリスト項目を使用します。 SharePointは、アイテムのプロパティを表示するかドロップダウンメニューを使用すると、ソースアイテムへのリンクも自動的に維持します。このリンクはUnlinkFromCopySourceで削除できます。

CopyToの唯一のトリックは、宛先の場所に完全なURLが必要であることです。

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

方法2:ストリームのコピー、手動で設定されたプロパティ

アイテムのプロパティがコピーされたり、ファイルの内容を変更する必要がある場合は、その上より詳細に制御する必要がある場合は、この方法が唯一必要となります。

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

展開

あなたにも展開するためのさまざまなオプションがあります。コンテンツタイプまたはリストに接続されているフィーチャにイベントレシーバを関連付け、プログラムで追加することができます。詳細はthis article at SharePointDevWikiを参照してください。

+0

メタデータもコピーすることを忘れないようにしてください! – Colin

+0

ありがとう、私は今それを追加しました! –

+0

こんにちはアレックス、私はSPFileオブジェクトに関連付けられてCopyToメソッドを気づいた。私はこれを利用できますか? – raklos

関連する問題