Rask & Enkel: Gi nytt navn til opplastede filen ved hjelp av SharePoint-objektmodellen Via en hendelse-mottaker

OPPDATERINGEN: Dette fungerer, men det er betydelige begrensninger som er beskrevet i kommentarer. Dette kan være nyttig i noen cirumstances.

OPPDATERINGEN 2: I min nåværende prosjekt, brukere alltid laste opp dokumenter. Som et resultat, Jeg kjøre ikke inn i et problem der MS Word kjører og tenker at filen ble endret på den. Jeg gjorde kjøre inn et problem, "filen ble endret av noen andre" og løste dette via en enkel semafor typen flagg. Brukernes nød å endre meta datafelt fra standardverdien til noe annet. Itemupdated() mottakeren ser etter en gyldig verdi før du faktisk gjennomfører navneendringen og siden da, Jeg har ikke hatt noen problemer. Ditt kjørelengde kan variere.

Jeg har en klient krav om å endre navn på filer lastet opp til et bestemt dokumentbibliotek til å samsvare med en bestemt navnekonvensjon. APIEN gir ikke en "navneendring()" metoden. I stedet, Vi bruker "Flytt(…)". Her er litt minimal av kode for å oppnå dette:

 offentlig overstyre ugyldige ItemAdded(SPItemEventProperties Egenskaper)
        {
            SPFile f = egenskaper.ListItem.File;

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

        }

Det bare vanskelig bit er egenskapene. ListItem.ParentList.RootFolder.Url". MoveTo() metoden krever en URL. Som Moses opp peker meg til rotmappen av dokumentbiblioteket for gjeldende. Dette tillater meg å unngå noen harde koding i min hendelsesmottaker.

Dette er en mer nyttig versjon som gjør samme, men tilordner navnet på filen til "Tittel":

 offentlig overstyre ugyldige ItemAdded(SPItemEventProperties Egenskaper)
        {
            DisableEventFiring();

            // Tilordne tittelen på dette elementet til navnet på selve filen.
 // NOTE: Tildelingen må finne sted før vi endre selve filen.
 // Ringer oppdateringen() på SPFile synes å oppheve egenskapene i
 // noen følelse.  Oppdateringer til "tittel" mislyktes til som endrer (og oppdatere() kalle)
 // ble flyttet foran endringen i filnavnet.
            Egenskaper.ListItem["Tittel"] = Egenskaper.ListItem.File.Name;

            Egenskaper.ListItem.Update();

            SPFile f = egenskaper.ListItem.File;

            // Få forlengelse av filen.  Vi trenger som senere.
 streng spfileExt = nye FileInfo(f.name).Filtypen;

            // Endre filnavnet til den listeelement-ID, og bruk filtypen til å holde
 // som del av den intakt.
            f.MoveTo(Egenskaper.ListItem.ParentList.RootFolder.Url +
                "/" + Egenskaper.ListItem["ID"] + spfileExt);

            // Forplikte farten.
            f.Update();

            EnableEventFiring();
        }

4 tanker om “Rask & Enkel: Gi nytt navn til opplastede filen ved hjelp av SharePoint-objektmodellen Via en hendelse-mottaker

  1. Ingen navn
    Også, Hvis du gjør dette fra Word, det vil returnere en feil og si filen ikke finnes. Det er ikke sagt om de nye URL-Adressen. Jeg har ennå ikke funnet en vei rundt dette.
    Svar
  2. Paul Galvin
    Takk for peker ut. Jeg vet ikke et svar som en heller … vil være interessant å se hvordan du administrerer den.
    RE: Async & omadressering
    Jeg lurer på hvis du flytter det til en ItemAdding vil løse det. Det er et stort hull.
    takk!
    –Paul
    Svar
  3. Nadeem Mitha
    Fordi filen blir flyttet asynkront, Det er en mulighet for å bli omdirigert til EditForm.aspx før flyttingen er forpliktet (og det er dårlig). Du vil se at dette skjer hvis du koden sove før MoveTo-linje. Jeg fortsatt funnet ikke ut hva kan gjøres om dette problemet bortsett fra å bruke et tilpasset redigeringsskjema.
    Svar

legg igjen et svar

e-postadressen din vil ikke offentliggjøres. Obligatoriske felt er merket *