Objeto App en Power Apps

Proporciona información sobre la aplicación en ejecución y el control sobre el comportamiento de esta.

Descripción

Como un control, el objeto App proporciona propiedades que identifican qué pantalla se muestra y solicita al usuario que guarde los cambios para que no se pierdan. Cada aplicación tiene un objeto App.

Puede escribir fórmulas para algunas propiedades del objeto App. En la parte superior del panel Vista de árbol, seleccione el objeto App como lo haría con cualquier otro control o pantalla. Vea y edite una de las propiedades del objeto seleccionándola en la lista desplegable a la izquierda de la barra de fórmulas.

El objeto App en el panel de Vista de árbol.

Propiedad ActiveScreen

La propiedad ActiveScreen identifica la pantalla que se está mostrando.

Esta propiedad devuelve un objeto de la pantalla, que puede usar para hacer referencia a propiedades de la pantalla o comparar con otra pantalla para determinar qué pantalla se muestra. También puede usar la expresión App.ActiveScreen.Name para recuperar el nombre de la pantalla que se muestra.

Use la función Back o Navigate para cambiar la pantalla que se muestra.

Propiedades ConfirmExit

Nadie quiere perder los cambios no guardados. Utilice las propiedades ConfirmExit y ConfirmExitMessage para advertir al usuario antes de que cierre su aplicación.

Nota

  • ConfirmExit no funciona en aplicaciones integradas, por ejemplo, Power BI y SharePoint.
  • En la actualidad, estas propiedades pueden hacer referencia a controles solo en la primera pantalla si la función de vista previa Delayed load está habilitada (que es la opción predeterminada para las nuevas aplicaciones). Si se hacen referencias, Power Apps Studio no muestra un error, pero la aplicación publicada resultante no se abre en Power Apps Mobile o un navegador. Estamos trabajando activamente para eliminar esta limitación. Mientras tanto, puede desactivar Carga retrasada en Configuración > Próximas funciones (bajo Versión preliminar).

ConfirmExit

ConfirmExit es una propiedad booleana que, cuando es true, abre un cuadro de diálogo de confirmación antes de cerrar la aplicación. De forma predeterminada, esta propiedad es false, y no aparece ningún cuadro de diálogo.

Use esta propiedad para mostrar un cuadro de diálogo de confirmación si el usuario ha realizado cambios pero no los ha guardado. Use una fórmula que pueda verificar variables y controlar propiedades (por ejemplo, la propiedad Unsaved del control Edit form).

El cuadro de diálogo de confirmación aparece en cualquier situación en la que se puedan perder datos, como en estos ejemplos:

  • Ejecutando la función Exit.
  • Si la aplicación se ejecuta en un navegador:
    • Cerrando el explorador o la pestaña del explorador en la que se ejecuta la aplicación.
    • Seleccionando el botón de retroceso del explorador.
    • Ejecutando la función Launch con LaunchTarget de Self.
  • Si la aplicación se está ejecutando en Power Apps Mobile (iOS o Android):
    • Deslizando para cambiar a una aplicación diferente en Power Apps Mobile.
    • Seleccionando el botón de retroceso en un dispositivo Android.
    • Ejecutando la función Launch para lanzar otra aplicación de lienzo.

El aspecto exacto del cuadro de diálogo de confirmación puede variar entre dispositivos y versiones de Power Apps.

El cuadro de diálogo de confirmación no aparece en Power Apps Studio.

ConfirmExitMessage

De manera predeterminada, el cuadro de diálogo de confirmación muestra un mensaje genérico, como "Es posible que tenga cambios no guardados." en el idioma del usuario

Use ConfirmExitMessage para proporcionar un mensaje personalizado en el cuadro de diálogo de confirmación. Si esta propiedad es blank, se usa el valor predeterminado. Los mensajes personalizados se truncan según sea necesario para que quepan en el cuadro de diálogo de confirmación, por lo tanto, mantenga el mensaje en algunas líneas como máximo.

En un explorador, el cuadro de diálogo de confirmación puede aparecer con un mensaje genérico del explorador.

Nota

El objeto App tiene dos propiedades adicionales más OnMessage y que son propiedades BackEnabled experimentales y desaparecerán del objeto app en el futuro. Se recomienda no usar estas propiedades en el entorno de producción.

Ejemplo

  1. Cree una aplicación que contenga dos controles Form, AccountForm y ContactForm.

  2. Establezca la propiedad ConfirmExit del objeto App según esta expresión:

    AccountForm.Unsaved Or ContactForm.Unsaved
    

    Este cuadro de diálogo aparece si el usuario cambia los datos en cualquiera de los formularios y luego intenta cerrar la aplicación sin guardar esos cambios.

    Cuadro de diálogo de confirmación genérica.

  3. Establezca la propiedad ConfirmExitMessage del objeto App según esta fórmula:

    If( AccountsForm.Unsaved,
        "Accounts form has unsaved changes.",
        "Contacts form has unsaved changes."
    )
    

    Este cuadro de diálogo aparece si el usuario cambia los datos en el formulario Cuenta y luego intenta cerrar la aplicación sin guardar esos cambios.

    Cuadro de diálogo de confirmación específico del formulario.

Propiedad OnError

Nota

Use OnError para tomar medidas después de que se haya detectado un error. Brinda una oportunidad global para interceptar un mensaje de error antes de que se muestre al usuario final. También se puede utilizar para registrar un error con la función Trace o escribir en una base de datos o servicio web.

El resultado de cada evaluación de fórmula se comprueba en busca de un error. Si es un error, OnError será evaluado con las mismas variables de ámbito FirstError y AllErrors que habrían estado presentes si toda la fórmula estuviera envuelta en una función IfError.

Si OnError está vacía, se muestra un banner de error predeterminado con el FirstError.Message del error Definir una fórmula OnError anula este comportamiento, lo que permite al creador manejar el informe de errores como mejor le parezca. El comportamiento por defecto se puede solicitar en OnError volviendo a lanzar el error con la función Error. Esto es útil si algunos errores deben filtrarse o manejarse de una manera diferente, mientras que otros deben pasarse.

OnError no puede reemplazar un error en los cálculos de la manera que IfError puede. En el punto que OnError se invoca, el error ya ocurrió y ya se procesó a través de cálculos de fórmula. *OnError* controla solo el informe de errores.

OnError las fórmulas se evalúan simultáneamente y es posible que su evaluación se superponga con el procesamiento de otros errores. Por ejemplo, si establece una variable global en la parte superior de un OnError y lo lee más tarde en la misma fórmula, el valor puede haber cambiado. Use la función With para crear un valor con nombre que sea local a la fórmula.

Aunque cada error es procesado individualmente por OnError, es posible que el banner de error predeterminado no aparezca para cada error individualmente. Para evitar que se muestren demasiados mensajes de error al mismo tiempo, el mismo error no activará un nuevo mensaje de error si se ha mostrado recientemente.

Ejemplo

Considere un control Label y Slider que estén unidos a través de la fórmula:

Label1.Text = 1/Slider1.Value

Controles Label y Slider enlazados a través de la fórmula Label1.Text = 1/Slider1.Value.

El valor predeterminado del control deslizante es 50. Si el control deslizante se mueve a 0, Label1 no mostrará ningún valor y se mostrará un mensaje de error:

El control Slider se movió a 0, lo que resultó en un error de división por cero y un banner de error.

Veamos lo que sucedió en detalle:

  1. El usuario movió la diapositiva a la izquierda y la propiedad Slide1.Value cambió a 0.
  2. Label1.Text fue reevaluado automáticamente. Ocurrió una división por cero, generando un error.
  3. No hay IfError en esta fórmula. La evaluación de la fórmula devuelve el error de división por cero.
  4. Label1.Texto no puede mostrar nada para este error, por lo que muestra un estado en blanco.
  5. OnError es invocado. Dado que no hay un controlador, el banner de error estándar se muestra con información de error.

Si es necesario, también podríamos modificar la fórmula para Label1.Text = IfError( 1/Slider1.Value, 0 ). Esto no daría como resultado un error o un banner de error. No podemos cambiar el valor de un error de OnError como en ese punto el error ya ha ocurrido, solo es cuestión de cómo se informará.

Si añadimos un controlador OnError, no tendrá impacto antes del paso 5, pero puede afectar la forma en que se informa el error:

Trace( $"Error {FirstError.Message} in {FirstError.Source}" )

Conjunto de fórmulas App.OnError para generar un seguimiento.

Con esto en su lugar, desde la perspectiva del usuario de la aplicación, no habrá ningún error. Pero el error se agregará al seguimiento del supervisor, completo con la fuente de la información del error de FirstError:

El control Slider se movió a 0, lo que resultó en un error de división por cero, pero no un banner de error.

Si también quisiéramos que se mostrara el mismo mensaje de error predeterminado además del seguimiento, podemos volver a generar el error con la función Error después de la llamada a Trace tal como lo hizo si Trace no estaba ahí:

Trace( $"Error {FirstError.Message} in {FirstError.Source}" );
Error( FirstError )

Propiedad OnStart

Nota

El uso de la propiedad OnStart puede causar problemas de rendimiento al cargar una aplicación. Estamos en el proceso de crear alternativas por las dos razones principales para usar la propiedad—almacenamiento en caché de datos y configuración de variables globales. Ya hemos creado una alternativa para definir la primera pantalla que se mostrará con Navigate. Dependiendo de su contexto, esta propiedad puede estar deshabilitada de forma predeterminada. Si no lo ve y necesita usarlo, verifique la configuración avanzada de la aplicación para ver si hay un interruptor que lo habilite. La propiedad OnVisible de una pantalla también se puede utilizar.

La propiedad OnStart se ejecuta cuando el usuario inicia la aplicación. Esta propiedad se usa a menudo para realizar las siguientes tareas:

  • Recupere y almacene datos en colecciones mediante el uso de la función Collect.
  • Establezca variables globales mediante la función Set.

Esta fórmula se evalúa antes de que aparezca la primera pantalla. No se carga ninguna pantalla, por lo que no puede establecer variables de contexto con la función UpdateContext. Sin embargo, puede pasar variables de contexto con la función Navigate.

Después de cambiar la propiedad OnStart, pruébela colocando el cursor sobre el objeto Aplicación en el panel Vista de árbol, seleccionando puntos suspensivos (...), y luego seleccionando Ejecutar OnStart. A diferencia de cuando la aplicación se carga por primera vez, las colecciones existentes y las variables existentes ya estarán configuradas. Para comenzar con colecciones vacías, use la función ClearCollect en lugar de la función Collect.

Menú contextual de elemento App para Ejecutar OnStart

Nota

  • Usar la función Navigate en la propiedad OnStart ha sido retirada. Las aplicaciones existentes seguirán funcionando. Por tiempo limitado, aún puede habilitarlo en la configuración de la aplicación (disponible en Retirado). Sin embargo, usar Navegar de esta manera puede provocar retrasos en la carga de la aplicación, ya que obliga al sistema a completar la evaluación de OnStart antes de mostrar la primera pantalla. Use la propiedad StartScreen en su lugar para calcular la primera pantalla mostrada.
  • Retirado se desactivará para las aplicaciones creadas antes de marzo de 2021 donde agregó Navegar para OnStart entre marzo de 2021 y ahora. Cuando edita dichas aplicaciones en Power Apps Studio, es posible que vea un error. Active la opción mencionada anteriormente Retirada para borrar este error.

Propiedad StartScreen

Nota

La propiedad StartScreen no aparecerá en la lista de propiedades cuando la opción retirada Barra de fórmulas mejorada esté activada. Para desactivar Barra de fórmulas mejorada, vaya a Ajustes > Próximas características > Retirado > desactive el interruptor Barra de fórmulas mejorada cuando quieras usar la propiedad StartScreen.

La propiedad StartScreen determina qué pantalla se mostrará primero. Se evalúa una vez cuando se carga la aplicación y devuelve el objeto de pantalla que se mostrará. De forma predeterminada, esta propiedad estará vacía y la primera pantalla en la vista de árbol de Studio se mostrará primero.

StartScreen es una propiedad de flujo de datos que no puede contener funciones de comportamiento. Todas las funciones de flujo de datos están disponibles, en particular utilice estas funciones y señales para determinar qué pantalla mostrar primero:

  • Param función para leer los parámetros utilizados para iniciar la aplicación.
  • User función para leer información sobre el usuario actual.
  • LookUp, Filter, CountRows, Max y otras funciones que leen desde un origen de datos.
  • Cualquier API llama a través de un conector, pero tenga cuidado de que regrese rápidamente.
  • Señales como Conexión, Brújula, y Aplicación.

Nota

Colecciones y variables globales, incluidas las creadas en OnStart, no están disponibles en StartScreen. Hay alternativas declarativas para hacer esto que están en camino. Para obtener sus comentarios sobre esta restricción, vaya al Foro comunitario de Power Apps.

Si StartScreen devuelve un error, la primera pantalla en la vista de estructura de Studio se mostrará como si StartScreen no se había configurado. Use la función IfError para detectar cualquier error y redirigir a una pantalla de error adecuada.

Después de cambiar StartScreen en Studio, pruébela colocando el cursor sobre el objeto Aplicación en el panel Vista de árbol, seleccionando puntos suspensivos (...), y luego seleccionando Navegar a StartScreen. La pantalla cambiará como si se hubiera cargado la aplicación.

Navegar a StartScreen

Ejemplos

Screen9

Indica que Screen9 debe mostrarse primero cada vez que se inicia la aplicación.

If( Param( "admin-mode" ) = 1, HomeScreen, AdminScreen )

Comprueba si el usuario ha configurado el parámetro "modo de administración" y lo utiliza para decidir si la HomeScreen o la AdminScreen deben mostrarse primero.

If( LookUp( Attendees, User = User().Email ).Staff, StaffPortal, HomeScreen )

Comprueba si un asistente a una conferencia es un miembro del personal y lo dirige a la pantalla adecuada al inicio.

IfError( If( CustomConnector.APICall() = "Forest", 
             ForestScreen, 
             OceanScreen 
         ), 
         ErrorScreen 
)

Dirige la aplicación en función de una llamada a la API a ForestScreen o OceanScreen. Si la API falla por cualquier motivo, ErrorScreen se utiliza en su lugar.

Nota

¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)

La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).