Rápido & Fácil: Cambiar el nombre de archivo cargado mediante el modelo de objetos de SharePoint a través de un receptor de eventos

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

4 pensamientos sobre "Rápido & Fácil: Cambiar el nombre de archivo cargado mediante el modelo de objetos de SharePoint a través de un receptor de eventos

  1. Sin nombre
    También, Si haces esto desde dentro de Word, se devuelve un error y decir que el archivo no existe. No se dijo sobre la nueva dirección URL. Todavía no he encontrado una forma de evitar esto.
    Respuesta
  2. Paul Galvin
    Gracias por señalar. O no sé una respuesta a que se … será interesante ver cómo administrarlo.
    RE: Async & redirección
    Me pregunto si mueve a un ItemAdding lo solucionará. Es un agujero grande.
    Gracias!
    –Paul
    Respuesta
  3. Nadeem Mitha
    Porque el archivo obtiene desplazado de forma asincrónica, existe la posibilidad de ser redireccionado a EditForm.aspx antes de que el movimiento está comprometido (y eso es malo). Verás que esto sucede si haces el código dormir antes de la línea MoveTo. Todavía no he descubierto a qué se puede hacer sobre ese problema aparte de usar un formulario de edición personalizado.
    Respuesta

Contesta

su dirección de correo electrónico no será publicada. Los campos necesarios están marcados *