ACTUALIZACIÓN: Esto funciona, pero existen limitaciones significativas que se describen en los comentarios. Esto todavía puede ser útil en algunas circunstancias.
ACTUALIZACIÓN 2: En mi proyecto actual, los usuarios siempre subir documentos. Como un resultado, No ejecutar en un problema donde MS Word se está ejecutando y piensa que el archivo fue retitulado en él. Puso en marcha en un problema, "el archivo fue modificado por alguien" y esta solucionado por medio de una bandera de tipo semáforo simple. Los usuarios necesitan cambiar un campo de datos de la meta de su valor por defecto a algo más. El itemupdated() receptor busca un valor antes de realizar efectivamente el cambio de nombre y desde entonces, No he tenido ningún problema. Su kilometraje puede variar.
Tengo un requerimiento del cliente para cambiar el nombre de los archivos subidos a una biblioteca de documentos específica de conformidad con una Convención de nomenclatura particular. El API no proporciona un "cambio de nombre()" método. En su lugar, Utilizamos "MoveTo(…)". Aquí es un poco un mínimo del código para lograr esto:
público reemplazar void ItemAdded(SPItemEventProperties propiedades) { SPFile f = properties.ListItem.File; f.moveTo(propiedades.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc"); f.Update(); } |
Sólo complicado es "propiedades. ListItem.ParentList.RootFolder.Url". El MoveTo() método requiere una dirección URL. Puré de puntos cadena me a la carpeta raíz de mi biblioteca del documento actual. Esto me permite evitar cualquier codificación dura en mi receptor de evento.
Esta es una versión más útil que hace lo mismo, pero se asigna el nombre del archivo a "Título":
público reemplazar void ItemAdded(SPItemEventProperties propiedades) { DisableEventFiring(); // Asignar el título de este tema con el nombre del propio archivo. // NOTA: Esta asignación debe realizarse antes de modificar el archivo en sí. // Llamar a update() en el SPFile parece invalidar las propiedades // algún sentido. Actualizaciones a "título" no se pudo hasta que cambie (y actualización() llamar) // fueron trasladados en frente del cambio en el nombre de archivo. propiedades.ListItem["El título"] = properties.ListItem.File.Name; propiedades.ListItem.Update(); SPFile f = properties.ListItem.File; // Obtener la extensión del archivo. Necesitamos más tarde. cadena spfileExt = Nuevo FileInfo(f.Name).Extensión; // El nombre del archivo de ID del elemento de la lista y utilizar la extensión de archivo para mantener // esa parte intacta. f.moveTo(propiedades.ListItem.ParentList.RootFolder.Url + "/" + propiedades.ListItem["ID"] + spfileExt); // Cometer el movimiento. f.Update(); EnableEventFiring(); } |