Objeto App en Power Apps

Se aplica a: Aplicaciones de lienzo Aplicaciones basadas en modelos

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 pantalla. Úselo para hacer referencia a las propiedades de la pantalla que se muestra actualmente, como el nombre con la fórmula App.ActiveScreen.Name. También puede comparar esta propiedad con otro objeto de pantalla, como por ejemplo con la fórmula de comparación App.ActiveScreen = Screen2 para probar si Screen2 es la pantalla que se muestra actualmente.

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

Propiedad BackEnabled

La propiedad BackEnabled cambia la forma en que la aplicación responde al gesto de retroceso del dispositivo (deslice o use el botón de retroceso del hardware en dispositivos Android, deslice de izquierda a derecha en dispositivos iOS) cuando se ejecuta en Power Apps para dispositivos móviles. Cuando está habilitado, el gesto de retroceso del dispositivo regresa a la pantalla que se mostró más recientemente, que es similar a la fórmula Atrás. Cuando está deshabilitado, el gesto de retroceso del dispositivo devuelve al usuario a la lista de aplicaciones.

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.

En situaciones en las que el usuario pueda tener cambios no guardados en la aplicación, use esta propiedad para mostrar un cuadro de diálogo de confirmación antes de salir de la aplicación. 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 de la aplicación tiene dos propiedades más OnMessage y BackEnabled que son experimentales. Estas propiedades se eliminarán eventualmente del objeto de la aplicación. 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 de fórmulas

Use fórmulas con nombre, en la propiedad Fórmulas, para definir una fórmula que se puede reutilizar en toda su aplicación.

En Power Apps, las propiedades de control están controladas por fórmulas. Por ejemplo, para establecer el color de fondo de forma uniforme en una aplicación, puede establecer la propiedad Llenar para cada uno a una fórmula común:

Label1.Fill: ColorValue( Param( "BackgroundColor" ) )
Label2.Fill: ColorValue( Param( "BackgroundColor" ) )
Label3.Fill: ColorValue( Param( "BackgroundColor" ) )

Con tantos lugares donde puede aparecer esta fórmula, se vuelve tedioso y propenso a errores actualizarlos todos si se necesita un cambio. En su lugar, puede crear una variable global en OnStart para configurar el color una vez y luego reutilizar el valor en toda la aplicación:

App.OnStart: Set( BGColor, ColorValue( Param( "BackgroundColor" ) ) )
Label1.Fill: BGColor
Label2.Fill: BGColor
Label3.Fill: BGColor

Si bien este método es mejor, también depende de OnStart corriendo antes del valor para BGColor está establecido. BGColor también puede ser manipulado en algún rincón de la aplicación que el creador desconoce, un cambio realizado por otra persona, y que puede ser difícil de rastrear.

Las fórmulas con nombre proporcionan una alternativa. Tal como solemos escribir control-propiedad = expresión, en su lugar podemos escribir nombre = expresión y luego reutilizar nombre a lo largo de nuestra aplicación para reemplazar expresión. Las definiciones de estas fórmulas se realizan en la propiedad Fórmulas:

App.Formulas: BGColor = ColorValue( Param( "BackgroundColor" ) );
Label1.Fill: BGColor
Label2.Fill: BGColor
Label3.Fill: BGColor

Las ventajas de usar fórmulas con nombre incluyen:

  • El valor de la fórmula siempre está disponible. No hay dependencia de tiempo, no OnStart que debe ejecutarse primero antes de que se establezca el valor, ningún momento en el que el valor de la fórmula sea incorrecto. Las fórmulas con nombre pueden hacer referencia entre sí en cualquier orden, siempre que no creen una referencia circular. Se pueden calcular en paralelo.
  • El valor de la fórmula siempre está actualizado. La fórmula puede realizar un cálculo que depende de las propiedades del control o de los registros de la base de datos y, a medida que cambian, el valor de la fórmula se actualiza automáticamente. No necesita actualizar manualmente el valor como lo hace con una variable. Y las fórmulas solo se vuelven a calcular cuando es necesario.
  • La definición de la fórmula es inmutable. La definición de Fórmulas es la única fuente de verdad y el valor no se puede cambiar en ningún otro lugar de la aplicación. Con las variables, es posible que algún código cambie inesperadamente un valor, pero esto no es posible con las fórmulas con nombre.
  • El cálculo de la fórmula se puede diferir. Debido a que su valor es inmutable, siempre se puede calcular cuando sea necesario, lo que significa que no es necesario calcularlo hasta que sea necesario. Valores de fórmula que no se utilizan hasta screen2 de una aplicación que se muestra no es necesario calcular hasta que screen2 esté visible. Aplazar este trabajo puede mejorar el tiempo de carga de la aplicación. Las fórmulas con nombre son declarativas y brindan oportunidades para que el sistema optimice cómo y cuándo se calculan.
  • Las fórmulas con nombre son un concepto de Excel. Power Fx utiliza conceptos de Excel siempre que sea posible, ya que muchas personas conocen bien Excel. Las fórmulas con nombre son el equivalente de las celdas con nombre y las fórmulas con nombre en Excel, administradas con el Administrador de nombres. Se vuelven a calcular automáticamente como una hoja de cálculo, al igual que lo hacen las propiedades de control.

Las fórmulas nombradas se definen, una tras otra en la propiedad Fórmulas, cada uno terminando con un punto y coma. El tipo de la fórmula se deduce de los tipos de la expresión, que se basa en los tipos de los elementos dentro de la expresión y cómo se usan juntos. Por ejemplo, estas fórmulas con nombre recuperan información útil sobre el usuario actual de Dataverse:

UserEmail = User().Email;
UserInfo = LookUp( Users, 'Primary Email' = User().Email );
UserTitle = UserInfo.Title;
UserPhone = Switch( UserInfo.'Preferred Phone', 
                    'Preferred Phone (Users)'.'Mobile Phone', UserInfo.'Mobile Phone',
                    UserInfo.'Main Phone' );

Si la fórmula de UserTitle necesita actualizarse, se puede hacer fácilmente en esta ubicación. Si UserPhone no es necesario en la aplicación, entonces no se realizan estas llamadas a la tabla Users de Dataverse. No hay penalización por incluir una definición de fórmula que no se usa.

Algunas limitaciones de las fórmulas con nombre:

  • No pueden usar funciones de comportamiento ni causar efectos secundarios dentro de la aplicación.
  • No pueden crear una referencia circular. Tener a = b; y b = a; en la misma aplicación no está permitido.

Propiedad OnError

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:

  • Función Param para leer los parámetros utilizados para iniciar la aplicación.
  • Función User 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.

Propiedad StudioVersion

Utilice la propiedad StudioVersion para mostrar o registrar la versión de Power Apps Studio que se utilizó para publicar una aplicación. Esto puede ser útil al depurar y para garantizar que su aplicación se haya vuelto a publicar con una versión reciente de Power Apps Studio.

StudioVersion se devuelve como texto. El formato del texto puede cambiar con el tiempo y debe tratarse como un todo; Evite extraer porciones individuales.