Брз & Лако: Преименовање отпремљене датотеке Коришћење СхареПоинт Објецт Модел преко Евент Рецеивер

УПДАТЕ: 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:

 јавност заменити воид ИтемАддед(СПИтемЕвентПропертиес Некретнине)
        {
            СПФиле ф = пропертиес.ЛистИтем.Филе;

            ф.МовеТо(пропертиес.ЛистИтем.ПарентЛист.РоотФолдер.Урл + "/xyzzy.doc");
            ф.Упдате();

        }

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":

 јавност заменити воид ИтемАддед(СПИтемЕвентПропертиес Некретнине)
        {
            ДисаблеЕвентФиринг();

            // Додели наслов ове ставке на име фајла самог.
 // НАПОМЕНА: Овај задатак се мора одвијати пре него што измените саму датотеку.
 // Позивање упдате() на СПФиле изгледа да поништи својства у
 // неки смисао.  Updates to "Title" није до те промене (и ажурирање() позвати)
 // су се преселили испред промена имена датотеке.
            пропертиес.ЛистИтем["Title"] = Пропертиес.ЛистИтем.Филе.Наме;

            пропертиес.ЛистИтем.Упдате();

            СПФиле ф = пропертиес.ЛистИтем.Филе;

            // Набавите продужење датотеке.  Треба да се касније.
 ниска спфилеЕкт = нови Филе Инфо(ф.Наме).Продужетак;

            // Преименујте датотеку ИД ставке листе и употребите екстензију да
 // да део нетакнут.
            ф.МовеТо(пропертиес.ЛистИтем.ПарентЛист.РоотФолдер.Урл +
                "/" + пропертиес.ЛистИтем["ID"] + спфилеЕкт);

            // Цоммит тај потез.
            ф.Упдате();

            ЕнаблеЕвентФиринг();
        }

4 мисли о "Брз & Лако: Преименовање отпремљене датотеке Коришћење СхареПоинт Објецт Модел преко Евент Рецеивер

  1. Но наме
    Такође, Ако ово урадите из програма Ворд, она ће се вратити грешку и каже датотека не постоји. Он није рекао о новом УРЛ. Још увек нисам нашао начин око овог.
  2. Паул Галвин
    Thanks for pointing that out. I don’t know an answer to that one either … Биће интересантно видети како ће се њиме управљати.
    РЕ: асинц & Преусмеравање
    I wonder if moving it to an ItemAdding will solve it. That’s a big hole.
    Хвала!
    –Павле
  3. Надеем Митха
    Јер фајл се преселио асинхроно, постоји могућност да буду преусмерени ЕдитФорм.аспк пре потез извршено (и то је лоше). 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.

Леаве а Репли

Ваша емаил адреса неће бити објављена. Обавезна поља су означена *