Notificaciones al usuario


([N1] Spicer) #1

Estimados,

Tengo una aplicación de seguimiento de ordenes de trabajo. Me han solicitado que cada vez que se cree un evento nuevo asociado a alguna de estas ordenes (que se graba en una tabla ad-hoc), el usuario reciba una notificación, pero que no sea enviando un mail.

¿Hay alguna forma de poner algun tipo de elemento que notifique al usuario que hay un nuevo evento, que funcione cuando la ventana de la aplicación no está en primer plano? ¿Cómo se haría?

Gracias!


([N1] Synetic) #2

Algo así http://velneo.es/velneo-open-app/vnotify/ podría valerte?

También hay un tutor que recuerde

Saludos.


([N1] Spicer) #3

Ah, qué bien! A primera vista el vNotify podría servir. Lo ideal sería algo interno (quizás net send o algo así).


([N1] Synetic) #4

Y algo más interno y multiplataforma puede ser enviar las notificaciones con el nuevo sistema de mensajería interna de v7.12 con los comando vJavaScript de la clase vApp. Lo acaban de publicar:

http://velneo.es/listado-de-novedades-velneo-v7-7-12/#5api

Yo diría que casi mejor

Un saludo.


([N1] aztecmexico) #5

Yo ya estuve probando lo de los mensajes interno y no me gustó, le falta mucho todavía, aunque como bien indican en las novedades, esto está en fase beta.

Tenia un requerimiento similar, que si un usuario X genera un reporte de servicio, dicho reporte se asigna ya sea a un usuario en particular o a un grupo de usuarios y la solución a la que llegué me vale porque es muy funcional y no importa que vClient no esté en primer plano, la notificación llega y suena.

Para esto en el autoexec genero un dock “X”, y le agrego un formulario vacio.

Al formulario le pongo un timer de “n” milisegundos.

En dicho formulario creo un manejador de evento que revisa la tabla de asignaciones de servicios, si encuentra un nuevo servicio para el usuario o su grupo de usuarios lanza un proceso javascript que lo único que hace es mandar un alert (“Tienes un nuevo servicio que atender”) , o lo que quieras, puedes agregar datos del servicio, lugar, etc. lo que hayas grabado en la tabla.

Creo luego una conexión de evento para el manejador, con señal timer para que haga la revisión de si tiene nuevos servicios asignados.

No es necesario que el dock esté a la vista, en el on_init del autoexec lo oculto al iniciar la aplicación, aún así el timer sigue funcionando y no veo que el cursor esté parpadeando y funciona perfectamente.

Mientras tenga abierto el vClient aunque no lo tenga en primer plano los mensajes llegan inmediatos (bueno, depende de la frecuencia de ejecución del timer), si estoy en otra cosa en la computadora pues suena el beep como la alerta abre una ventana pues la misma parpadea en el panel inferior de windows.

Si el usuario cierra con el aceptar le pido confirmación de lectura del mensaje o de la alerta, con eso ya vas y grabas que el mensaje o alerta fue leido por el usuario, para que no diga luego que no le llegó.

De momento me funciona perfecto esto, es más rápido y yo controlo la frecuencia de la revisión. No es un chat ni sirve para eso, pero pues quien quite, algún experto en JavaScript nos eche la mano y lance una open app con dicha funcionalidad.

Espero te sirva.

 

Saludos.

Martin Ibarra.


([N1] Spicer) #6

Estimado Martin,

Esto que sugieres sí que es una alternativa que me parece buena. Quiero intervenir los equipos de los usuarios lo menos posible

Muchas gracias por la sugerencia


([N1] aztecmexico) #7

Si no te quieres meter con el proceso javascript, un simple mensaje de V7 funciona igual.

 

Saludos.


([N1] Spicer) #8

Si, pero el mensaje de v7 se lee sólo cuando la aplicación está en primer plano?

La idea es que el mensaje “salte” en la pantalla del usuario aún si tiene otro programa abierto en ese momento


([N1] aztecmexico) #9

En Windows con el mensaje del proceso V7 funciona medio raro, la primera vez que llega una alerta, si no tienes en vClient en primer plano no muestra el mensaje “hasta adelante”, aunque la barra de aplicaciones de windows comienza a parpadear el vClient, lo que me alerta.

Pero una vez que le doy aceptar al mensaje y se cierra, si sigo trabajando en cualquier otra aplicación y el vClient no queda en primer plano, si llega otra alerta entonces si la pasa a primer plano y siempre me la muestra.

Investigué un poco más y resulta que también se puede utilizar (lamentablemente solo para windows) la función MessageBox (viene incluida en la librería user32.dll) y una de sus opciones de personalización del mensaje es que se puede poner la caja del aviso en modo “SystemModal” lo cual creo que garantiza que te la ponga hasta el frente, estes haciendo lo que estes haciendo, la otra o normal es la “Applmodal”, que solo funciona para poner la caja al frente de tu aplicación. Por lo que ví y las opciones que maneja creo que es casi el mismo objeto que invocan los procesos V7 en Windows.

 

Una última que puse es que aparte de la alerta, emita un sonido, no el beep sencillo, sino con reproducir sonido (sonido.wav), pues ahi pones algo medio escandaloso y ni modo que digan que no lo escucharon (si apagan las bocinas que sea causal de sanción =) ), dicho sonido con una duración mínima de 15 segundos o la que tú consideres pertinente para garantizar que lo escucharon.

 

Saludos.

 

Martin Ibarra.

 

P.D. Los parámetros del MessageBox son:

hWnd - manejador de ventana dueña, puede quedar nulo

lpText - Texto a mostrar en la alerta

lpCaption - Título de la ventana, si no le pones nada aparece como título “Error”

uType - Aquí puedes combinar varias cosas, íconos, botones y lo que te comenté de la modalidad de la caja en appmodal o systemmodal.

 

Si alcanzo a probar el ejemplo te lo subo.


([N1] Spicer) #10

Estimadisimo,

Muchas gracias nuevamente!

Entre las tres mejores alternativas (el formulario con el timer, el simple mensaje de v7 y la función messageBox de user32.dll), cuál es la que mejor te ha resultado?

Agradezco montones la ayuda

Saludos!