A través de los servicios broker.cloudPersistence.*
, se tiene acceso a funciones relacionadas con el almacenamiento de datos en la nube.Mat|r proporciona una base de datos compartida en la nube, en la cual cada aplicación, posee su propia instancia; de modo que cada usuario de la aplicación puede guardar y recuperar información compartida por todos los usuarios de la misma.
Los métodos de este servicio utilizan los mismos modelos Mat|r en sus firmas, por lo cual los modelos de las aplicaciones ya constituyen la información que será almacenada en la nube. Esto permite al desarrollador trabajar con los mismos modelos que utiliza en sus propias reglas de negocio, agregando rapidez, transparencia y evitando parseos innecesarios.
- Métodos básicos
Estos métodos permiten guardar, consultar y borrar modelos.
- Métodos de consultas avanzados
Estos métodos permiten realizar consultas en base a diferentes filtros que pueden ser combinados; como también consultas paginadas.
- Métodos transaccionales
En caso de tener multiples usuarios que eventualmente pueden guardar información al mismo tiempo, estos métodos agregan el soporte para modificar collecciones (Array
,Map
) en forma transaccional, o incrementar valores en campos numéricos y asi eliminar los riesgos de perdida de información.
- Model broker.cloudPersistence.appendToArray(Model modelo, String nombreArregloAtributo, Any objetoAAgregar)
- Model broker.cloudPersistence.removeFromArray(Model modelo, String nombreArregloAtributo, Any objetoABorrar)
- Model broker.cloudPersistence.appendToMap(Model modelo, String nombreMapaAtributo, String keyObjetoAAgregar, Any objetoAAgregar)
- Model broker.cloudPersistence.removeFromMap(Model modelo, String nombreMapaAtributo, String keyObjetoABorrar)
- Model broker.cloudPersistence.increment(Model modelo, String nombreAtributo, Any valorASumar)
METODOS PUBLICOS
void broker.cloudPersistence.save(Model modeloAGuardar)
Guarda un modelo en el almacenamiento de datos en la nube. El método es bloqueante, mostrando un indicador de carga mientras se ejecuta. Si no se encuentra conexión a internet, los cambios quedan persistidos localmente y se persistirán en la nube cuando se restablezca la conexión. Si el modeloAGuardar
posee atributos del tipo model
, éstos también serán persistidos y quedaran referenciados en dichos atributos. La llamada a este método sobre un modelo previamente almacenado actualiza la información del mismo.
Argumentos |
|
modeloAGuardar |
Model: modelo a ser persistido en el almacenamiento de datos en la nube. |
Excepciones |
|
WrongTypeOfArgumentsInCall – Wrong {argumentNumber} argument type. Found ‘{paramType}‘, required; ‘{expectedType}’ in call of method ‘{methodName}’. |
modeloAGuardar no es de tipo Modelo. |
void broker.cloudPersistence.saveCollection(Array<Model> collection)
Guarda un array de modelos en el almacenamiento de datos en la nube. El método es bloqueante, mostrando un indicador de carga mientras se ejecuta. Si no se encuentra conexión a internet, los cambios quedan persistidos localmente y se persistirán en la nube cuando se restablezca la conexión. Este método realiza la misma tarea que ejecutar una llamada al método broker.cloudPersistence.save(aModel) por cada uno de los elementos del array, pero de forma más rápida y eficiente.
Argumentos |
|
collection |
Array<Model>: Array de modelos que serán persistidos en el almacenamiento de datos en la nube. |
Excepciones |
|
WrongTypeOfArgumentsInCall – Wrong {argumentNumber} argument type. Found ‘{paramType}‘, required; ‘{expectedType}’ in call of method ‘{methodName}’. |
Collection no es de tipo Array de modelo. |
void broker.cloudPersistence.remove(Model modeloABorrar)
Borra un modelo del almacenamiento de datos en la nube. El método es bloqueante, mostrando un indicador de carga mientras se ejecuta. Si no se encuentra conexión a internet, los cambios se hacen localmente y se persistirán en la nube cuando se reestablezca la conexión. Si el modeloABorrar
posee atributos del tipo model
, éstos no serán borrados de la base de datos, sino que sólo se borrarán sus referencias.
Argumentos |
|
modeloABorrar |
Modelo: modelo a ser borrado del almacenamiento de datos en la nube. |
Excepciones |
|
WrongTypeOfArgumentsInCall – Wrong {argumentNumber} argument type. Found ‘{paramType}‘, required; ‘{expectedType}’ in call of method ‘{methodName}’. |
modeloABorrar no es de tipo Modelo. |
CloudOperationError – Error when trying to remove a not cloud model value. |
Error tratando de borrar un modelo que no ha sido persistido en la nube anteriormente. |
Array broker.cloudPersistence.get(String nombreModelo)
Recupera una colección de modelos desde el almacenamiento de datos en la nube. El método es bloqueante, mostrando un loading indicator mientras se ejecuta. Si no se encuentra conexión a internet, retornará datos almacenados en el caché local del dispositivo.
Argumentos |
|
nombreModelo |
String: nombre de los modelos a ser recuperados desde el almacenamiento de datos en la nube. |
Retorna |
|
Array |
Un arreglo de modelos del tipo nombreModelo recuperados desde el almacenamiento en la nube. |
Excepciones |
|
ModelNotFound – Model nombreModelo not found. |
Modelo referenciado en nombreModelo no encontrado. |
Array broker.cloudPersistence.getWithFilter(Filter filtro)
Recupera una colección de modelos desde el almacenamiento de datos en la nube, filtrando los resultados obtenidos en el filtro configurado previamente.
Argumentos |
|
filtro |
Filter: filtro configurado para recuperar modelos desde el almacenamiento de datos en la nube. |
Retorna |
|
Array |
Un arreglo de modelos filtrado, del tipo nombreModelo , recuperados desde el almacenamiento en la nube. |
Excepciones |
|
WrongTypeOfArgumentsInCall – Wrong {argumentNumber} argument type. Found ‘{paramType}‘, required; ‘{expectedType}’ in call of method ‘{methodName}’. |
Argumento filtro no es de tipo Filter. |
Array broker.cloudPersistence.getNextPage(PageFetcher paginador)
Retorna la siguiente página como un arreglo de modelos del tipo especificado en el constructor del filtro, del tamaño especificado al momento de la creación del PageFetcher. Si es la primera vez que se ejecuta, realiza la consulta y devuelve la primera página.
Argumentos |
|
paginador |
PageFetcher: objeto encargado de la configuración de paginación para recuperar datos desde el almacenamiento de datos en la nube. |
Retorna |
|
Array |
Un arreglo de modelos filtrado y del tamaño especificado en el paginador , recuperados desde el almacenamiento en la nube. |
Excepciones |
|
CloudServicePageRequestOutOfBound – Error when trying to request a page in out of bound index. Index value: ‘{value}’, pages: ‘{pages}’. |
Error tratando de solicitar una página fuera de los límites. |
Array broker.cloudPersistence.getPreviousPage(PageFetcher paginador)
Retorna la página anterior como un arreglo de modelos del tipo especificado en el constructor del filtro, del tamaño especificado al momento de la creación del PageFetcher. Si es la primera vez que se ejecuta, realiza la consulta y devuelve la primer página.
Argumentos |
|
paginador |
PageFetcher: objeto encargado de la configuración de paginación para recuperar datos desde el almacenamiento de datos en la nube. |
Retorna |
|
Array |
Un arreglo de modelos filtrado y del tamaño especificado en el paginador , recuperados desde el almacenamiento en la nube. |
Excepciones |
|
CloudServicePageRequestOutOfBound – Error when trying to request a page in out of bound index. Index value: ‘{value}’, pages: ‘{pages}’. |
Error tratando de solicitar una página fuera de los límites. |
Array broker.cloudPersistence.resetPages(PageFetcher paginador)
Reinicia el page fetcher de manera que se realiza nuevamente la consulta y se carga la primera página.
Argumentos |
|
paginador |
PageFetcher: objeto encargado de la configuración de paginación para recuperar datos desde el almacenamiento de datos en la nube. |
Retorna |
|
Array |
Un arreglo de modelos filtrado y del tamaño especificado en el paginador , recuperados desde el almacenamiento en la nube. |
Model broker.cloudPersistence.appendToArray(Model modelo, String nombreArregloAtributo, Any objetoAAgregar)
Agrega el objetoAAgregar
en el arreglo referenciado en el atributo nombreArregloAtributo
presente en modelo
. Se garantiza que el objeto es agregado al final del array en la base de datos sin importar si hubo otros usuarios modificando el array, es decir que no se perderá la integridad de los datos. El método devuelve el modelo (que se acaba de modificar) actualizado.
Argumentos |
|
modelo |
Model: modelo (que posee el atributo nombreArregloAtributo ) en el cual queremos agregar el objeto. |
nombreArregloAtributo |
String: nombre del atributo (de tipo Array) en donde queremos agregar el objeto. |
objetoAAgregar |
[Model,String,Double,Integer,Bool,Date]: objeto a ser agregado en modelo.nombreArregloAtributo . |
Retorna |
|
Modelo |
Retorna el modelo actualizado luego de la operación de agregar. |
Excepciones |
|
AttributeNotFound – Attribute nombreArregloAtributo not found in model model |
El atributo referenciado en nombreArregloAtributo no fue encontrado en el modelo. |
WrongTypeOfArgumentsInCall – Error trying to appendToArray a value in a not collection attribute nombreArregloAtributo . |
Error agregando un valor en un atributo que no es una colección. |
CloudOperationError – Error when trying to appendToArray a not cloud model value. |
modelo no ha sido grabado con anterioridad en el almacenamiento de la nube. |
Model broker.cloudPersistence.removeFromArray(Model modelo, String nombreArregloAtributo, Any objetoABorrar)
Borra todas las ocurrencias de objetoABorrar
en el arreglo referenciado en el atributo nombreArregloAtributo
presente en modelo
. Se garantiza que el array modificado es la última imagen de la base de datos, es decir que no se perderá la integridad de los datos. El método devuelve el modelo (que se acaba de modificar) actualizado.
Argumentos |
|
modelo |
Model: modelo (que posee el atributo nombreArregloAtributo ) en el cual queremos borrar el objeto. |
nombreArregloAtributo |
String: nombre del atributo (de tipo Array) en donde queremos borrar el objeto. |
objetoABorrar |
[Model,String,Double,Integer,Bool,Date]: objeto a ser borrado en modelo.nombreArregloAtributo . |
Retorna |
|
Modelo |
Retorna el modelo actualizado luego de la operación de borrar. |
Excepciones |
|
AttributeNotFound – Attribute nombreArregloAtributo not found in model model |
El atributo referenciado en nombreArregloAtributo no fue encontrado en el modelo. |
WrongTypeOfArgumentsInCall – Error trying to removeFromArray a value in a not collection attribute nombreArregloAtributo . |
Error borrando un valor en un atributo que no es una coleccion. |
CloudOperationError – Error when trying to removeFromArray a not cloud model value. |
modelo no ha sido grabado con anterioridad en el almacenamiento de la nube. |
CloudOperationError – Error when trying to removeFromArray a not cloud model value. |
objetoABorrar no ha sido grabado con anterioridad en el almacenamiento de la nube. |
Model broker.cloudPersistence.appendToMap(Model modelo, String nombreMapaAtributo, String keyObjetoAAgregar, Any objetoAAgregar)
Agrega el objetoAAgregar
en el mapa referenciado en el atributo nombreMapaAtributo
presente en modelo
, con la key key
. Se garantiza que el objeto es agregado en la base de datos sin importar si hubo otros usuarios modificando el mapa, es decir que no se perderá la integridad de los datos. El método devuelve el modelo (que se acaba de modificar) actualizado.
Argumentos |
|
modelo |
Model: modelo (que posee el atributo nombreMapaAtributo ) en el cual queremos agregar el objeto. |
nombreMapaAtributo |
String: nombre del atributo (de tipo map) en donde queremos agregar el objeto. |
keyObjetoAAgregar |
String: nombre de la key del mapa en donde queremos agregar el objeto. |
objetoAAgregar |
[Model,String,Double,Integer,Bool,Date]: objeto a ser agregado en modelo.nombreMapaAtributo . |
Retorna |
|
Modelo |
Retorna el modelo actualizado luego de la operación de agregar. |
Excepciones |
|
AttributeNotFound – Attribute nombreMapaAtributo not found in model model |
El atributo referenciado en nombreMapaAtributo no fue encontrado en el modelo. |
WrongTypeOfArgumentsInCall – Error trying to appendToMap a value in a not collection attribute nombreMapaAtributo . |
Error agregando un valor en un atributo que no es una colección (map). |
CloudOperationError – Error when trying to appendToMap a not cloud model value. |
modelo no ha sido grabado con anterioridad en el almacenamiento de la nube. |
Model broker.cloudPersistence.removeFromMap(Model modelo, String nombreMapaAtributo, String keyObjetoABorrar)
Borra el objeto del map correspondiente a la keyObjetoABorrar
en el mapa referenciado en el atributo nombreMapaAtributo
presente en modelo
. Se garantiza que el mapa modificado es la última imagen de la base de datos, es decir que no se perderá la integridad de los datos. El método devuelve el modelo (que se acaba de modificar) actualizado.
Argumentos |
|
modelo |
Model: modelo (que posee el atributo nombreMapaAtributo ) en el cual queremos borrar el objeto. |
nombreMapaAtributo |
String: nombre del atributo (de tipo map) en donde queremos borrar el objeto. |
keyObjetoABorrar |
String: key del objeto a ser borrado en modelo.nombreMapaAtributo . |
Retorna |
|
Modelo |
Retorna el modelo actualizado luego de la operación de borrar. |
Excepciones |
|
AttributeNotFound – Attribute nombreMapaAtributo not found in model model |
El atributo referenciado en nombreMapaAtributo no fue encontrado en el modelo. |
WrongTypeOfArgumentsInCall – Error trying to removeFromMap a value in a not collection attribute nombreMapaAtributo . |
Error borrando un valor en un atributo que no es una colección. |
CloudOperationError – Error when trying to removeFromMap a not cloud model value. |
modelo no ha sido grabado con anterioridad en el almacenamiento de la nube. |
Model broker.cloudPersistence.increment(Model modelo, String nombreAtributo, Any valorASumar)
Suma el valorASumar
al atributo nombreAtributo
presente en modelo
. Se garantiza que la suma se hará sobre los datos actualizados de la base de datos sin importar si hubo otros usuarios modificaron este atributo, es decir que no se perderá la integridad de los datos. El método devuelve el modelo (que se acaba de modificar) actualizado.
Argumentos |
|
modelo |
Model: modelo (que posee el atributo nombreAtributo ) en el cual queremos sumar. |
nombreAtributo |
String: nombre del atributo en donde queremos sumar el valor valorASumar . |
valorASumar |
[Double,Integer]: valor a ser sumado a modelo.nombreAtributo . |
Retorna |
|
Modelo |
Retorna el modelo actualizado luego de la operación de agregar. |
Excepciones |
|
AttributeNotFound – Attribute nombreAtributo not found in model model |
El atributo referenciado en nombreAtributo no fue encontrado en el modelo. |
CloudOperationError – Error when trying to appendToArray a not cloud model value. |
modelo no ha sido grabado con anterioridad en el almacenamiento de la nube. |
Ejemplo:
Experience Main {
String name label("Main name")
Decision rule1 action("MainContext.guardarPersona") label("Guardar persona")
Decision rule2 action("MainContext.recuperarPersonas") label("Recuperar personas")
Decision rule3 action("MainContext.borrarPersona") label("Borrar persona")
Decision rule4 action("MainContext.recuperarConFiltro") label("Recuperar personas mayores de 18 años")
Decision rule5 action("MainContext.agregarEquipo") label("Agregar equipo al arreglo")
Decision rule6 action("MainContext.incrementarEdad") label("Incrementar edad")
}
Model Persona {
String nombre
Integer edad
Array<String> equipos
}
RuleContext MainContext {
Rule guardarPersona {
Persona p = Persona(nombre: "pepe", edad: 18, equipos: [])
//guarda el modelo persona en la base de datos en la nube
broker.cloudPersistence.save(p)
}
Rule recuperarPersonas {
//recupera todas las personas existentes en la base de datos en la nube
Array<Persona> personas = broker.cloudPersistence.get("Persona")
broker.ui.showAlert("Cantidad de personas", personas.size().toString())
}
Rule borrarPersona {
Array<Persona> personas = broker.cloudPersistence.get("Persona")
Persona primerPersona = personas.get(0)
//borra el modelo persona de la base de datos en la nube
broker.cloudPersistence.remove(primerPersona)
}
Rule recuperarConFiltro {
Filter filtro = Filter(modelName:"Persona")
filtro.greaterThan("edad", 18)
//recupera personas mayores de 18 años existentes en la base de datos en la nube
Array<Persona> personas = broker.cloudPersistence.getWithFilter(filtro)
broker.ui.showAlert("Cantidad de personas mayores de 18 años", personas.size().toString())
}
Rule agregarEquipo {
Array<Persona> personas = broker.cloudPersistence.get("Persona")
Persona primerPersona = personas.get(0)
//agrega un equipo al arreglo de equipos de la primer persona
broker.cloudPersistence.appendToArray(primerPersona, "equipos", "Barcelona")
}
Rule incrementarEdad {
Array<Persona> personas = broker.cloudPersistence.get("Persona")
Persona primerPersona = personas.get(0)
//suma un año de edad a la primer persona
Model personaActualizada = broker.cloudPersistence.increment(primerPersona, "edad", 1)
broker.ui.showAlert("Edad despues de incrementar 1", personaActualizada.edad.toString())
}
}