¿ Se pueden hacer Macros que corran del lado del Server ?

Bien, la verdad es que parece una pregunta sencilla pero es bastante dificil de contestar incluso para desarrolladores certificados que me han asegurado que las macros SIEMPRE corren del lado del cliente.

Basados en esta definiciíón las macros quedan muy limitadas para automatizar algunas tareas Cliente-Side siempre y cuando la configuración de seguridad y / o tipo de cliente lo permitan; es decir casi inservibles…..

Curiosamente hay un par de check boxes en el tab “Security” de QVS en la consola QEMC que al menos despiertan la curiosidad sobre su sentido de existencia:

Cuando uno empiez a buscar información en los foros y el blog oficial de QlikView se encuentra con cantidades de preguntas y respuestas, muchas en tono con que las macros no se pueden correr del lado del servidor, otras que solo en algunos caso funcionan y otras tantas de respuestas poco claras que solo aportan a la confusión.

La verdad es que yo aún no tengo completamente claro el contexto y las situaciones en que las macros funcionan del lado del Server por lo que solo les voy a dejar mi experiencia y los pasos a seguir para reproducirla.

1- En primer lugar se deben habilitar en QEMC los checkboxes que permiten que las macros se ejecuten del lado del servidor, tal como se ve en la pantalla anterior.
2- A continuación creamos un archivo QVW con solo un botón y asociamos al click del botón una macro:

En el editor seleccionamos que la seguridad requerida para la macro será “System Access” y “Allow System Access”:

En el código de la macro editamos el siguiente texto:

Sub Prueba_Macro

Const ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile _
    ("C:\TestServerSide.txt", ForAppending, True) ' Crea un archivo en el disco c:\ de donde se esté corriendo (Cliente ó Servidor)

    objTextFile.WriteLine("Prueba de linea 1 de texto") 'Le agregamos texto al archivo
    objTextFile.WriteLine("Prueba de linea 2 de texto")    

objTextFile.Close  'Cerramos y grabamos el archivo el archivo

Set objFile = objFSO.OpenTextFile("C:\TestServerSide.txt", 1) 'Volvemos a abrir el archivo recién guardado para lectura

Do Until objFile.AtEndOfStream      'Leemos el contenido del archivo
    strCharacters = objFile.Read(1)
    texto = texto + strCharacters
Loop

Set objTextFile = objFSO.OpenTextFile _
    ("C:\TestServerSide2.txt", ForAppending, True)  'Creamos un segundo archivo de texto en c:\

    objTextFile.WriteLine(texto)   'Le grabamos lo que leímos del primer archivo 

end sub

3- Finalmente grabamos nuestro qvw y lo publicamos en el server.

4- Luego accedemos al Access Point y usando el cliente AJAX (no funciona con el IE Plugin, al menos con esta configuración) accedemos a la aplicación recién creada.

Al presionar el botón del lado del cliente no observaremos nada, pero si vamos al disco C:\ del lado del servidor veremos que los archivos fueron creados allí, lo que significa que la macro se ejecutó del lado del server (se deben asegurar que el login usado para acceder a la aplicación qvw debe tener permiso de lecto-escritura en la carpeta destino, en el ejemplo C:\).

Uno de los problemas que presenta esto es que si dentro del la macro ponemos un “msgbox(“grabación exitósa”) (p.ej) para darle feedback al usuario la macro dejará de funcionar debido a que está seteada para ejecutarse en el servidor y esta es una ejecución desatendida del lado del server por lo que nadie “cliqueara el botón “ok” del pop-up.

Para darle algún tipo de feedbak al usuario podemos agregar una segunda acción del tipo “Externa / Establecer variable” y asignar un valor “true” a una variable usada para mostrar en forma condicional un objeto de texto oculto donde mostramos un mensaje indicando el resultado de la acción.

En conclusión: las macros SI funcionan del lado del server, y ciertamente los desarrolladores de QlikTech no pusieron los seteos de configuración (run macros in server) solo para “hacer marketing”.

Si no se dispone de una clara documentación se debe “probar” que instrucciones sí funcionan y cuales nó, entendiendo que será una ejecución desatendida y con poco feedback, pero es una excelente posibilidad más para extender las limitaciónes y ampliar las áreas de uso de QlikView.

Espero les sirva, y hasta la próxima !

Acerca de pparnisari
Casi 44 vueltas al sol. Licenciado en sistemas. Curioso, investigador, excelente para resolver problemas prácticos. Casado, 2 hijos, cada vez con mas preguntas y respuestas mas en duda. Almost 44 laps to the sun. System engineer. Curious, researcher, great for solving practical problems. Married, 2 children, each time with more questions and more answers in doubt.

3 Responses to ¿ Se pueden hacer Macros que corran del lado del Server ?

  1. Enrico dice:

    Despite of the same flag you put on both server publisher and document I was never been able to run a ‘post reload’ macro, to resolve this I had to make all by script running an extra .bat. Have you also tried this?

    • pparnisari dice:

      Enrico: Is known that “after reload” does’nt works. One workaround could be use “Execute” at the bottom of your script and run a .VBS. This works if you don’t need QlikView objects inside the vbs. Otherwise you have to use qv.exe /l and run the macro with a “on load” event. Even if you need the data of the first qvw you could use “Load Binary” depending on the size of the model. Regards!

  2. Ger Alegría dice:

    El problema al que me he enfrentado y al cual no he encontrado solución es el siguiente:

    Si bien mi Macro funciona desde el acces point, no funciona desde la consola como tal, es decir, si yo pongo un disparador para que la macro seejecute al terminar la recarga, en desktop lo hace correctamente, pero al programar la tarea y correrla la macro no funciona.

    Podrías auxiliarme con este tema.

    Saludos.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: