Uso de SignalR con Acumatica Push Notifications

Yuriy Zaletskyy | 10 de diciembre de 2021

Uso de SignalR con Acumatica Push Notifications

Introducción

Esta es una continuación del vídeo que compartí la semana pasada sobre cómo mitigar el problema de quedarse sin llamadas a la API utilizando notificaciones y SignalR. En esta entrada de blog, Proporciono mayor detalle, junto con el código que puede utilizar en su implementación de la información que presenté.

Recepción de notificaciones push de Acumatica

En los siguientes pasos, te mostraré directamente cómo puedes recibir notificaciones push de Acumatica en una aplicación Windows Forms.

Utilizando los datos de demostración de Acumatica Sales realice los siguientes cambios sencillos de configuración. Abra el archivo web.config y busque el archivo appSettings y establece la opción EnablePushNotifications a true.

A continuación, cree una Consulta genérica que proporcione los cambios que necesita rastrear. Llamémosla "TestInqSO". A continuación, añadiríamos un SOOrder y campos a una rejilla - como Estado, OrderNbr, Retener, DocBal, OrderDescetc.

A continuación, definiríamos varias consultas para cada notificación destino. Sin embargo, las consultas de datos deben seguir las siguientes recomendaciones para obtener resultados óptimos:

  • No utilice agregación y agrupación en ninguna de las consultas; Acumatica ERP no garantiza que las notificaciones push funcionen correctamente utilizando estos parámetros.
  • No utilice uniones de varias tablas detalladas en sus consultas, ya que esto puede hacer que el sistema se bloquee.
  • Si necesita unir varias tablas, utilice una unión unión izquierda o una unión interna en sus consultas de datos. Si utiliza una unión interna, la ejecución de la consulta puede ser más lenta que en el caso de una unión izquierda.
  • Utilice una consulta de datos lo más sencilla posible.
  • Para una consulta definida utilizando una consulta genérica, no utilice una fórmula en la Cuadrícula de resultados de la consulta genérica

Ahora, vaya a las Notificaciones Push (SM302000) y cree una nueva.

En el Nombre del destinoescriba TestNotification por ejemplo

Compruebe la Activo activa.

En el Tipo de destinoseleccione Centro SignalR.

En las Consultas genéricas añada una nueva fila, Título de la consulta y seleccione TestInqSO GI que creó anteriormente y marque Activo y save sus cambios.

En este momento, usted querrá crear un simple Windows Forms con dos botones: Inicio y Detener para iniciar y cerrar la conexión. A continuación, cree Haga clic en para cada uno de los botones.

A continuación, defina la clase para su notificación, como se muestra en el siguiente código.

GIST: https://gist.github.com/YuriyZaletskyy/7f934bd1b51eb3e1a65057c3f1c2ff91

Proporcione los siguientes pasos en el clic de inicio de inicio:

Configure un token de autenticación Basic para autenticar la aplicación en Acumatica ERP como se muestra en el siguiente código.

GIST: https://gist.github.com/YuriyZaletskyy/e06bbda872d00d23b870032376958c59

Conéctese a una instancia de Acumatica ERP de la siguiente manera: 

GIST: https://gist.github.com/YuriyZaletskyy/e901c289ec2ccd51160fc0a08c175166

Si no utiliza Inquilinos, puede autenticarse de la siguiente manera:

var basicAuthToken = Convert.ToBase64String(Encoding.UTF8.GetBytes(login + ":" + password));

A continuación, creará un proxy para SignalR basado en el nombre del hub que se especificó en el campo Nombre de destino cuando se definió la notificación push en la ventana Notificación push (SM302000).

GIST: https://gist.github.com/YuriyZaletskyy/2b813ec12d8a46e46f971c3a65a7871d

Notificaciones de procesos

El siguiente código muestra un MessageBox con datos JSON. Estructura JSON formada por la IG creada TestInqSO pestaña Rejilla de resultados.

GIST: https://gist.github.com/YuriyZaletskyy/9695027bf9243bdda3361bb61cefcd9c

Cuando se creen datos en la instancia de Acumatica, recibirá estos cambios en NotificationResult.Inserted.

Cuando se eliminen datos en la instancia, recibirá estos cambios en NotificationResult.Deleted.

Cuando se actualicen los datos en la instancia, recibirá estos cambios en NotificationResult.Deleted (datos antes de una actualización) y en NotificaciónResultado.Insertado (datos después de una actualización).

En el Detener click event handler, simplemente cierra la conexión:

connection.Stop();

Ahora, cada vez que se realice algún cambio en los Pedidos de Venta (SO301000), recibirá notificaciones.

El código completo para lograr todo esto se parece a esto:

GIST: https://gist.github.com/YuriyZaletskyy/5dff485f3fcc787841b71e1e40cd6336

Resumen

Con el flujo de trabajo descrito en este artículo, puede notificar fácilmente a servicios y aplicaciones de terceros los cambios que se produzcan dentro de Acumatica. También con el mecanismo de notificaciones push de Acumatica, puedes obtener comunicación en tiempo real entre Acumatica y otros servicios en lugar de llamar regularmente a las API de Acumatica, empujando las restricciones de llamadas API y agotando estas, impactando en los límites de conexión de tu aplicación.

¡Feliz codificación!

Entradas relacionadas

Autor del blog

Yuriy empezó a programar en 2003 utilizando C++ y FoxPro, para pasar después a .Net en 2006. A partir de 2013, ha estado desarrollando activamente aplicaciones utilizando Acumatica xRP Framework, desarrollando soluciones para muchos clientes a lo largo de los años. Tiene un blog personal, acertadamente llamado Blog de Yuriy Zaletskyy, donde ha estado documentando los problemas de programación que se ha encontrado en los últimos seis años, compartiendo sus observaciones y soluciones libremente con otros desarrolladores de Acumatica.

Reciba las actualizaciones del blog en su bandeja de entrada.