asp.net - ¿Cómo editar documentos de MS Office desde una aplicación web: implementación personalizada de WebDaV o...?
sharepoint ms-office (3)
A continuación está nuestra configuración y requisito:
- Hay una aplicación web pública accesible a través de SSL + Autenticación básica. La mayoría de estas aplicaciones se encuentran en ASP.Net; algunos de los legacy están en ASP clásico. El servidor es Win 2003 / IIS 6.0
- Esta aplicación necesita ser compatible con la edición en línea de (principalmente) documentos de MS Office (2007 y 2010). Los documentos mismos se almacenan en la base de datos, junto con el contenido de la aplicación.
- Los usuarios deberían poder abrir el documento a través de enlaces HTML; la aplicación de Office externa correspondiente (digamos MS Word) debe abrir el documento en modo de edición (con bloqueo exclusivo) y cuando el usuario presiona el botón Guardar, el documento debe enviarse a la aplicación.
- Preferiblemente, no se deben implementar complementos externos / controles ActiveX en el lado del cliente.
¿Es una implementación WebDAV personalizada el mejor enfoque posible? Tenga en cuenta que es posible que no necesitemos todas las características de WebDAV para soportar los requisitos anteriores. ¿Conoces alguna alternativa?
Si la implementación personalizada de WebDAV es el camino a seguir, ¿puede recomendar algunos buenos recursos (complementos IIS comerciales / de código abierto, ejemplos en .Net, documentos, etc.), aparte de http://www.webdav.org/ ? Por cierto, no prefiero instalar un CMS voluminoso como Sharepoint para soportar un requisito tan pequeño.
Encontré un hilo en SO sobre la implementación personalizada de WebDav: ¿Cuáles son sus experiencias al implementar / usar WebDAV? Suena tan desalentador :( (Avialable solo en raíz de IIS, requiere autenticación de Windows, etc.)
¡Gracias por adelantado!
¿Qué pasa con WebDAV? Existe un par de componentes de servidor WebDAV de terceros que puede conectar a su aplicación de servidor ( www.webdavsystem.com , nuestra WebDAVBlackbox ).
De forma alternativa, puede crear un sistema de archivos virtual en el cliente que se comunicará con el servidor utilizando algún otro protocolo (ya sea HTTP simple si le resulta más fácil implementar el manejo de esta manera o FTP o SFTP).
Recientemente desarrollé un servidor Webdav simple utilizando Apache Tomcat WebdavServlet como base. Acabo de obtener la fuente de SVN (ver más abajo) y la modifiqué para satisfacer mis necesidades. Puede agregar código a los diferentes métodos allí:
doGet
doLock
doPut
doUnlock
etc...
Lo estoy usando como webdav de un usuario pobre frente a un CMS empresarial, por lo que dentro de cada método agregué llamadas API para recuperar el documento, bloquearlo, versionarlo, o lo que sea. Básicamente no querían comprar el producto webdav del proveedor, y Tomcat es gratis.
En cuanto a la apertura de los archivos de Office en el cliente, es posible que deba confiar en una biblioteca que se envía con las instalaciones de Office (al menos desde Office XP). Tenga en cuenta que el componente se llama SharePoint blah blah pero no requiere una instalación de SharePoint en ningún lugar. Aquí tengo un fragmento de js que usa la biblioteca como ejemplo, obviamente modificarías para satisfacer tus necesidades. Me doy cuenta de que no dijo ActiveX, pero sin él no estoy 100% seguro de cómo abriría los enlaces. Le invitamos a probar otras formas.
function webedit(id) {
if (window.ActiveXObject) {
var ed;
try {
//Office 2003
ed = new ActiveXObject(''SharePoint.OpenDocuments.2'');
} catch (err1) {
try {
//Office 2000/XP
ed = new ActiveXObject(''SharePoint.OpenDocuments.1'');
} catch (err2) {
try {
//Office 2007
ed = new ActiveXObject(''SharePoint.OpenDocuments.3'');
} catch (err3) {
window.alert(''Unable to create an ActiveX object to open the document. This is most likely because of the security settings for your browser.'');
return false;
}
}
}
if (ed) {
ed.EditDocument(''<%=webdavPath%>/webdav/''+id);
return false;
} else {
window.alert(''Cannot instantiate the required ActiveX control to open the document. This is most likely because you do not have Office installed or you have an older version of Office.'');
return false;
}
} else {
window.alert(''Internet Explorer is required to use this feature.'');
}
return false;
}
También me doy cuenta de que su servidor es IIS y no basado en Apache, pero siempre puede anticipar la instalación de Tomcat con IIS (es lo que hacemos) y usar el filtro JK ISAPI sobre AJP. De todos modos, es una forma de hacer las cosas y no requiere que compres nada.
Fuente de SVN: http://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk/java/org/apache/catalina/servlets/WebdavServlet.java
Cuando Office abre un archivo desde una url, verificará si WebDav es compatible con esta url. Si ese es el caso, y WebDav permite escribir en esta url, Office permitirá que el usuario edite el archivo.
Hacer que Office abra el archivo cuando el usuario hace clic en un enlace en el navegador parece funcionar mejor con una URL como esta:
ms-word:ofe|u|https://someOfficeFile.docx
Las URL en este estilo no funcionan cuando Office no está presente en la máquina del usuario.
La integración con el software instalado en el hardware del usuario es, por supuesto, complicado, porque el desarrollador no tiene control sobre el hardware del usuario.
Sería mejor si la edición de documentos de Office pudiera completarse en el navegador. Office365 hace esto. La integración de una aplicación de línea de negocios con Office365 se realiza a través del protocolo WOPI.
Office se integra con DropBox y los "me gusta" a través de este protocolo. Sin embargo, parece que Microsoft aún no está listo para permitir que un gran número de aplicaciones LOB se integren con Office365.
Quizás Microsoft algún día publique un SDK para hacer esta integración sin escribir WOPI desde cero.