Rapid & Uşor: Redenumiţi fişierul încărcat utilizând modelul de obiect SharePoint Via un receptor de eveniment

ACTUALIZARE: Acest lucru funcţionează, dar există limitări semnificative care sunt descrise în Comentarii. Acest lucru poate fi încă utilă în unele circumstanțele.

ACTUALIZARE 2: În proiectul meu curent, utilizatorii întotdeauna Încărcați documente. Ca rezultat al, Eu nu a alerga într-o problemă în cazul în care MS Word se execută şi crede că fişierul a fost redenumit pe ea. I a alerga într-o problemă, "fişierul a fost modificat de altcineva" şi acest lucru rezolvat prin intermediul unui pavilion de tip semafor simplu. Utilizatorii au nevoie pentru a schimba un câmp de date meta la valoarea sa implicită la altceva. Itemupdated() receptor caută o valoare validă de acolo înainte de a efectua de fapt Redenumire şi de atunci, Nu am avut probleme. Poate varia de kilometraj dumneavoastră.

Eu am o cerinţă de client de a schimba numele de fişiere încărcat la o bibliotecă de documente specifice pentru a se conforma cu o convenţie de denumire special. API nu furnizează o Redenumire"()" metoda. În schimb, vom folosi "MoveTo(…)". Aici este un pic minimă de cod pentru a realiza acest lucru:

 publice suprascrie nule ItemAdded(SPItemEventProperties proprietăţi)
        {
            SPFile f = proprietăţi.ListItem.File;

            f.MoveTo(proprietăţi.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

Bit înşelător numai este "proprietăţile. ListItem.ParentList.RootFolder.Url". MoveTo() metoda necesită un URL. Care piure şir de puncte de mine la folderul rădăcină al meu curent bibliotecă de documente. Acest lucru permite-mi pentru a evita orice greu de codificare în receptor mea de eveniment.

Aceasta este o versiune mult mai util, care face acelaşi lucru, dar atribuie numele de fişier "Titlul":

 publice suprascrie nule ItemAdded(SPItemEventProperties proprietăţi)
        {
            DisableEventFiring();

            // Atribui titlul de acest element pentru numele fişierului în sine.
 // NOTĂ: Această misiune trebuie să aibă loc înainte de a ne modifica fişierul în sine.
 // Actualizare de asteptare() pe SPFile pare să invalideze proprietăţi în
 // unele sens.  Actualizărilor titlu"" nu a reuşit până la această schimbare (şi actualizare() apel)
 // au fost mutate în faţa schimbarea numele de fişier.
            proprietăţi.ListItem["Titlul"] = proprietăţi.ListItem.File.Name;

            proprietăţi.ListItem.Update();

            SPFile f = proprietăţi.ListItem.File;

            // Obţine extensia fişierului.  Am nevoie de asta mai târziu.
 şir spfileExt = noi AuthConfig(f.Name).Prelungire;

            // Redenumiţi fişierul ID element de listă şi de a folosi extensia de fişier pentru a menţine
 // că o parte din acesta intacte.
            f.MoveTo(proprietăţi.ListItem.ParentList.RootFolder.Url +
                "/" + proprietăţi.ListItem["ID"] + spfileExt);

            // Se muta.
            f.Update();

            EnableEventFiring();
        }

4 gânduri pe "Rapid & Uşor: Redenumiţi fişierul încărcat utilizând modelul de obiect SharePoint Via un receptor de eveniment

  1. Nici un nume
    De asemenea, Dacă veţi face acest lucru de la Word, va returna o eroare şi spun că fişierul nu există. Nu se spune despre noul URL. Nu am găsit încă o modalitate în jurul acestei.
    Răspuns
  2. Paul Galvin
    Multumesc pentru ce indică faptul că. Nu ştiu răspunsul la faptul că unul fie … va fi interesant pentru a vedea cum să gestioneze.
    RE: asincron & Redirecţionare
    Mă întreb dacă acesta se deplasează de la o ItemAdding va rezolva. Asta e o gaură mare.
    mulţumesc!
    –Paul
    Răspuns
  3. Nedelcu zamfir
    Deoarece fişierul este mutat asincron, Există o posibilitate de a fi redirected la EditForm.aspx înainte de a muta este angajat (şi că este rău). Veţi vedea că acest lucru se întâmplă dacă tu a face codul de somn înainte de linia de MoveTo. Eu încă nu s-au dat seama ce se poate face despre această problemă în afară de utilizarea unui format particularizat editare.
    Răspuns

lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate *