Быстрый & Легко: Переименуйте загруженный файл, с помощью объектной модели SharePoint через получатель событий

ОБНОВЛЕНИЕ: Это работает, но есть существенные ограничения, которые описаны в комментарии. Это все еще может быть полезным в некоторых свержению.

ОБНОВЛЕНИЕ 2: В моем текущем проекте, Пользователи всегда загружать документы. В результате, Я не столкнуться с проблемой, где MS Word выполняется и думает, что файл был переименован на нем. Я побежал в проблему, "файл был изменен кем-то еще" и решить это через простой семафор типа флаг. Пользователи должны изменить поле данных мета от его значения по умолчанию для что-то другое. Itemupdated() приемник ищет допустимое значение до фактического выполнения rename и с тех пор, У меня не было никаких проблем. Ваш пробег может варьироваться.

У меня есть клиент требование, чтобы изменить имя файлов, загруженных в определенной библиотеке документов в соответствие с конкретной именования. API не поддерживает переименование»()" метод. Вместо этого, Мы используем "MoveTo(…)". Вот немного минимального кода для выполнения этой:

 государственные Переопределение void ItemAdded(SPItemEventProperties Свойства)
        {
            SPFile f = свойства.ListItem.File;

            f.moveTo(Свойства.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

Только хитростью является «свойства. ListItem.ParentList.RootFolder.Url». MoveTo() метод требует URL-адреса. Это пюре строка указывает меня к корневой папке моей текущей библиотеки документов. Это позволяет мне избежать любого жесткого кодирования в моем приемник событий.

Это более полезным версия, которая делает то же самое, но присваивает имя файла «Титул»:

 государственные Переопределение void ItemAdded(SPItemEventProperties Свойства)
        {
            DisableEventFiring();

            // Присвойте название данного пункта на имя самого файла.
 // ПРИМЕЧАНИЕ: Это назначение должно иметь место до того, как мы изменить сам файл.
 // Вызов обновление() на SPFile кажется недействительным свойства в
 // Некоторые чувства.  Обновления для "название" не удалось пока что изменения (и обновление() звонок)
 // были перемещены за изменения в имени файла.
            Свойства.ListItem["Название"] = Свойства.ListItem.File.Name;

            Свойства.ListItem.Update();

            SPFile f = свойства.ListItem.File;

            // Получить расширение файла.  Нам нужно, что позже.
 Строка spfileExt = Новые функции FileInfo(f.Name).Расширение;

            // Переименуйте файл Идентификатор элемента списка и использовать расширение файла для сохранения
 // Эта часть его нетронутым.
            f.moveTo(Свойства.ListItem.ParentList.RootFolder.Url +
                "/" + Свойства.ListItem["ID"] + spfileExt);

            // Совершить переезд.
            f.Update();

            EnableEventFiring();
        }

4 мысли о «Быстрый & Легко: Переименуйте загруженный файл, с помощью объектной модели SharePoint через получатель событий

  1. Без имени
    Также, Если вы делаете это из программы Word, Он будет возвращать ошибку и сказать, что этот файл не существует. Он не рассказывал о новый URL-адрес. Я еще не нашли способ обойти это.
  2. Пол Galvin
    Спасибо за отметив, что из. Я не знаю ответа на этот один, либо … будет интересно посмотреть, как управлять им.
    РЕ: Async & перенаправление
    Я интересую если он переезжает ItemAdding будет решить. Это большая дыра.
    Спасибо!
    –Пол
  3. Надим Mitha
    Потому что асинхронно получает переместить файл, Существует возможность перенаправления EditForm.aspx до переезда (и это плохо). Вы увидите, что это произойдет, если вы сделать код спать до линии MoveTo. Я до сих пор не понял, что можно сделать об этой проблемы наряду с использованием настраиваемого редактирования формы.

Оставь ответ

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