A través de los servicios broker.ui.*, se tiene acceso a funciones relacionadas con la interfaz de usuario y el control de navegación de los diferentes Layouts de la aplicación.

METODOS PUBLICOS

void broker.ui.push(String nombreLayout)

Hace visible el layout referenciado en nombreLayout y lo añade a la pila de navegación actual. En la misma acción, se autogenera y se bindea el modelo correspondiente al configurado como datasource en el layout nombreLayout. Este método sólo se puede utilizar con experiencias (no válido para Layout de tipo crossmenu.

Argumentos
nombreLayout String: Nombre del layout.
Excepciones
LayoutNotFound – Layout nombreLayout not found. Layout referenciado en nombreLayout no ha sido encontrado.
InvalidUIAction – Error when trying to execute push action outside application navigation stack. Error tratando de ejecutar el método push fuera de la pila de navegación.

void broker.ui.push(String nombreLayout, Model… dataSourceModel)

Hace visible el layout referenciado en nombreLayout y lo añade a la pila de navegación actual. En la misma acción, los modelos pasados después del primer argumento, se bindean (asocian) a los datasources configurados en el layout. Para las experiencias siempre existe como máximo 1 dataSource a bindear.

En el caso de un Layout de tipo crossmenu, los modelos argumentos a bindear en los dataSources son tantos como ítems tenga el menú. Es importante observar que en este tipo de Layout, todos los layouts referenciados dentro del crossmenu deben tener un dataSource asociado

Argumentos
nombreLayout String: Nombre del layout.
dataSourceModel Model: Modelo asociado al primer dataSource configurado en el Layout.
dataSourceModelN Model: Modelo n-ésimo asociado al dataSource n-ésimo configurado en el Layout.
Excepciones
LayoutNotFound – Layout nombreLayout not found. Layout referenciado en nombreLayout no ha sido encontrado.
InvalidUIAction – Error when trying to execute push action outside application navigation stack. Error tratando de ejecutar el método push fuera de la pila de navegación.
WrongNumberOfArgumentsInCall – Trying to navigate to layout nombreLayout with wrong number of datasources. Se trató de navegar al layout nombreLayout con un número incorrecto de datasources.

void broker.ui.pop()

Termina la visualización del layout actual y lo elimina de la pila de navegación. Este método solo puede ser usado si anteriormente se añadió un layout usando el método push.

Excepciones
InvalidUIAction – Error when trying to execute pop action outside application navigation stack. Error tratando de ejecutar el método pop fuera de la pila de navegación.

void broker.ui.present(String nombreLayout)

Hace visible el layout referenciado en nombreLayout y lo añade a una nueva pila de navegación, en forma modal. En la misma acción, se autogenera y se bindea el modelo correspondiente al configurado como datasource en el layout nombreLayout. Este método sólo se puede utilizar con experiencias (no válido para Layout de tipo crossmenu.

Argumentos
nombreLayout String: Nombre del layout.
Excepciones
LayoutNotFound – Layout nombreLayout not found. Layout referenciado en nombreLayout no ha sido encontrado.
InvalidUIAction – Error when trying to execute push action outside application navigation stack. Error tratando de ejecutar el método push fuera de la pila de navegación.

void broker.ui.present(String nombreLayout, Model… dataSourceModel)

Hace visible el layout referenciado en nombreLayout y lo añade a una nueva pila de navegación, en forma modal. En la misma acción, los modelos pasados después del primer argumento, se bindean (asocian) a los datasources configurados en el layout. Para las experiencias siempre existe como máximo 1 dataSource a bindear.

En el caso de un Layout de tipo crossmenu, los modelos argumentos a bindear en los dataSources son tantos como ítems tenga el menú. Es importante observar que en este tipo de Layout, todos los layouts referenciados dentro del crossmenu deben tener un dataSource asociado.

Argumentos
nombreLayout String: Nombre del layout.
dataSourceModel Model: Modelo asociado al primer dataSource configurado en el Layout.
dataSourceModelN Model: Modelo n-ésimo asociado al dataSource n-ésimo configurado en el Layout.
Excepciones
LayoutNotFound – Layout nombreLayout not found. Layout referenciado en nombreLayout no ha sido encontrado.
InvalidUIAction – Error when trying to execute present action outside application navigation stack. Error tratando de ejecutar el método present fuera de la pila de navegación.
WrongNumberOfArgumentsInCall – Trying to navigate to layout nombreLayout with wrong number of datasources. Se trató de navegar al layout nombreLayout con un número incorrecto de datasources.

void broker.ui.dismiss()

Termina la visualización del layout actual y lo elimina de la pila de navegación. Este método es usado si anteriormente se añadió un layout usando el método present.

Excepciones
InvalidUIAction – Error when trying to execute dismiss action outside application navigation stack. Error tratando de ejecutar el método dismiss fuera de la pila de navegación.

void broker.ui.setInitialExperience(String nombreLayout)

Hace visible el layout referenciado en nombreLayout reemplazando la pila de navegación actual por una nueva que contiene solo este layout. En la misma acción, se autogenera y se bindea el modelo correspondiente al configurado como datasource en el layout nombreLayout. Este método sólo se puede utilizar con experiencias (no válido para Layout de tipo crossmenu).

Argumentos
nombreLayout String: Nombre del layout.
Excepciones
LayoutNotFound – Layout nombreLayout not found. Layout referenciado en nombreLayout no ha sido encontrado.
InvalidUIAction – Error when trying to execute push action outside application navigation stack. Error tratando de ejecutar el método push fuera de la pila de navegación.

void broker.ui.setInitialExperience(String nombreLayout, Model… dataSourceModel)

Hace visible el layout referenciado en nombreLayout reemplazando la pila de navegación actual por una nueva que contiene solo este layout. En la misma acción, los modelos pasados después del primer argumento, se bindean (asocian) a los datasources configurados en el layout. Para las experiencias siempre existe como máximo 1 dataSource a bindear.

En el caso de un Layout de tipo crossmenu, los modelos argumentos a bindear en los dataSources son tantos como ítems tenga el menú. Es importante observar que en este tipo de Layout, todos los layouts referenciados dentro del crossmenu deben tener un dataSource asociado.

Argumentos
nombreLayout String: Nombre del layout.
dataSourceModel Model: Modelo asociado al primer dataSource configurado en el Layout.
dataSourceModelN Model: Modelo n-ésimo asociado al dataSource n-ésimo configurado en el Layout.
Excepciones
LayoutNotFound – Layout nombreLayout not found. Layout referenciado en nombreLayout no ha sido encontrado.
InvalidUIAction – Error when trying to execute push action outside application navigation stack. Error tratando de ejecutar el método push fuera de la pila de navegación.
WrongNumberOfArgumentsInCall – Trying to navigate to layout nombreLayout with wrong number of datasources. Se trató de navegar al layout nombreLayout con un número incorrecto de datasources.

Model broker.ui.getDataSource()

Retorna el modelo bindeado al layout que esta siendo visualizado o null si no encuentra ninguno.

Retorna
Model Modelo bindeado al layout actual o null.

void broker.ui.showAlert(String titulo, String descripcion)

Muestra un cuadro de diálogo con titulo y descripción.

Parametros
titulo String: Título a mostrar en el cuadro de diálogo.
descripcion String: Descripción a mostrar en el cuadro de diálogo.
Excepciones
InvalidUIAction – Error when trying to execute showAlert action outside application navigation stack. Error tratando de ejecutar el método showAlert fuera de la pila de navegación.

Integer broker.ui.showAlert(String titulo, String descripcion, String textoBotonPositivo)

Muestra un cuadro de diálogo con titulo, descripción, y un boton con el texto ‘textoBotonPositivo’.

Parametros
titulo String: Título a mostrar en el cuadro de diálogo.
descripcion String: Descripción a mostrar en el cuadro de diálogo.
textoBotonPositivo String: Texto a mostrar en el botón positivo.
Retorna
Integer Retorna siempre el valor 1, correspondiente al botón positivo.
Excepciones
InvalidUIAction – Error when trying to execute showAlert action outside application navigation stack. Error tratando de ejecutar el método showAlert fuera de la pila de navegación.

Integer broker.ui.showAlert(String titulo, String descripcion, String textoBotonPositivo, String textoBotonNegativo)

Muestra un cuadro de diálogo con titulo, descripción, y botones con los textos ‘textoBotonPositivo’ y ‘textoBotonNegativo’.

Parametros
titulo String: Título a mostrar en el cuadro de diálogo.
descripcion String: Descripción a mostrar en el cuadro de diálogo.
textoBotonPositivo String: Texto a mostrar en el botón positivo.
textoBotonNegativo String: Texto a mostrar en el botón negativo.
Retorna
 Integer Retorna 1 si se presionó el botón positivo, o -1 si se presionó el botón negativo .
Excepciones
InvalidUIAction – Error when trying to execute showAlert action outside application navigation stack. Error tratando de ejecutar el método showAlert fuera de la pila de navegación.

Integer broker.ui.showAlert(String titulo, String descripcion, String textoBotonPositivo, String textoBotonNegativo, String textoBotonCancelar)

Muestra un cuadro de diálogo con titulo, descripción, y botones con los textos ‘textoBotonPositivo’, ‘textoBotonNegativo’ y ‘textoBotonCancelar’.

Parametros
titulo String: Título a mostrar en el cuadro de diálogo.
descripcion String: Descripción a mostrar en el cuadro de diálogo.
textoBotonPositivo String: Texto a mostrar en el botón positivo.
textoBotonNegativo String: Texto a mostrar en el botón negativo.
textoBotonCancelar String: Texto a mostrar en el botón cancelar.
Retorna
 Integer Retorna 1 si se presionó el botón positivo, -1 si se presionó el botón negativo, ó 0 si se presionó el botón cancelar .
Excepciones
InvalidUIAction – Error when trying to execute showAlert action outside application navigation stack. Error tratando de ejecutar el método showAlert fuera de la pila de navegación.

void broker.ui.showLoading()

Muestra un indicador de actividad en la pantalla que esta siendo visualizada, atrapa eventos de toque por parte del usuario, impidiendo que se ejecute cualquier acción asociada a los mismos.
La llamada a este servicio broker debe estar balanceada con llamadas a broker.ui.hideLoading()

void broker.ui.hideLoading()

Oculta el indicador de actividad que esta siendo visualizado a causa de una llamada al servicio broker.ui.hideLoading().

Importante: Es responsabilidad del desarrollador mantener balanceadas las llamadas de broker.ui.showLoading() y broker.ui.hideLoading().

Ejemplo:

Experience Main {
    String name label("Main name")
    Decision rule1 action("MainContext.abrirPantalla")            label("Abrir")
    Decision rule2 action("MainContext.abrirPantallaModal")       label("Abrir modal")
    Decision rule3 action("MainContext.abrirMenu")                label("Abrir menu")
    Decision rule4 action("MainContext.mostrarDialogo")           label("Mostrar cuadro de dialogo")
    Decision rule5 action("MainContext.fetchDataAndStoreOnCloud") label("fetchDataAndStoreOnCloud")
}

Experience SegundaExperiencia {
    Decision rule1 action("MainContext.cerrarPantalla")      label("Cerrar")
    Decision rule2 action("MainContext.cerrarPantallaModal") label("Cerrar modal")
}

Experience TerceraExperiencia {
    String name label("Tercera name")
}

RuleContext MainContext {

    Rule abrirPantalla {

        //creamos una instancia de SegundaExperiencia
        SegundaExperiencia segExp = SegundaExperiencia()
        //levantamos esa experiencia con el metodo push
        broker.ui.push("SegundaExperiencia", segExp)

        //ó igualmente válido
        broker.ui.push("SegundaExperiencia")
    }

    Rule abrirPantallaModal {

        SegundaExperiencia segExp = SegundaExperiencia()
        broker.ui.present("SegundaExperiencia", segExp)
    }

    Rule abrirMenu {

        SegundaExperiencia segExp = SegundaExperiencia()
        TerceraExperiencia terExp = TerceraExperiencia()
        //levanta un crossmenu con dos items, correspondientes a dos experiencias
        broker.ui.push("crossmenu", segExp, terExp)
    }

    Rule cerrarPantalla {
        broker.ui.pop()
    }

    Rule cerrarPantallaModal {
        broker.ui.dismiss()
    }

    Rule mostrarDialogo {
        broker.ui.showAlert("Titulo", "Esta es la descripcion")
    }

    Rule fetchDataAndStoreOnCloud {
        broker.ui.showLoading() //prevent user interacts with Experience and show an activity indicator
        Array rspData = service.longFetch.call()
        for rsp in rspData { //some processing with rsp
            broker.cloudStorage.save(rsp)
        }
        broker.ui.hideLoading() 
    }
}