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(); } |