UPDATE: Dit werkt maar er zijn belangrijke beperkingen die worden beschreven in de commentaren. Dit kan nog steeds nuttig in sommige doen zijn.
UPDATE 2: In mijn huidige project, gebruikers uploaden altijd documenten. Als een resultaat, Ik lopen niet in een probleem waar MS Word wordt uitgevoerd en denkt dat het bestand werd gewijzigd op het. Ik heb lopen in een probleem, "het bestand is bewerkt door iemand anders" en dit opgelost via een eenvoudige semafoor type vlag. Gebruikers moeten een meta data-veld wijzigen van de standaardwaarde naar iets anders. De itemupdated() ontvanger zoekt naar een geldige waarde er voordat u eigenlijk de naam wijzigen en sindsdien, Ik heb niet had ieder problematiek. Jouw snelheid kan variëren.
Ik heb een vereiste van de client de naam van de bestanden naar een bepaalde documentbibliotheek om te voldoen aan een bepaalde naamgevingsconventie wijzigen. De API voorziet niet in een "hernoemen()" methode. In plaats daarvan, We gebruiken "MoveTo(…)". Hier is een minimale beetje van code om dit te bereiken:
openbare overschrijven VOID ItemToegevoegd (ItemAdded)(SPItemEventProperties eigenschappen) { SPFile f = eigenschappen.ListItem.File; f.moveTo(Eigenschappen.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc"); f.update(); } |
De alleen lastig bit is de "Eigenschappen. ListItem.ParentList.RootFolder.Url". De VerplaatsenNaar() methode vereist een URL. Die puree tekenreeks punten mij naar de root-map van mijn huidige documentbibliotheek. Dit kan ik om te voorkomen dat een harde codering in mijn gebeurtenis ontvanger.
Dit is een meer nuttige versie die het zelfde ding doet, maar de naam van het bestand wordt toegewezen aan "Titel":
openbare overschrijven VOID ItemToegevoegd (ItemAdded)(SPItemEventProperties eigenschappen) { DisableEventFiring(); // De titel van dit item toewijzen aan de naam van het bestand zelf. // OPMERKING: Deze toewijzing moet plaatsvinden voordat we het bestand zelf wijzigen. // Update aanroepen() lijkt op de SPFile om de eigenschappen in ongeldig te maken // sommige zin. Updates voor "titel" totdat dat wijzigen is mislukt (en update() oproep) // voor de verandering werden verplaatst naar de bestandsnaam. Eigenschappen.ListItem["Titel"] = Eigenschappen.ListItem.File.Name; Eigenschappen.ListItem.Update(); SPFile f = eigenschappen.ListItem.File; // Krijgen de extensie van het bestand. Wij moeten dat later. tekenreeks spfileExt = Nieuw FileInfo(f.name).Extensie; // Hernoem het bestand naar het item in de lijst-ID en de extensie gebruiken om te houden // dat deel van het intact. f.moveTo(Eigenschappen.ListItem.ParentList.RootFolder.Url + "/" + Eigenschappen.ListItem["ID"] + spfileExt); // Plegen de verhuizing. f.update(); EnableEventFiring(); } |