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.

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.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())
    }

}