Actualización: This works but there are significant limitations which are described in the comments. This may still be useful in some cirumstances.
Actualización 2: O meu proxecto actual, users always upload documents. Como resultado, I don’t run into a problem where MS Word is running and thinks that the file was renamed on it. I did run into a problem, "the file was modified by someone else" and solved this via a simple semaphore type flag. Users need to change a meta data field from its default value to something else. The itemupdated() receptor busca por un valor válido alí antes de realmente facer a renomeação e desde entón, I have not had any problems. Your mileage may vary.
I have a client requirement to change the name of files uploaded to a specific document library to conform with a particular naming convention. The API does not provide a "rename()" método. Pola, usan "MoveTo(…)". Here is a minimal bit of code to accomplish this:
público substituír invalidar ItemAdded(SPItemEventProperties Propiedades) { SPFile f = properties.ListItem.File; f.MoveTo(properties.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc"); f.Update(); } |
The only tricky bit is the "properties.ListItem.ParentList.RootFolder.Url". The MoveTo() method requires a URL. That mashed up string points me to the root folder of my current document library. This allows me to avoid any hard coding in my event receiver.
Esta é unha versión máis útil que fai o mesmo, but assigns the name of the file to "Title":
público substituír invalidar ItemAdded(SPItemEventProperties Propiedades) { DisableEventFiring(); // Asignar o título deste artigo para o nome do ficheiro en si. // NOTA: Esta asignación debe ocorrer antes de modificar o propio arquivo. // Chamando actualización() no SPFile parece invalidar as propiedades en // nalgún sentido. Updates to "Title" puido ata que o cambio (e actualización() chamar) // foron movidos fronte á mudanza do nome do ficheiro. properties.ListItem["Title"] = Properties.ListItem.File.Name; properties.ListItem.Update(); SPFile f = properties.ListItem.File; // Obter a extensión do ficheiro. Necesitamos que máis tarde. corda spfileExt = novo FileInfo(f.Name).Extensión; // Renomeie o ficheiro para a identificación do elemento da lista e utilizar a extensión do ficheiro para manter // que parte dela intacta. f.MoveTo(properties.ListItem.ParentList.RootFolder.Url + "/" + properties.ListItem["ID"] + spfileExt); // Comprometer o movemento. f.Update(); EnableEventFiring(); } |