त्वरित & आसान: अपलोड की गई एक घटना रिसीवर के माध्यम से SharePoint ऑब्जेक्ट मॉडल का उपयोग कर फ़ाइल का नाम बदलें

अद्यतन: यह काम करता है, लेकिन वहाँ जो टिप्पणी में वर्णित हैं महत्वपूर्ण सीमाएं हैं. यह अभी भी कुछ cirumstances में उपयोगी हो सकता है.

अद्यतन 2: मेरे वर्तमान परियोजना में, उपयोगकर्ताओं को हमेशा दस्तावेज़ अपलोड करें. एक परिणाम के रूप में, मैं कहाँ MS वर्ड चल रहा है और सोचता है कि फ़ाइल पर यह नाम दिया गया था एक समस्या में चला नहीं. मैं एक समस्या में चला था, "फ़ाइल किसी और द्वारा संशोधित किया गया" और यह एक सरल सिकंदरा प्रकार ध्वज के माध्यम से हल. एक मेटा डेटा फ़ील्ड के लिए कुछ और उसके डिफ़ॉल्ट मान से बदलने के लिए उपयोगकर्ताओं की आवश्यकता. Itemupdated() रिसीवर वास्तव में नाम बदलें प्रदर्शन कर रहा से पहले और उसके बाद से वहाँ कोई मान्य मान के लिए दिखता है, मैं किसी भी समस्याओं का नहीं था. आपका लाभ भिन्न हो सकते हैं.

मैं एक ग्राहक की आवश्यकता के अनुरूप के साथ एक विशेष सम्मेलन नामकरण किसी विशिष्ट दस्तावेज़ लायब्रेरी के लिए अपलोड की गई फ़ाइलों का नाम बदलने के लिए है. एपीआई एक "पुनर्नामित नहीं प्रदान करता है()" विधि. इसके बजाय, हम का उपयोग करें "MoveTo(…)". यहाँ इस को पूरा करने के लिए कोड की कम से कम थोड़ी है:

 सार्वजनिक ओवरराइड करें शून्य ItemAdded(SPItemEventProperties गुण)
        {
            SPFile f = गुण।ListItem.File;

            f.MoveTo(गुण।ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

केवल मुश्किल सा है "गुण। ListItem.ParentList.RootFolder.Url". MoveTo() विधि किसी URL की आवश्यकता है. कि स्ट्रिंग अंक ले मुझे मेरे वर्तमान दस्तावेज़ लायब्रेरी के रूट फ़ोल्डर में मसला हुआ. यह मुझे मेरी घटना रिसीवर में किसी भी हार्ड कोडिंग से बचने के लिए अनुमति देता है.

यह एक अधिक उपयोगी संस्करण है कि एक ही बात करता है, लेकिन "शीर्षक के लिए" फ़ाइल का नाम असाइन करता है:

 सार्वजनिक ओवरराइड करें शून्य ItemAdded(SPItemEventProperties गुण)
        {
            DisableEventFiring();

            // इस आइटम का शीर्षक स्वयं फ़ाइल के नाम को असाइन करें.
 // नोट: हम स्वयं फ़ाइल संशोधित करने से पहले इस असाइनमेंट जगह ले लेना चाहिए.
 // अद्यतन बुला() पर SPFile गुण में अमान्य करने लगता है
 // कुछ भाव.  "शीर्षक के लिए अद्यतन" जब तक कि बदलने में विफल रहा (और अद्यतन() कॉल)
 // परिवर्तन के सामने फ़ाइल नाम के लिए चले गए थे.
            गुण।ListItem["शीर्षक"] गुण =।ListItem.File.Name;

            गुण।ListItem.Update();

            SPFile f = गुण।ListItem.File;

            // फ़ाइल का एक्सटेंशन मिल.  हमें जरूरत है कि बाद में.
 स्ट्रिंग spfileExt = नई FileInfo(f.Name).एक्सटेंशन;

            // सूची आइटम ID करने के लिए फ़ाइल नाम बदलें और रखने के लिए फ़ाइल एक्सटेंशन का उपयोग करें
 // यह अक्षुण्ण का वह हिस्सा.
            f.MoveTo(गुण।ListItem.ParentList.RootFolder.Url +
                "/" + गुण।ListItem["आईडी"] + spfileExt);

            // हटो संकल्प लें.
            f.Update();

            EnableEventFiring();
        }

4 पर विचार "त्वरित & आसान: अपलोड की गई एक घटना रिसीवर के माध्यम से SharePoint ऑब्जेक्ट मॉडल का उपयोग कर फ़ाइल का नाम बदलें

  1. कोई नाम नहीं
    भी, यदि आप Word के भीतर से यह करते हैं, यह एक त्रुटि वापसी करेंगे और कहते हैं कि फ़ाइल मौजूद नहीं है. यह नया URL के बारे में नहीं बताया है. मैं अभी तक इस के आसपास कोई रास्ता नहीं मिला है.
  2. पॉल Galvin
    कि ओर इशारा करते हुए के लिए धन्यवाद. मैं एक जवाब है कि एक को या तो पता नहीं … कैसे इसे का प्रबंधन करने के लिए देखने के लिए दिलचस्प हो जाएगा.
    पुन: async & पुनर्निर्देशन
    मुझे आश्चर्य है कि यह करने के लिए एक ItemAdding चलती इसे हल होगा अगर. कि एक बड़ा छेद है.
    धन्यवाद!
    –पॉल
  3. नदीम Mitha
    क्योंकि फ़ाइल asynchronously स्थानांतरित हो जाता है, EditForm.aspx करने के लिए पुनर्निर्देशित किया जा रहा से पहले कदम प्रतिबद्ध है की संभावना है (और है कि बुरा है). आप देखेंगे कि यदि आप कोड MoveTo लाइन से पहले सो कर ऐसा होता है. मैं अब भी समझ नहीं किया है क्या एक स्वनिर्धारित संपादित करें फ़ॉर्म का उपयोग कर एक तरफ से उस समस्या के बारे में किया जा सकता है.

करने के लिए एक उत्तर दें छोड़ दो नदीम Mitha उत्तर रद्द करे

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. अपेक्षित स्थानों को रेखांकित कर दिया गया है *