سریع & ساده: تغییر نام فایل آپلود شده با استفاده از شیرپوینت مدل شیء از طریق یک گیرنده رویداد

تکمیلی: This works but there are significant limitations which are described in the comments. This may still be useful in some cirumstances.

تکمیلی 2: در پروژه کنونی من, users always upload documents. به عنوان یک نتیجه, I don’t run into a problem where MS Word is running and thinks that the file was renamed on it. I did run into a problem, "the file was modified by someone else" and solved this via a simple semaphore type flag. Users need to change a meta data field from its default value to something else. The itemupdated() گیرنده به نظر می رسد برای یک مقدار معتبر وجود دارد در واقع قبل از انجام تغییر نام دهید و پس از آن, I have not had any problems. Your mileage may vary.

I have a client requirement to change the name of files uploaded to a specific document library to conform with a particular naming convention. The API does not provide a "rename()" روش. در عوض, استفاده می کنیم "MoveTo(…)". Here is a minimal bit of code to accomplish this:

 عمومی نادیده گرفتن از درجه اعتبار ساقط ItemAdded(SPItemEventProperties خواص)
        {
            SPFile F = properties.ListItem.File;

            f.MoveTo(properties.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

The only tricky bit is the "properties.ListItem.ParentList.RootFolder.Url". The MoveTo() method requires a URL. That mashed up string points me to the root folder of my current document library. This allows me to avoid any hard coding in my event receiver.

این یک نسخه مفید تر است که می کند همان چیزی است, but assigns the name of the file to "Title":

 عمومی نادیده گرفتن از درجه اعتبار ساقط ItemAdded(SPItemEventProperties خواص)
        {
            DisableEventFiring();

            // اختصاص عنوان این آیتم به نام خود فایل.
 // توجه: این وظیفه باید قبل از فایل خود را تغییر.
 // تلفن به روز رسانی() در SPFile به نظر می رسد به ابطال خواص در
 // از بعضی جهات.  Updates to "Title" تا که تغییر شکست خورده (و به روز رسانی() صدا)
 // در مقابل تغییر را به نام فایل منتقل شدند.
            properties.ListItem["Title"] = properties.ListItem.File.Name،;

            properties.ListItem.Update();

            SPFile F = properties.ListItem.File;

            // دریافت پسوند فایل.  ما نیاز داریم که بعد از.
 رشته spfileExt = جدید FileInfo(f.Name).گسترش;

            // تغییر نام فایل به ID قلم دوم از اقلام لیست و استفاده از پسوند فایل را به نگه داشتن
 // که بخشی از آن دست نخورده.
            f.MoveTo(properties.ListItem.ParentList.RootFolder.Url +
                "/" + properties.ListItem["ID"] + spfileExt);

            // مرتکب حرکت.
            f.Update();

            EnableEventFiring();
        }

4 دیدگاه در "سریع & ساده: تغییر نام فایل آپلود شده با استفاده از شیرپوینت مدل شیء از طریق یک گیرنده رویداد

  1. بدون نام
    همچنین, اگر شما این کار را از داخل ورد, آن را یک خطا و می گویند فایل وجود ندارد. این در مورد آدرس جدید گفته نشده است. من هنوز یک راه حل این یافت نشد.
    پاسخ
  2. پل گالوین
    Thanks for pointing that out. I don’t know an answer to that one either … جالب خواهد بود تا ببینید که چگونه برای مدیریت آن.
    RE: async است & راهنمایی مجدد
    I wonder if moving it to an ItemAdding will solve it. That’s a big hole.
    سپاس ها!
    –پل
    پاسخ
  3. ندیم Mitha
    از آنجا که فایل ناهمگام منتقل می شود, است که امکان از از هدایت به EditForm.aspx مورد وجود دارد قبل از اینکه حرکت متعهد است (و این بد است). You’ll see that this happens if you make the code sleep before the MoveTo line. I still haven’t figured out what can be done about that problem aside from using a customized edit form.
    پاسخ

پاسخ

آدرس ایمیل شما منتشر نخواهد شد. بخشهای موردنیاز علامتگذاری شدهاند *