Artículo
Yone Moreno · Feb 8, 2020 Lectura de 8 min

Empezar a usar la Base de Datos en Ensemble

Hola, en este artículo explicaremos cómo empezar a usar la Base de Datos en Ensemble.

 

El caso de uso es recibir la siguiente estructura JSON, que representa una notificación, y ser capaces de validarla.

 

{

    "idApp": "111111111",

    "numExpediente": "111111111",

    "idioma": "ES",

    "tipoNotificacion": "citafuturaAP",

    "notificacion": {

        "titulo": "Cita Atención Primaria",

        "subtitulo": "C.P. ISORA",

       "mensaje": "Aquí el contenido del mensaje si aplicase",

       "datosAdicionales": [

            {

               "clave": "centro",

               "valor": "C.P. ISORA",

           },

           {

               "clave": "fecha", {}

               "valor": "yyyy/mm/dd",

           },

           {

               "clave": "hora",

               "valor": "hh:mm",

           },

           {

               "clave": "profesional",

               "valor": "nombre del profesional",

           },

           {

               "clave": "nomUsuario",

               "valor": "nombre del usuario",

           },

           {

               "clave": "codcita",

               "valor": "idCita",

           },

           {

               "clave": "sepuedeborrar",

               "valor": 1,

           }

       ]

    }

}

 

En concreto para cada par idApp y tipoNotificacion, comprobamos que las claves de datos adicionales, se encuentran en el listado de las autorizadas.

 

Uno de los primeros pasos para recibir la notificación anterior, es crear la estructura de datos con la que albergamos los datos.

 

Class Mensajes.Request.NotificacionesPUSH.CrearNotificacion Extends Ens.Request

{

Property idApp As %String(MAXLEN = "");

Property numExpediente As %String(MAXLEN = "");

Property idioma As %String(MAXLEN = "");

Property tipoNotificacion As %String(MAXLEN = "");

Property notificacion As EsquemasDatos.NotificacionesPUSH.Notificacion;

------------

 

Class EsquemasDatos.NotificacionesPUSH.Notificacion Extends (%SerialObject, %XML.Adaptor)

{

Parameter ELEMENTQUALIFIED = 1;

Parameter XMLNAME = "Notificacion";

Parameter XMLSEQUENCE = 1;

Property titulo As %String(MAXLEN = "");

Property subtitulo As %String(MAXLEN = "");

Property mensaje As %String(MAXLEN = "");

Property datosAdicionales As list Of EsquemasDatos.NotificacionesPUSH.DatoAdicional;

---------------

 

Class EsquemasDatos.NotificacionesPUSH.DatoAdicional Extends (%SerialObject, %XML.Adaptor)

{

Parameter ELEMENTQUALIFIED = 1;

Parameter NAMESPACE;

Parameter XMLNAME = "DatoAdicional";

Parameter XMLSEQUENCE = 1;

Property clave As %String(MAXLEN = "");

Property valor As %String(MAXLEN = "");

-------------

 

Una vez tenemos la estructura de datos que contendrá nuestra notificación, necesitamos definir la tabla mediante la cual validaremos el mensaje. En este caso nos crearemos una tabla con tres columnas: idApp, tipoNotificacion, clave. 

 

En idApp guardaremos qué identifica a la aplicación que nos envía el mensaje, por ej: “miHistoria”, “4321-abcd”... En tipoNotificacion guardaremos el tipo de cita médica, por ej: “citafuturaAP” para una de atención primaria. En clave tendremos cada clave autorizada dentro de datosAdicionales, cuyos valores serán por ej: “fecha”, “hora”, “profesional”...

 

En concreto para crear una tabla nos generamos una clase, donde cada Property es una columna. Además tenemos las Query asociadas a la misma, en este caso, a seleccionarClave, se le envía un par idApp, tipoNotificacion, y nos devuelve todas las filas que representan el listado de claves autorizadas.

 

Class TablasBBDD.NotificacionesPUSH.RelacionAplicacionNotificacion Extends Ens.Request

{

Property idApp As %String(MAXLEN = "");

Property tipoNotificacion As %String(MAXLEN = "");

Property clave As %String(MAXLEN = "");

Query seleccionarClave(idApp As %String, tipoNotificacion As %String) As %SQLQuery [ SqlProc ]

{

    SELECT clave FROM TablasBBDD_NotificacionesPUSH.RelacionAplicacionNotificacion

    WHERE idApp = :idApp and tipoNotificacion = :tipoNotificacion

}

Query seleccionarTodo() As %SQLQuery [ SqlProc ]

{

    SELECT * FROM TablasBBDD_NotificacionesPUSH.RelacionAplicacionNotificacion

}

 

A partir de aquí, vamos a ayudarnos de la Producción e insertar en la tabla creada las filas que necesitamos. Accedemos mediante System Explorer > SQL:

Luego en el listado de tablas, buscamos la recién creada:

Para ir obteniendo los datos que insertamos en la tabla usaremos un select:

 

select * from TablasBBDD_NotificacionesPUSH.RelacionAplicacionNotificacion

 

Y en nuestro caso vamos a rellenar la tabla mediante insert:

 

insert into TablasBBDD_NotificacionesPUSH.RelacionAplicacionNotificacion (idApp,tipoNotificacion,clave) values ('miHistoria','citafuturaAP','centro')

...

insert into TablasBBDD_NotificacionesPUSH.RelacionAplicacionNotificacion (idApp,tipoNotificacion,clave) values ('miHistoria','citafuturaAP','sepuedeborrar')

 

De esta forma tendremos el listado de claves autorizadas:

A continuación, vamos a crear en el Proceso, un bloque de código, con el fin de validar la estructura del mensaje.

 

  

/*

  * Obtener la lista de claves permitidas para este idApp y tipoNotificacion

  */

 

  set statement=##class(%SQL.Statement).%New()

  set status = statement.%PrepareClassQuery("TablasBBDD.NotificacionesPUSH.RelacionAplicacionNotificacion","seleccionarClave")

  set result = statement.%Execute(request.idApp,request.tipoNotificacion)

  set clavesBD = ##class(%ListOfDataTypes).%New()

 

  /*

  * Guardar en una lista local las claves obtenidas de BD

  */

 

  set i = 0

   while (result.%Next() '= 0){

    set i=i+1

    $$$LOGINFO("i: "_i)

   

    set clave = result.%CurrentResult.Get("clave")

    $$$LOGINFO("clave: "_clave)

    

    do clavesBD.Insert(clave)

    

   }

 /*

  * Verificar para cada clave de la notificacion, si esta entre las obtenidas de BD

  */

 

  for j=1:1:request.notificacion.datosAdicionales.Count(){

   set context.estaClaveNotificacionEnBD = 0

   

   $$$LOGINFO("j: "_j)  

   $$$LOGINFO("Clave dentro de la notificacion > datosAdicionales: "_request.notificacion.datosAdicionales.GetAt(j).clave)

   

   for k=1:1:clavesBD.Count(){

    $$$LOGINFO("k: "_k)

    $$$LOGINFO("clavesBD: "_clavesBD.GetAt(k))

    

    if request.notificacion.datosAdicionales.GetAt(j).clave = clavesBD.GetAt(k){

     $$$LOGINFO("SON IGUALES")

     set context.estaClaveNotificacionEnBD = 1  

     quit

    }

   }  

   

  if context.estaClaveNotificacionEnBD = 0{

   $$$LOGINFO("La clave: "_request.notificacion.datosAdicionales.GetAt(j).clave_" no esta en BD")

   quit

  }

 

 }

 

 

Seguidamente vamos a probar lo hecho. Para ello usamos el POSTMAN, enviando al servidor de ensemble un JSON. En concreto, vamos a empezar probando un mensaje con estructura no válida:

 

{"idApp":"miHistoria","numExpediente":"123456789","idioma": "es","tipoNotificacion":"citafuturaAP","notificacion":{ "titulo": "Cita Atención Primaria","subtitulo": "C.P. ISORA","mensaje":"Aqui el contenido del mensaje si aplicase","datosAdicionales":[ { "clave": "inventada", "valor": "ficticio" }, { "clave": "centro", "valor": "C.P. ISORA" }, { "clave": "fecha", "valor": "yyy/mm/dd" },{ "clave":"hora", "valor":"hh:mm" }, { "clave": "profesional", "valor": "nombre del profesional" },{ "clave":"nomUsuario", "valor":"nombre de usuario" }, { "clave":"codcita","valor":"idCita" },{"clave":"sepuedeborrar","valor":"1" }] }}

 

Para observar el comportamiento, empleamos la Produccin, y observamos la traza del Message Viewer.

De forma que vemos el mensaje:

Y el proceso, gracias al código anterior, identifica que clave no está entre las autorizadas en la BD.

Y si probamos una notificación válida:

 

{"idApp":"e47322de-64c8-43c5-a1b7-42aa6409eb48","numExpediente":"123456789","idioma": "es","tipoNotificacion":"citafuturaAP","notificacion":{ "titulo": "Cita Atención Primaria","subtitulo": "C.P. ISORA","mensaje":"Aqui el contenido del mensaje si aplicase","datosAdicionales":[ { "clave": "centro", "valor": "C.P. ISORA" }, { "clave": "fecha", "valor": "yyy/mm/dd" },{ "clave":"hora", "valor":"hh:mm" }, { "clave": "profesional", "valor": "nombre del profesional" },{ "clave":"nomUsuario", "valor":"nombre de usuario" }, { "clave":"codcita","valor":"idCita" },{"clave":"sepuedeborrar","valor":"1" }] }}

 

Observamos lo siguiente:

La notificación se envía a la operación.

De esta forma hemos visto cómo empezar a usar las tablas mediante la BD de Ensemble. 💾

 

Más info:

 

 

 

 

 

 

00
1 0 0 123
Log in or sign up to continue