Бърз & Лесно: Преименуване на качения файл с помощта на SharePoint обектния модел чрез получател на събитие

АКТУАЛИЗИРАНЕ: Това работи, но има съществени ограничения, които са описани в коментарите. Това все още може да бъде полезна в някои обстоятелствата.

АКТУАЛИЗИРАНЕ 2: В сегашния си проект, Потребителите винаги качване на документи. Като резултат, Аз не тичам в проблем, когато MS Word работи и мисли, че файлът е бил преименуван на него. Аз тичам в проблем, "файлът е променен от друг" и това решени чрез проста семафор тип флаг. Потребителите трябва да промените мета данни поле от стойността й по подразбиране на нещо друго. Itemupdated() приемник търси валидна стойност там, преди действително да се извършва Преименуване и оттогава, Не съм имал никакви проблеми. Вашият километраж може да варира.

Имам клиент изискване за промяна на името на качените файлове качени в конкретен документ библиотека да се съобрази с конкретен именуване конвенция. API не предвижда "Преименуване()" метод. Вместо това, Ние използваме "Движа(…)". Тук е минимален малко код, за да постигнем това:

 обществени замени невалидни ItemAdded(SPItemEventProperties имоти)
        {
            SPFile f = свойства.ListItem.File;

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

        }

Само сложната малко е "свойства. ListItem.ParentList.RootFolder.Url". Движа() метод изисква URL адрес. Това пюре низ точки ми в главната папка на my текущ документ библиотека. Това ми позволява да се избегне всяко твърд кодиране в моя случай приемника.

Това е по-полезен версия, която прави същото, но Задава името на файла на "Заглавието":

 обществени замени невалидни 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. Без име
    Също, Ако направите това от в Word, Тя ще върне грешка и кажа файл не съществува. Той не е казал за новия адрес. Аз още не съм намерил начин около това.
  2. Пол Galvin
    Благодаря за сочещи, че вън. Аз не знам отговора на този един или … ще бъде интересно да видим как да го управлявате.
    RE: Async & пренасочване
    Чудя се, ако го преместите ItemAdding ще го реши. Това е една голяма дупка.
    Благодаря!
    –Пол
  3. Християна Веселка
    Тъй като файла се премества асинхронно, има възможност за се пренасочва към EditForm.aspx, преди преместването се ангажира (и това е лошо). Вие ще видите, че това се случва, ако направите кода сън преди движа линия. Аз все още не разбра какво може да се направи за този проблем, освен да използвате персонализиран редактиране форма.

Оставете отговор

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани *