¿La extensión de cambio de spfile de SharePoint en el elemento existente posible?
-
28-10-2019 - |
Pregunta
Estoy en mi ingenio en este caso. Tengo una interfaz de usuario que crea y edita documentos almacenados en una biblioteca de documentos de SharePoint. La parte del truco es que necesito permitir que el usuario actualice el documento No hay problema, solo use SPFile.SaveBinary()
¿Correcto?
Esto definitivamente actualiza el contenido del archivo, pero de alguna manera persiste el nombre de archivo anterior y la extensión anterior, este es un problema. Eliminar y volver a admitir el elemento de la lista tampoco es una solución porque la ID del elemento se hace referencia en la URL.
Mi pregunta es ¿cómo puedo actualizar los metadatos de extensión y nombre de archivo del elemento SPFILE?
Hasta ahora, todos mis intentos de uso de la biblioteca de objetos han fallado, he intentado actualizar los campos debajo de ninguno ha tenido éxito. Parece que tiene que haber una manera más fácil de hacer esto.
SPFile file = item.File;
file.Item[SPBuiltInFieldId.FileLeafRef] = resolvedFileName;
file.Item[SPBuiltInFieldId.FileRef] = "/File/" + resolvedFileName;
file.Item[SPBuiltInFieldId.BaseName] = System.IO.Path.GetFileNameWithoutExtension(resolvedFileName);
file.Item["Name"] = System.IO.Path.GetFileNameWithoutExtension(resolvedFileName);
file.SaveBinary(conduitFile);
file.Update();
EDITAR - Aquí está mi solución de trabajo.
SPFile file = item.File;
string resolvedFileName = item.ID.ToString() + "-" + conduitFileName;
item["Title"] = resolvedFileName;
file.SaveBinary(conduitFile);
file.MoveTo(item.ParentList.RootFolder.Url + "/" + resolvedFileName, true);
file.Item["Name"] = resolvedFileName;
file.Update();
Solución
Después de guardar el archivo en la biblioteca, use el MoveTo
método y pasar el nombre de archivo modificado en el newUrl
parámetro.
Método SpFile.moveto (cadena)
Rápido y fácil: cambiar el nombre del archivo cargado con el modelo de objeto SharePoint a través de un receptor de eventos
Otros consejos
Otra forma que es más simple que usar Moveto es usar el Nombre de base Propiedad del Splistitem. Establecerías esto ejecutando
item["BaseName"] = resolvedFileName; //Whatever you want the new file name to be
item.Update();
Esto es más fácil que Moveto porque no tiene que preocuparse por la jerarquía de carpetas y no tiene que preocuparse por la extensión del archivo.
Por alguna razón, la propiedad no figura en el Documentación de MSDN, pero parece funcionar bien sin problemas.