2009-06-29 17 views
10

में दस्तावेज़ लाइब्रेरी में फ़ाइलों की प्रतिलिपि बनाएँ मेरे पास SharePoint में एक दस्तावेज़ लाइब्रेरी है। जब उस लाइब्रेरी में एक नई फ़ाइल अपलोड की जाती है तो मैं चाहता हूं कि यह स्वचालित रूप से किसी अन्य दस्तावेज़ लाइब्रेरी में कॉपी हो जाए। मैं यह कैसे कर सकता हूँ?शेयरपॉइंट

+0

सी # और शेयरपॉइंट टैग के संदर्भ में यह प्रश्न सही समझ में आता है - फिर से खोलने के लिए मतदान। –

उत्तर

14

एक आइटम ईवेंट रिसीवर का उपयोग करें और ItemAdded ईवेंट ओवरराइड करें। SPItemEventProperties आपको ListItem संपत्ति के माध्यम से सूची आइटम का संदर्भ देगा।

ऐसा करने के दो तरीके हैं (CopyTo की आपकी खोज के लिए धन्यवाद)।

विधि 1: एक ही साइट संग्रह में किसी भी स्थान पर उसके संबंधित फाइल और गुणों के साथ किसी भी सूची आइटम CopyTo

इस विधि प्रतियां का उपयोग करें (संभवतः अन्य वेब अनुप्रयोगों के रूप में अच्छी तरह लेकिन मैं परीक्षण नहीं किया)। यदि आप आइटम की संपत्तियों को देखते हैं या इसके ड्रॉप-डाउन मेनू का उपयोग करते हैं तो शेयरपॉइंट स्वचालित रूप से स्रोत आइटम के लिंक को भी बनाए रखता है। इस लिंक को UnlinkFromCopySource के साथ हटाया जा सकता है।

कॉपीटो के लिए एकमात्र चाल यह है कि गंतव्य स्थान के लिए एक पूर्ण यूआरएल आवश्यक है।

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

संबंधित मुद्दे