Mensajes de Usuario desde vClient


([N3] pacosatu) #1

Hola a todos.

Después de un final de semana algo movido, vamos a relajarnos un poco con una nueva funcionalidad que espero os sea útil.

Planteo el problema:

  • Tengo un proceso en 2º Plano que tiene que enviar periódicamente mensajes al Usuario.
  • Los mensajes deben mostrarse incluso si vClient está minimizado.
  • No debe requerir la instalación de software de terceros como ocurre con vNotify.
  • El mensaje no puede ser intrusivo, es decir, no debe mostrar Ventanas Modales que interrumpan el trabajo del Usuario como ocurre con el comando Mensaje() de Velneo.
  • La Mensajería de Velneo (con JavaScript) no sirve cuando la Aplicación está minimizada.

He encontrado la solución (solo en Windows) usando el motor de scripts Autoit3 que ya usé en aquí.

Usando la función TrayTip() de AutoIt3 podemos mostrar un mensaje en la Barra de Tareas de Windows con el mismo estilo que usa Outlook.

Esta es la macro que genera Velneo:


; mensaje_tray.au3 - Muestra un Mensaje en la Barra de Tareas
; Esta macro se ha generado en la caché del cliente
TraySetIcon(<ICONO>) ; Icono que aparece en la Barra de Tareas
#include <Misc.au3>
Opt(“TrayAutoPause”, 0) ; 0=no pause, 1=Pause
Opt(“TrayMenuMode”, 1) ; 0=append, 1=no default menu,
Opt(“TrayIconHide”, 1) ; 0=show, 1=hide tray icon - ocultamos icono AutoIt3
; Ver TrayConstants.au3
Global Const $TIP_ICONASTERISK = 1 ; Info icon - icono de información
; Bucle hasta que la macro anterior con el mismo nombre termine
While _Singleton(“mensaje_tray”, 1) = 0
sleep(100)
Wend
Opt(“TrayIconHide”, 0) ; 0=show, 1=hide tray icon - mostramos icono AutoIt3
; Mostramos el mensaje. TITULO y MENSAJE son variables de Velneo
TrayTip(<TITULO>, <MENSAJE>, 0, $TIP_ICONASTERISK)
; La macro se detiene para mostrar el mensaje en la Barra de Tareas
Sleep(<TIEMPO>) ; TIEMPO es una variable de Velneo

Debemos incluir en el proyecto de Velneo los siguientes ficheros:
AutoIt3.exe, FontConstants.au3, Misc.au3, StructureConstants.au3 y WinApiError.au3.

La función _Singleton(), aunque no es imprescindible, comprueba que no esta en ejecución un Mensaje anterior y espera a que termine de mostrarse.

Es una solución elegante que el usuario percibirá sin desagrado porque ya está acostumbrado de otras aplicaciones de Windows. Habrá cientos de soluciones para esta necesidad ¿cómo lo haces tú?

Saludos
Paco Satué


([N3] pacosatu) #2

A la primera nunca sube el adjunto.



([N4] Ramon Denuc) #3

Hola Paco,

Espectacular y elegante forma de enviar mensajes a los clientes, como dices, en vez del típico mensaje con ventanas modales que lo que hacen en realidad es despistar al usuario durante unos instantes.

No he utilizado nunca AutoIt, pero viendo sus posibilidades le he echare un vistazo.

+1

Saludos


([N1] percyleoncio) #4

Le dí un vistazo realmente es una muy buena utilidad y hay buen material para seguirlo.


([N1] Lydia.dfr) #5

Buenos días @seh, estoy muy interesada en el proceso del que hablas, para poder mandar mensajes pero no sé muy bien qué y cómo tengo que hacer.
Me descargué el programa AutoIt3 , lo instalé y adjunté a mi proyecto el AutoIt3.exe
pero ahora en los pasos siguientes me pierdo…¿tengo que generar yo lo que hace velneo?
¿los archivos que dices que se adjuntan los tengo que crear con AutoIt3?
Gracias de antemano por la ayuda


([N3] pacosatu) #6

Hola Lydia.

Es muy sencillo, preparo un documento explicativo y un pequeño vin y lo publico en el foro.

Saludos
Paco Satué


([N1] Lydia.dfr) #7

Muchisimas gracias Paco, de verdad eres una gran ayuda.


([N3] ereitmann) #8

Yo también opino lo mismo


([N1] vlinares) #9

Muchas gracias…
Si nos pasas un pequeño ejemplo sería perfecto.

++1


([N1] cristianvg2003) #10

Muy buen aporte


([N4] ns) #11

+1


([N3] pacosatu) #12

Hola, gracias por los comentarios.

Os adjunto el Acceso directo a un vin para que se pueda ver funcionando los mensajes en la Barra de Tareas de Winodws. Veréis que es muy sencillo.

Si no queréis instalar el vin se puede probar en:
vatp://pruebas:pruebas@v7cloud6.velneo.com:8894/0PS_AutoIt3_iapp

Saludos
Paco Satué


([N1] Lydia.dfr) #13

Muchas gracias Paco, ya lo estoy descargando ahora mismo y deseando probarlo.
Gracias por dedicarnos tu tiempo.


([N1] Lydia.dfr) #14

Hola Paco, me surge una duda con esto de los mensajes de vclient…Esos mensajes les salen por usuario o es para todos los que esten conectados a esa aplicación?


([N1] JE) #15

Muchas gracias Paco.


([N3] pacosatu) #16

Hola Lydia.

Los mensajes son solo de vClient al Usuario Windows conectado en la misma máquina.
La finalidad de esta utilidad es poder visualizar los mensajes que nuestra aplicación genera incluso cuando dicha aplicación está minimizada o ejecutando un proceso en 2º plano.

Otro tema es la mensajería interna de Velneo. Esta sí que contempla los Usuarios del vServer, pero de momento y hasta que no salga la API del vAdmin, poco podemos hacer.

También tienes la mensajería del sistema operativo de red Windows (comando net send WinXP y msg en Win7/8). Esta mensajería es para los Usuarios de la red Windows que nada tienen que ver con los Usuarios del vServer de Velneo.

Esta utilidad es la misma que tiene Outlook cuando está minimizado. Los mensajes de correo nuevos los anuncia mediante un mensaje en la Barra de Tareas.

Saludos
Paco Satué


([N1] Lydia.dfr) #17

Gracias por tu aclaración Paco. Mi mente ya estaba pensando mas allá y haciendo planes por si era algo que tuvieras la opción de usar con los usuarios conectados.
Gracias por darnos estos grandes aportes.


([N3] pacosatu) #18

Hola Lydia.

Comprendo tus ansias de tener algo más, pero hasta que Velneo no nos proporcione un API para el vAdmin con gestión completa de Instancias, Usuarios, Sesiones y Mensajería mediante Clases o comandos nativos, tendremos que apañarnos con chapuzillas más o menos eficaces.

Simplemente con que se produjera una señal o evento en el Marco de Aplicación cada vez que llega un mensaje a vClient, tendríamos algo por donde empezar.

De momento, te propongo que te diseñes tu propio sistema de mensajería.

  • Una tabla TBL_SES en 3P y en memoria que vaya registrando las sesiones de vClient que van haciendo Login en la Aplicación. En esa tabla guardas: USUARIO, SESION, IP, …
  • Un proceso que lea esa tabla y nos permita seleccionar uno o varios destinatarios.
  • Un proceso que grabe un mensaje en la tabla de mensajes y asigne destinatarios de la tabla TBL_SES
  • Un proceso que lea periódicamente la tabla de mensajes y compruebe si tenemos algo para nuestra SESION/USUARIO.
  • Y finalmente la Utilidad de la macro AutoIt3 que nos mostrará el mensaje en la Barra de Tareas.

Si supiéramos los planes de Velneo en esta y otra cuestiones fundamentales en una plataforma seria de desarrollo, pues sabríamos a qué atenernos.

Saludos
Paco Satué


([N1] Lydia.dfr) #19

Muchisimas gracias Paco, creo que es algo que me puede ser realmente útil, y se acerca a mis pretensiones futuras, pues lo que yo buscaba era poder generar un mensaje de por ejemplo cualquier usuario que se conecte, pero en principio que ese mensaje le llegue solamente a una persona. Es decir que cada vez que se conecte un usuario, al jefe le llegue un “globito” de se ha conectado “aaaaa”, tipo Skype, y con los pasos que tu me has dado, me hes facil pues en cada inicio de sesion de alguien, me genero un mensaje, siempre mismo destinatario, y un proceso lea esos registros solo si eres jefe.
De nuevo muchisimas gracias!!!


([N1] F. Tejada) #20

Buenos días Paco.
He llegado a tu post un poco tarde, y no se si podras solventarme las dudas… llevo bastante con velneo hasta ahora 6, estoy empezando con v7 y he visto este post y otro, también tuyo, sobre Autoit… la cuestión es que soy un incondicional de autoit, porque tiene inmensas posibilidades y lo he usado para mis proyectos Velneo 6x, la posibilidad de implementarlos en v7 directamente para mi es un “puntazo”, pero la descarga del vin no va (logico hace mucho…) y la verdad estoy muy verde en v7 y no logro reproducir nada de autoit… entiendo lo siguiente.
-Adjunto el fichero Autoit3.exe y los include necesarios al proyecto v7 (como un objeto?)
-Luego que debo hacer escribir el codigo directamente en un proceso tipo javascript?
-Debo “enlazar” en v7 de alguna manera ese proceso con el fichero autoit3.exe para que sepa quien ejecuta esa accion?
-O por el contrario debo crear el fichero au3 y adjuntarlo como fichero script al proyecto…?
Los siento… estoy muy verde

Gracias