{{indexmenu_n>1}} ====== Notificaciones ====== \\ ===== Manejo e Implementación de Notificaciones ===== \\ Con las notificaciones el usuario final puede obtener información de una forma visual e interactiva de lo que está ocurriendo en la aplicación por debajo. De tal forma que cuando le lleguen operaciones de datos importantes en la aplicación no salgan mensajes o nos lleve la aplicación a lugares importantes.\\ \\ Los tipos de notificaciones son dos:\\ | [[wiki:2.-desarrollo-app:2.5.-controles-by-xone:notificaciones:start#Por control libre y autónomo, donde el programador tiene el control total|Por control libre y autónomo, donde el programador tiene el control total]] | | [[wiki:2.-desarrollo-app:2.5.-controles-by-xone:notificaciones:start#Integradas con el menú Appwizard|Integradas con el menú Appwizard]] | \\ A partir de Android 7 y de los Frameworks más actualizados, se han introducido nuevas funcionalidades para el Manejo e Implementación de las Notificaciones de las Aplicaciones XOne. Estas funcionalidades permiten el control y verificación de la actuación de las mismas en las Apps. \\ Una de la formas más usadas para la implementación de noticias en Apps XOne es la **Tecnología PUSH** [[wiki:3.-servidor:3.19.-tecnologia-push:start|(Véase Información Ampliada)]] \\ Algunas de las funciones para manejo y chequeo de notificaciones son: \\ - Para comprobar si están bloqueadas todas las notificaciones mediante: **ui.areNotificationsBlocked()** - A partir de nuevas versiones de frameworks se puede lanzar ventanas para configurar el ajuste global mediante: **ui.showNotificationSettings()** - Se opera de la misma forma para los ajustes de un canal, pero no resulta tan útil, dado que no se puede preguntar por su estado: **ui.showNotificationChannelSettings** ("%%XOneFrameworkNotificationChannel%%"). Siendo %%"XOneFrameworkNotificationChannel"%% el canal por defecto al que se postean las notificaciones. En iOS las notificaciones funcionan mediante permisos. \\ Ejemplos: \\ function showNotification() { ui.showNotification(1, "Title", "Message"); } function areNotificationsBlocked() { ui.showToast("Todas bloqueadas: " + ui.areNotificationsBlocked()); } function isNotificationChannelGroupBlocked() { ui.showToast("Grupo de canales bloqueado: " + ui.areNotificationsBlocked("XOneFrameworkNotificationChannel")); } function showNotificationSettings() { ui.showNotificationSettings(); } function showNotificationChannelSettings() { ui.showNotificationChannelSettings("XOneFrameworkNotificationChannel"); } \\ ===== Por control libre y autónomo donde el programador tiene el control total ===== \\ Para este tipo de notificaciones utilizamos el **nodo maintenance**, con el que se lanzarán mantenimientos en segundo plano y que podremos utilizar para mostrar los mensajes que necesitemos. \\ \\ Con este tipo de notificaciones el programador tiene el control total. Son útiles para utilizarlas cuando se ha realizado una aplicación que no tiene appwizard y se realiza la entrada mediante **“entry-point”**. \\ ===== Evento especial de réplica REPLICA-OK ===== Podemos capturar el evento de cuando entra una operación por réplica en una determinada tabla de la base de datos, en un nodo específico que se define dentro de la colección empresas. ... ... ===== Integradas con el Menú Appwizard ===== Estas notificaciones están unidas a las colecciones que son llamadas desde el menú Appwizard mediante una serie de atributos.\\ \\ Para este caso, se crea una //coll// como esta: Los atributos relacionados son: === Notify === \\ ^Notify|Atributo con el que le indicamos al framework que es una colección de notificaciones y que se tiene que revisar cada vez que replica para ver si cumple el SQL de dicha colección y entonces avisar al usuario de dicho evento. | === Notify_counter === \\ ^Notify_Counter|Realiza un conteo de los elementos de esa colección. Si no se especifica este atributo, en lugar de contar los elementos de esa colección, se comprueba si hay elementos.| === Notify_coll === \\ ^Notify_Coll|Es el nombre de la colección secundaria que se usará para la edición. Si este atributo no se especifica, se editará la colección que define estos atributos. Normalmente cuando queremos contar los elementos de una colección (para ver los avisos) es bastante más rápido contar una colección con un SQL muy simple como el del ejemplo y a la hora de editar, llamamos a la colección que tendrá el SQLcomplejo. Esta colección debe ser llamada desde el Appwizard.| === Notify_title === \\ ^Notify_Title|Si se especifica este atributo, será el texto que aparezca identificando el aviso, sino será el atributo caption de la colección que use para notificar en el appwizard.|