Rychlé & Snadné: Přejmenovat uploadovaný soubor pomocí SharePoint objektový Model prostřednictvím přijímače události

AKTUALIZOVAT: To funguje, ale existují značné omezení, které jsou popsány v komentářích. Ještě to může být užitečné v některých okolností.

AKTUALIZOVAT 2: V aktuálním projektu, uživatelé vždy uložit dokumenty. Jako výsledek, Nechci běžet na problém kde MS Word je spuštěn a si myslí, že soubor byl přejmenován na něm. Já jsem běžet do problému, "byl soubor změněn jiným uživatelem" a to prostřednictvím jednoduchého semaforu typ příznaku. Uživatelé musí změnit meta datové pole výchozí hodnotu na něco jiného. Itemupdated() přijímač vyhledá platnou hodnotu před jeho skutečným provedením přejmenování a od té doby, Jsem neměl žádné problémy. Váš se může lišit.

Mám požadavek klienta ke změně názvu souborů ukládaných do určité knihovny dokumentů v souladu s konkrétní konvence pojmenování. API neposkytuje přejmenovat"()" Metoda. Místo toho, používáme "MoveTo(…)". Tady je trochu minimální kódu ke splnění tohoto úkolu:

 veřejné přepsat void ItemAdded(SPItemEventProperties vlastnosti)
        {
            Soubor SPFile f = vlastnosti.ListItem.File;

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

        }

Jediná choulostivá je "vlastnosti. ListItem.ParentList.RootFolder.Url". MoveTo() metoda vyžaduje URL. Kaše se řetězec bodů mě kořenové složce mé aktuální knihovny dokumentů. To mi umožňuje vyhnout jakékoliv pevné kódování v mém přijímač událostí.

To je mnohem užitečnější verzi, která dělá totéž, ale přiřadí název souboru "Title":

 veřejné přepsat void ItemAdded(SPItemEventProperties vlastnosti)
        {
            DisableEventFiring();

            // Název této položky přiřadit název souboru.
 // POZNÁMKA:: Toto přiřazení musí proběhnout dříve než budeme měnit samotný soubor.
 // Volání aktualizace() na soubor SPFile zdá znehodnotit vlastnosti v
 // nějaký smysl.  Aktualizace názvu"" selhala, dokud se to změnit (a aktualizovat() volání)
 // byly přesunuty před změnou názvu souboru.
            vlastnosti.ListItem["Titul"] = vlastnosti.ListItem.File.Name;

            vlastnosti.ListItem.Update();

            Soubor SPFile f = vlastnosti.ListItem.File;

            // Získejte příponu souboru.  Potřebujeme to později.
 řetězec spfileExt = nové FileInfo(f.Name).Prodloužení;

            // Soubor přejmenujte na ID položky seznamu a použijte příponu souboru, aby
 // Tahle část je neporušená.
            f.MoveTo(vlastnosti.ListItem.ParentList.RootFolder.Url +
                "/" + vlastnosti.ListItem["ID"] + spfileExt);

            // Potvrdit přesunutí.
            f.Update();

            EnableEventFiring();
        }

4 myšlenky na „Rychlé & Snadné: Přejmenovat uploadovaný soubor pomocí SharePoint objektový Model prostřednictvím přijímače události

  1. Beze jména
    Rovněž, Pokud provedete z aplikace Word, to bude chyba a že soubor neexistuje. To není řečeno, o nové adresy URL. Zatím jsem nenašel způsob, jak vyřešit tento.
  2. Paul Galvin
    Díky za zdůraznění, že se. Ani neznám odpověď na tenhle … bude zajímavé sledovat, jak na to.
    RE: asynchronní & přesměrování
    Zajímalo by mě, pokud přesunutí do ItemAdding, bude to vyřešit. To je velká díra.
    Dík!
    –Pavel
  3. Milena Mitha
    Protože soubor přesunuta asynchronně, je zde možnost přesměrování na EditForm.aspx před krok je potvrzena (a to je špatné). Uvidíte, že se tak stane, pokud se kód spát před řádek MoveTo. Stále ještě jsem nezjistil co se dá dělat problém, že až na formuláři vlastní úpravy.

Zanech odpověď

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *