Cuando el tema de las nuevas aplicaciones web  se introdujo en 2013 o el de las bases de datos web en 2010, una queja común de la gente es que ambos carecen de VBA. Sin duda es una queja comprensible, casi todos los desarrolladores profesionales de access  han utilizado VBA y es VBA lo que hace posible el uso de Access como si fuera el pegamento en la Oficina. Toda solución de access compleja  tiene diferentes niveles de automatización , como enviar correo usando outlook, generar una carta en Word o create un gráfico en Excel, etc. Luego están, por supuesto, los procesos de importación y exportación en los que tenemos que tomar muchas veces archivos de texto, cambiar su formato de texto plano a información organizada en tablas y luego quizás exportalo usando formato CSV, XML o lo que necesite el usuario final.

Pero aquí está el problema – los ejemplos que he citado son la automatización en lugar de características de un lenguaje. Vamos a aclarar – Yo creo que sería mejor tener un poco de programación en aplicaciones web ya sea de JavaScript para la manipulación de la interfaz de usuario y un poco de T-SQL ligero para hacer consultas o para el código. Pero incluso si tuviéramos ambas cosas,  estas no resolverían el problema de la automatización. He aquí por qué – la automatización es fundamentalmente una tecnología de cliente y no una tecnología web. Con el fin de enviar por correo electrónico desde Outlook, Outlook debe estar instalado primero, y debe haber un modelo de objetos disponibles para la manipulación de objetos de Outlook y luego, por supuesto, algún tipo de script personalizado para aprovechar esos objetos. Lo mismo sucede con otros productos. En un momento, Microsoft hizo que muchos de ellos estuvieran disponibles dentro de Internet Explorer. Si usted recuerda  los fallos de seguridad de Internet Explorer 5 y 6, lo que acabamos de decir es básicamente, porqué era defectuoso en el primer lugar el  navegador. Desde entonces, todos los principales navegadores web han degradado el nivel de acceso de los lenguajes de scripting; por ejemplo, JavaScript puede tener acceso a los archivos del sistema, pero no los expone, ni tampoco otros objectos/aplicaciones instaladas en el cliente. Esta caja de arena del navegador web es una cosa buena en general, pero también significa que el navegador web se convierte en un muy mal candidato para la automatización. Hay algunas maneras que eluden la caja de arena, por ejemplo el uso de Flash o Silverlight, pero los dos pierden el sentido de ejecutarlo en un navegador web – para ambos productos el cliente debe instalar plugins en el ordenador para que funcionen. Si usted va a instalar algo en el ordenador, probablemente sería mejor instalar Access Runtime  en lugar de Silverlight.

Si nos fijamos en las nuevas herramientas que Microsoft introdujo con Office 2013 y SharePoint, llamadas «Aplicaciones de Office», las cuales son applets que utilizan HTML5 y JavaScript, y se pueden utilizar para agregar en ciertos documentos de Office como Excel o en el panel de tareas de Outlook. Una ventaja de usar estas herramientas es que también se pueden ejecutar dentro del navegador web permitiendole ver una hoja de cálculo de Excel dentro de la aplicación web y la hoja de excel sigue funcionando, como si usted tuviese excel abierto. También viene con un modelo de objetos limitado que se puede utilizar en JavaScript y se puede interactuar en algunos eventos, pero de nuevo, por razones de seguridad, no puede acceder a nada que este en su equipo. Creo que refuerzan la idea de que la automatización es fundamentalmente una tecnología cliente que debe correr en el equipo localmente.

Pero existen aplicaciones aplicaciones web  que pueden enviar mensajes de correo electrónico y descargar hojas de cálculo Excel!

Sin duda, los hay. Sin embargo, nada de eso está sucediendo en su navegador web. Lo que es más probable que suceda es que al hacer clic en un botón en el navegador web para enviar un correo electrónico, se envía una solicitud al servidor que aloja la aplicación web que se ejecuta algún código en el lado del servidor y utiliza su servidor de correo electrónico para enviar en su nombre . Lo mismo con la hoja de cálculo Excel, lo más probable es que los archivos  CSV o OpenXML se generen en el servidor  y luego se coloquen en un lugar que está disponible para su descarga y a continuación se le informe a su navegador web a dónde ir para conseguir ese archivo. Por lo tanto, eso nos lleva a un nuevo problema ¿A quién pertenece el servidor? ¿Quién puede poner su código personalizado en él? Si ha utilizado los servicios alojados, lo más probable es saber que se traben por muchas vías de personalizaciones y no sólo siempre en nombre de la seguridad. Es francamente difícil, si no imposible, mantener un servidor que podría estar ejecutándose un número de código desconocido, sin revisar, y no probado. En poco tiempo, usted va a terminar por  alojar su propio servidor y asumir todas las responsabilidades de mantenerlo en funcionamiento. Todo esto sólo para enviar un correo electrónico?

También hay otro problema al ejecutar código de  automatización del lado del servidor.
Si eres observador, te habrás dado cuenta que dije «archivos OpenXML» en lugar de «hojas de cálculo de Excel». Aunque Office  hace que la automatización sea posible, simplemente nunca fue diseñado para funcionar sin interacción del usuario. Usted no tiene que creer en  mi palabra , puede ver lo que dice Microsoft aquí. Así, mientras que usted puede pasar por alto la advertencia de Microsoft e instalar Office en el servidor, luego tendrá que lidiar con las molestias de conseguir que se ejecute y asegúrarse de que no hay diálogos de interfaz de usuario que puedan bloquear la ejecución de código y poner su servidor fuera de servicio . O usted podría evitar el modelo de automatización de Office, y escribir documentos OpenXML usando XML estándar, lo que requiere que usted tenga un conocimiento profundo del esquema XML Excel. He aquí un ejemplo y una  referencia. Tampoco es una solución simple. Es por ello que varios sitios web por ahí normalmente simplemente hacen el archivo CSV en el lado del servidor y luego lo ponen disponible para descargar, para evitar los problemas asociados con la creación de ese archivo a bajo nivel. Volviendo al ejemplo de correo electrónico, tal vez la gente no va a querer los correos que vengan de «myserver@myhost.com» y desean que venga de ellos mismos, lo que significa más código para conseguir que se envíe en el nombre de la persona y cambiar el Responder-A (reply-to). Esas son cosas que simplemente nunca tuvimos que hacer frente  cuando estábamos haciendo la automatización en el equipo del usuario, porque estuvimos ejecutando  todo en el perfil de un usuario lo que simplifica muchas cosas.

 

Esperemos que esto ayude a ilustrar qué tipo de caja negra hemos abierto con una automatización del lado del servidor. Estoy seguro de que habrá un día en que la automatización en el servidor se convierta en perfecta y fácil, asi como lo teníamos con VBA y la automatización en el cliente, aunque me parece que para llegar allá aún tenemos un largo camino por recorrer.

 

No se olvide de las soluciones híbridas

Por ahora, considero que si existen aplicaciones web de Office 2013 que necesiten características adicionales, estas deberían ser complementadas con una base de datos del cliente y Access Runtime y , el uso del navegador web para facilitar el acceso para las operaciones CRUD. Con Access 2013  usando SQL Server como el back-end de las aplicaciones, es muy fácil tener una aplicación cliente que puede enlazar con el servidor y que además puede trabajar incluso a través de grandes distancias y porque reside en el cliente, se puede hacer toda la automatización que se necesite y más importante aún, se puede usar sin todos los problemas que describí mas arriba de una aplicación que solo funcione en el lado del servidor. También tiene la opción de utilizar las listas de SharePoint como listas enlazadas para sus aplicaciones de Access lo que le ofrece una manera de trabajar sin conexión al internet.

También hay una tercera opción, el uso de Visual Studio para crear una aplicación ASP.NET que se puede conectar a la base de datos de la aplicación web de SQL Server y realizar toda la automatización. Una ventaja de utilizar Visual Studio es que también es fácil de trabajar con servicios web y por lo tanto tiene el potencial de ofrecer más recursos que  VBA y vale la pena considerarlo para proyectos complejos. Por supuesto, usted va a necesitar alojar la aplicación en su propio servidor , pero una vez hecho esto, puede colocarlo como si fuera  un botón en las aplicaciones web de Access o mostrar el contenido generado por la aplicación ASP.NET en un navegador web. No es tán fácil como tener Office instalado localmente en el ordenador del cliente para automatizar, pero es algo que va a funcionar en una navegador web.

Entonces, ¿cuál es el punto?

La única cosa que podemos concluir es simplemente esto: Ir a la web cambia todas las reglas del juego. En lugar de pensar acerca de cómo automatizar Outlook para enviar un correo electrónico, deberíamos pensar sobre el uso de un servicio web que permita enviar correo electrónico. En vez de hacer un TransferSpreadsheet   para poner datos en una hoja de cálculo de Excel, deberíamos estar usando la conexión de datos externa en la hoja de cálculo Excel para obtener una instantánea en vivo de los datos directamente desde SQL Server y luego mostrarlo en línea. Hay muchos, muchos servicios web de muchos muchos proveedores.

Pero todavía necesito X, Y, Z … 

 

Para empezar, se puede decir directamente a Microsoft. Ellos quieren sus comentarios y usted puede revisar su   blog y compartir sus comentarios . Además, espero que usted comparta algunos servicios web útiles con nosotros, que ayuden a resolver la automatización en la web.