Швидкий & Легко: Перейменувати переданому файлі за допомогою SharePoint об'єктної моделі через події-приймач

ОНОВЛЕННЯ: Це працює, але існують значні обмеження, які описані в коментарях. Це все ще може бути корисно в деяких cirumstances.

ОНОВЛЕННЯ 2: На мій поточний проект, користувачі завжди передавати документи. У результаті, Я не зіткнутися з проблемою, де MS Word працює і думає, що файл було перейменовано на ньому. Я зіткнутися з проблемою, "файл було змінено іншим користувачем" і вирішив ці проблеми за допомогою простих семафора типу прапор. Користувачам потрібно змінити поле meta даних значень за замовчуванням на щось інше. На itemupdated() приймач шукає припустиме значення, перш ніж насправді виконує перейменувати і з тих пір, У мене не було ніяких проблем. Ваш пробіг може варіюватися.

У мене є клієнт вимогою, щоб перейменувати файли, завантажені до конкретних бібліотеки у відповідність з особливий угоду про. API не надає "перейменувати()" метод. Замість цього, Ми використовуємо "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.File.Name;

            властивості.ListItem.Update();

            Файл SPFile f = властивості.ListItem.File;

            // Отримати розширення файлу.  Нам потрібні які пізніше.
 рядок spfileExt = нові FileInfo(f.Name).Розширення;

            // Перейменувати файл Ідентифікатор елемента списку і за допомогою розширення файлу зберегти
 // ту частину недоторканими.
            f.MoveTo(властивості.ListItem.ParentList.RootFolder.Url +
                "/" + властивості.Елемент списку["ІДЕНТИФІКАТОР"] + spfileExt);

            // Зробити цей крок.
            f.Update();

            EnableEventFiring();
        }

4 думки про «Швидкий & Легко: Перейменувати переданому файлі за допомогою SharePoint об'єктної моделі через події-приймач

  1. Без імені
    Також, Якщо ви робите це з в межах слово, він буде повертати помилку і сказати, що файл не існує. Не розповідається про нову URL-адресу. Я ще не знайшов обхідний шлях.
  2. Paul Galvin
    Спасибі за вказівку це. Я не знаю відповіді на це відповісти, або … буде цікаво подивитися, як керувати ним.
    RE: асинхронні & перенаправлення
    Цікаво, якщо переїхати в ItemAdding буде її вирішити. Це велика діра.
    Дякую!
    –Пол
  3. Надим Mitha
    Оскільки файл отримує переміщено асинхронно, Існує можливість перенаправлені на EditForm.aspx перед тим, як рухатися бере на себе зобов'язання (і що таке погано). Ви побачите, що це відбувається, якщо ви зробите код спати до MoveTo лінії. Я до сих пір ще не з'ясували, що можна зробити про цю проблему, крім за допомогою настроюваного редагування форми.

Дати відповідь

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *