Rýchle & Jednoduché: Premenovať nahraný súbor pomocou SharePoint objektový Model cez udalosti prijímač

AKTUALIZÁCIA: To funguje, ale existujú významné obmedzenia, ktoré sú opísané v poznámkach. To môže byť užitočné v niektorých okolnosti.

AKTUALIZÁCIA 2: V môj súčasný projekt, užívatelia vždy nahrať dokumenty. V dôsledku, Nechcem bežať do problému kde MS Word pracuje a myslí, že súbor bol premenovaný na to. Som naraziť na problém, "súbor bol zmenený iným používateľom" a riešiť to cez jednoduché semafor typu príznak. Používatelia musia zmeniť pole meta data z predvolenú hodnotu niečo iné. Itemupdated() prijímač vyhľadáva platnú hodnotu tam pred rezervujú premenovať a odvtedy, Nie som nemal žiadne problémy. Vaša najazdených kilometrov sa môžu líšiť.

Mám klienta požiadavka na zmenu názvu súbory nahrané do určitej knižnice dokumentov na dodržanie najmä konvencia. API neposkytuje premenovať"()" metóda. Namiesto toho, Používame "MoveTo(…)". Tu je trochu minimálne kódu na dosiahnutie tohto cieľa:

 verejné override neplatné ItemAdded(SPItemEventProperties vlastnosti)
        {
            Súbor SPFile f = vlastnosti.ListItem.File;

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

        }

Len záludné bit je "vlastnosti. ListItem.ParentList.RootFolder.Url". MoveTo() metóda vyžaduje adresu URL. Ktoré kaša sa reťazec bodov ma do koreňového priečinka moje súčasné knižnici dokumentov. To mi umožňuje vyhnúť akejkoľvek ťažko kódovanie v môj príjemca udalosti.

Je to oveľa užitočnejšie verziu, ktorá robí to isté, ale priradí názov súboru "Titul":

 verejné override neplatné ItemAdded(SPItemEventProperties vlastnosti)
        {
            DisableEventFiring();

            // Názov tejto položky priradiť názov súboru, samotný.
 // POZNÁMKA: Toto priradenie sa musí uskutočniť pred upravíme samotný súbor.
 // Volanie aktualizácie() na SPFile zdá narúšali vlastnosti
 // niektoré zmysel.  Zmenách v hlavy"" zlyhala, kým to zmeniť (a aktualizácia() hovor)
 // boli premiestnené pred zmenou názvu súboru.
            vlastnosti.ListItem[„Hlava"] = vlastnosti.ListItem.File.Name;

            vlastnosti.ListItem.Update();

            Súbor SPFile f = vlastnosti.ListItem.File;

            // Načítať príponu súboru.  Potrebujeme, že neskôr.
 reťazec spfileExt = nové FileInfo(f.name).Rozšírenie;

            // Premenujte súbor identifikácii položky zoznamu a používajú príponu udržať
 // časť neporušené.
            f.MoveTo(vlastnosti.ListItem.ParentList.RootFolder.Url +
                "/" + vlastnosti.ListItem["ID"] + spfileExt);

            // Zaviazať prechod.
            f.Update();

            EnableEventFiring();
        }

4 myšlienky na "Rýchle & Jednoduché: Premenovať nahraný súbor pomocou SharePoint objektový Model cez udalosti prijímač

  1. Bez názvu
    Tiež, Ak to z aplikácie Word, bude vráti chybu a povedať, súbor neexistuje. Nie je povedané o nové URL. I zatiaľ nenašiel tak asi toto.
    Odpoveď
  2. Paul Galvin
    Vďaka za ukazujúci, že. Nemusíte poznať odpoveď na ten buď … bude zaujímavé sledovať, ako spravovať.
    RE: Async & presmerovanie
    Zaujímalo by ma, ak sa presťahoval do ItemAdding bude riešiť. To je Veľká diera.
    vďaka!
    –Paul
    Odpoveď
  3. Nadeem Mitha
    Pretože sa súbor dostane presťahoval asynchrónne, existuje možnosť presmerovaný na EditForm.aspx pred zaviazaný prechod (a to je zlé). Uvidíte, že to sa stane, keď urobíte kód spať pred hranicou MoveTo. Stále ešte prišiel na to, čo možno urobiť o tento problém až na tlačive personalizovaného upraviť.
    Odpoveď

Zanechajte odpovedať na Nadeem Mitha zrušiť odpoveď

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *