UPPDATERING: Detta fungerar men det finns betydande begränsningar som beskrivs i kommentarerna. Detta kan fortfarande vara användbart i vissa fall.
UPPDATERING 2: I mitt nuvarande projekt, användare alltid ladda upp dokument. Som en följd, Jag kör inte in i ett problem där MS Word körs och tycker att filen byttes namn på den. Jag stött på ett problem, "filen ändrades av någon annan" och löste detta via en enkel semafor typ flagga. Förbrukaren behov till ändra en meta datafält från standardvärdet till något annat. Itemupdated() mottagaren ser ut för ett giltigt värde det innan du faktiskt utför nytt namn och sedan dess, Jag har inte haft några problem. Användbarheten kan variera.
Jag har ett krav på klienten att ändra namn på filer som laddas upp till ett visst dokumentbibliotek att överensstämma med en viss namnkonvention. API tillhandahåller inte en "Byt namn()" metoden. I stället, Vi använder "MoveTo(…)". Här är lite minimal kod för att åstadkomma detta:
offentliga åsidosätta void ItemAdded(SPItemEventProperties egenskaper) { SPFile f = egenskaper.ListItem.File; f.moveTo(egenskaper.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc"); f.Update(); } |
Den bara knepiga biten är "egenskaper. ListItem.ParentList.RootFolder.Url". MoveTo() metoden kräver en URL. Som mosade upp strängen poäng mig till rotmappen på min nuvarande dokumentbibliotek. Detta gör att jag slipper någon hård kodning i min händelsemottagare.
Detta är en mer användbar version som gör samma sak, men tilldelas namnet på filen "Titel":
offentliga åsidosätta void ItemAdded(SPItemEventProperties egenskaper) { DisableEventFiring(); // Tilldela namnet på själva titeln på denna punkt. // ANMÄRKNING: Den här tilldelningen måste äga rum innan vi ändrar själva filen. // Kräver uppdatering() på SPFile verkar ogiltigförklara egenskaperna i // någon mening. Uppdateringar till "titel" Det gick inte att förändras (och uppdatera() Ring) // flyttades framför ändringen till i filnamnet. egenskaper.ListItem["Rubrik"] = egenskaper.ListItem.File.Name; egenskaper.ListItem.Update(); SPFile f = egenskaper.ListItem.File; // Få förlängning av filen. Vi behöver som senare. sträng spfileExt = nya FileInfo(f.Name).Förlängning; // Byt namn på filen till listan Objektets ID och använder filnamnstillägget att hålla // den del av det intakt. f.moveTo(egenskaper.ListItem.ParentList.RootFolder.Url + "/" + egenskaper.ListItem["ID"] + spfileExt); // Begå flytten. f.Update(); EnableEventFiring(); } |