Объект App в Power Apps

Применимо к: приложениям на основе холста приложениям на основе модели

Предоставляет сведения о работающем в настоящее время приложении и позволяет управлять его поведением.

Описание

Как элемент управления, объект App предоставляет свойства, которые определяют, какой экран отображается, и которые предлагают пользователю сохранить изменения, чтобы они не были потеряны. Каждое приложение имеет объект App.

Вы можете написать формулы для некоторых свойств объекта App. Вверху панели Представление в виде дерева выберите объект App, как вы выбираете любой другой элемент управления или экран. Просмотрите и отредактируйте одно из свойств объекта, выбрав его в раскрывающемся списке слева от панели формул.

Объект App на панели представления в виде дерева.

Свойство ActiveScreen

Свойство ActiveScreen идентифицирует экран, который отображается.

Это свойство возвращает объект экрана. Используйте его для ссылки на свойства отображаемого в данный момент экрана, например имя с формулой App.ActiveScreen.Name. Вы также можете сравнить это свойство с другим объектом экрана, например, с помощью формулы сравнения App.ActiveScreen = Screen2, чтобы проверить, является ли Screen2 текущим отображаемым экраном.

Используйте функцию Back или Navigate для изменения отображаемого экрана.

Свойство BackEnabled

Свойство BackEnabled изменяет реакцию приложения на жест возврата устройства (проведение пальцем по экрану или использование аппаратной кнопки "Назад" на устройствах Android, проведение пальцем по экрану слева на устройствах iOS) при работе в мобильном приложении Power Apps. Если этот параметр включен, жест возврата устройства позволяет вернуться к экрану, который отображался до этого, что аналогично действию кнопки Назад. Если этот параметр отключен, жест возврата устройства возвращает пользователя к списку приложений.

Свойства ConfirmExit

Никто не хочет терять несохраненные изменения. Используйте свойства ConfirmExit и ConfirmExitMessage, чтобы предупредить пользователя, прежде чем он закроет ваше приложение.

Заметка

  • ConfirmExit не работает в приложениях, которые встроены, например, в Power BI и SharePoint.
  • В настоящее время эти свойства могут ссылаться на элементы управления только на первом экране, если включена предварительная верссия функции Отложенная загрузка (что задано по умолчанию для новых приложений). Если ссылки сделаны, Power Apps Studio не показывает ошибку, но итоговое опубликованное приложение не открывается в Power Apps Mobile или браузере. Мы активно работаем над снятием этого ограничения. А пока можно выключить Отложенная загрузка в Настройки>Предстоящие функцииПредварительная версия).

ConfirmExit

ConfirmExit является логическим свойством, которое, когда true, открывает диалоговое окно подтверждения перед закрытием приложения. По умолчанию это свойство имеет значение false, и никакое диалоговое окно не появляется.

В ситуациях, когда у пользователя могут быть несохраненные изменения в приложении, используйте это свойство, чтобы отобразить диалоговое окно подтверждения перед выходом из приложения. Используйте формулу, которая может проверять переменные и свойства элементов управления (например, свойство Unsaved элемента управления Edit form (Форма редактирования)).

Диалоговое окно подтверждения появляется в любой ситуации, когда данные могут быть потеряны, как в следующих примерах:

  • Запуск функции Exit.
  • Если приложение работает в браузере:
    • Закрытие браузера или вкладки браузера, в которой запущено приложение.
    • Выбор кнопки "Назад" браузера.
    • Выполнение функции Launch с LaunchTarget в Self.
  • Если приложение работает в Power Apps Mobile (iOS или Android):
    • Смахивание, чтобы переключиться на другое приложение в Power Apps Mobile.
    • Выбор кнопки "Назад" на устройстве Android.
    • Выполнение функции Launch для запуска другого приложения на основе холста.

Точный вид диалогового окна подтверждения может отличаться в зависимости от устройства и версии Power Apps.

Диалоговое окно подтверждения не появляется в Power Apps Studio.

ConfirmExitMessage

По умолчанию в диалоговом окне подтверждения отображается общее сообщение, например "У вас могут быть несохраненные изменения." на языке пользователя.

Используйте ConfirmExitMessage, чтобы предоставить пользовательское сообщение в диалоговом окне подтверждения. Если это свойство пусто, используется значение по умолчанию. Пользовательские сообщения усекаются по мере необходимости, чтобы поместиться в диалоговом окне подтверждения, поэтому сообщение не должно быть длиннее нескольких строк.

В браузере может появиться диалоговое окно подтверждения с общим сообщением из браузера.

Заметка

Объект приложения имеет еще два свойства OnMessage и BackEnabled, которые являются экспериментальными. Эти свойства в конечном итоге будут удалены из объекта приложения. Мы рекомендуем не использовать эти свойства в рабочей среде.

Пример

  1. Создайте приложение, которое содержит два элемента управления формы, AccountForm и ContactForm.

  2. Установите для свойства ConfirmExit объекта App следующее выражение:

    AccountForm.Unsaved Or ContactForm.Unsaved
    

    Это диалоговое окно появляется, если пользователь изменяет данные в любой форме, а затем пытается закрыть приложение, не сохраняя эти изменения.

    Универсальное диалоговое окно запроса подтверждения.

  3. Установите для свойства ConfirmExitMessage объекта App следующую формулу:

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

    Это диалоговое окно появляется, если пользователь изменяет данные в форме Организация, а затем пытается закрыть приложение, не сохраняя эти изменения.

    Диалоговое окно подтверждения для конкретной формы.

Настройка ключа инструментирования для Application Insights

Чтобы экспортировать журналы приложений, созданные системой, в Application Insights, вам необходимо настроить ключ инструментирования для вашего приложения на основе холста.

  1. Откройте приложение для редактирования в Power Apps Stuido.
  2. Выберите объект Приложение из представления дерева в левой навигации.
  3. Введите ключ инструментирования на панели свойств.

Если данные не отправляются в App Insights, обратитесь к своему администратору Power Platform и проверьте, не отключена ли функция App Insights на уровне клиента.

Свойство формул

Используйте именованные формулы в свойстве Формулы, чтобы определить формулу, которую можно повторно использовать в приложении.

В Power Apps свойства элементов управления определяются формулами. Например, чтобы установить согласованный цвет фона для всего приложения, вы можете установить свойство Заливка для каждого равным общей формуле:

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

С таким количеством мест, где может появиться эта формула, становится утомительным и подверженным ошибкам обновлять их все, если требуется изменение. Вместо этого вы можете создать глобальную переменную OnStart, чтобы установить цвет один раз, а затем повторно использовать значение во всем приложении:

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

Хотя этот метод лучше, он также зависит от выполнения OnStart до того, как будет задано значение BGColor. BGColor также могут быть изменено в каком-то уголке приложения, о котором разработчик не знает, изменение, внесенное кем-то другим, и это может быть трудно отследить.

Именованные формулы предоставляют альтернативу. Так же, как мы обычно пишем свойство-элемента-управления = выражение, мы можем вместо этого написать имя = выражение, а затем повторно использовать имя во всем нашем приложении, чтобы заменить выражение. Определения этих формул даны в свойстве Формулы:

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

К преимуществам использования именованных формул относятся:

  • Значение формулы всегда доступно. Тут нет временной зависимости, нет события OnStart, которое должно выполняться первым, прежде чем значение будет установлено, и нет времени, когда значение формулы будет неправильным. Именованные формулы могут ссылаться друг на друга в любом порядке, если они не создают циклическую ссылку. Их можно вычислять параллельно.
  • Значение формулы всегда актуально. Формула может выполнять вычисления, зависящие от свойств элемента управления или записей базы данных, и по мере их изменения значение формулы автоматически обновляется. Вам не нужно вручную обновлять значение, как в случае с переменной. И формулы пересчитываются только при необходимости.
  • Определение формулы неизменно. Определение в Формулы является единственным источником достоверной информации, и значение нельзя изменить где-либо еще в приложении. С переменными возможно, что какой-то код неожиданно изменит значение, но это невозможно с именованными формулами.
  • Вычисление формулы можно отложить. Поскольку это значение неизменно, его всегда можно вычислить при необходимости, а это означает, что его не нужно вычислять до тех пор, пока оно не понадобится. Значения формулы, которые не используются до отображения экрана2 приложения, не нужно рассчитывать до тех пор, пока не будет отображаться экран2. Откладывание этой работы может сократить время загрузки приложения. Именованные формулы являются декларативными и предоставляют системе возможность оптимизировать способ и время их вычисления.
  • Именованные формулы — это концепция Excel. Power Fx по возможности использует концепции Excel, поскольку многие люди хорошо знают Excel. Именованные формулы эквивалентны именованным ячейкам и именованным формулам в Excel, управляемым с помощью диспетчера имен. Они пересчитываются автоматически, как электронные таблицы, точно так же, как и свойства элементов управления.

Именованные формулы определяются одна за другой в свойстве Формулы, каждая из которых заканчивается точкой с запятой. Тип формулы выводится из типов выражения, которое основано на типах элементов в выражении и на том, как они используются вместе. Например, эти именованные формулы извлекают полезную информацию о текущем пользователе из 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' );

Если формулу для UserTitle необходимо обновить, это можно легко сделать в этом одном месте. Если UserPhone не нужен в приложении, то эти обращения к таблице Пользователи в Dataverse не делаются. Нет штрафа за включение определения формулы, которая не используется.

Некоторые ограничения именованных формул:

  • Они не могут использовать функции поведения или иным образом вызывать побочные эффекты в приложении.
  • Они не могут создать циклическую ссылку. Наличие a = b; и b = a; в одном и том же приложении не допускается.

Свойство OnError

Используйте OnError, чтобы принять меры после обнаружения ошибки. Это предоставляет глобальную возможность перехватить баннер ошибки до того, как он будет показан конечному пользователю. Его также можно использовать для регистрации ошибок с помощью функции Trace или записать в базу данных или веб-службу.

Результат каждого вычисления формулы проверяется на наличие ошибки. Если это ошибка, OnError будет вычисляться с теми же переменными области FirstError и AllErrors, которые присутствовали бы, если бы вся формула была заключена в функции IfError.

Если OnError пустое, отображается баннер ошибки по умолчанию с FirstError.Message ошибки. Определение формулы OnError переопределяет это поведение, позволяя создателю обрабатывать сообщения об ошибках по своему усмотрению. Поведение по умолчанию можно запросить в OnError путем повторной выдачи ошибки с функцией Error. Это полезно, если некоторые ошибки должны быть отфильтрованы или обработаны другим способом, а другие должны быть пропущены.

OnError не может заменить ошибку в расчетах так, как это может IfError. В тот момент, когда вызывается OnError, ошибка уже произошла, и она уже была обработана посредством вычислений по формуле. *OnError* контролирует только сообщения об ошибках.

Формулы OnError вычисляются одновременно, и возможно, что их вычисление может перекрываться обработкой других ошибок. Например, если вы установите глобальную переменную в верхней части OnError и прочитаете ее позже в той же формуле, значение могло измениться. Используйте функцию With для создания именованного значения, которое является локальным для формулы.

Хотя каждая ошибка обрабатывается индивидуально в OnError, баннер ошибки по умолчанию может не отображаться для каждой ошибки отдельно. Чтобы избежать одновременного отображения слишком большого количества баннеров ошибок, одна и та же ошибка не будет вызывать новый баннер ошибки, если он был недавно показан.

Пример

Рассмотрим элемент управления Label и элемент управления Slider, которые связаны между собой формулой:

Label1.Text = 1/Slider1.Value

Элементы управления label и slider связаны формулой Label1.Text = 1/Slider1.Value.

Значение slider по умолчанию равно 50. Если значение slider становится 0, Label1 не покажет никакого значения, и будет показан баннер ошибки:

Значение элемента управления slider становится 0, что приводит к ошибке деления на ноль и баннеру ошибки.

Давайте посмотрим на то, что произошло, подробнее:

  1. Пользователь переместил ползунок влево и свойство Slide1.Value изменилось на 0.
  2. Label1.Text автоматически пересчитывается. Произошло деление на ноль, что привело к ошибке.
  3. В этой формуле нет IfError. Ошибка деления на ноль возвращается вычислением формулы.
  4. Label1.Text ничего не может показать для этой ошибки, поэтому он показывает пустое состояние.
  5. Вызывается OnError. Поскольку обработчик отсутствует, отображается стандартный баннер ошибки с информацией об ошибке.

При необходимости мы также можем изменить формулу на Label1.Text = IfError( 1/Slider1.Value, 0 ). Это не привело бы к ошибке или баннеру ошибки. Мы не можем изменить значение ошибки с OnError поскольку в этот момент ошибка уже произошла, вопрос только в том, как о ней будет сообщено.

Если мы добавим обработчик OnError, это не повлияет до шага 5, но может повлиять на то, как сообщается об ошибке:

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

Формула App.OnError настроена для создания трассировки.

При этом, с точки зрения пользователя приложения, не будет никакой ошибки. Но ошибка будет добавлена в трассировку монитора вместе с источником информации об ошибке из FirstError:

Значение элемента управления slider становится 0, что приводит к ошибке деления на ноль, но баннера ошибки нет.

Если мы также хотим, чтобы тот же баннер ошибки по умолчанию отображался в дополнение к трассировке, мы можем повторно сгенерировать ошибку с помощью функции Error после вызова Trace так же, как если бы это было, если Trace отсутствовала:

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

Свойство OnStart

Заметка

Использование свойства OnStart может вызвать проблемы с производительностью при загрузке приложения. Мы находимся в процессе создания альтернатив для двух основных причин использования свойства — кеширование данных и настройка глобальных переменных. Мы уже создали альтернативу для определения первого экрана, который будет отображаться с помощью Navigate. В зависимости от вашего контекста это свойство может быть отключено по умолчанию. Если вы его не видите, но вам нужно его использовать, проверьте расширенные настройки приложения, чтобы включить переключатель. Свойство OnVisible экрана также может быть использовано.

Свойство OnStart запускается, когда пользователь запускает приложение. Это свойство часто используется для выполнения следующих задач:

  • Извлечение и кэширование данных в коллекции с помощью функции Collect.
  • Настройка глобальных переменных с помощью функции Set.

Эта формула оценивается до появления первого экрана. Никакой экран не загружен, поэтому вы не можете установить переменные контекста с помощью функции UpdateContext. Тем не менее, вы можете передавать переменные контекста с помощью функции Navigate.

После того, как вы измените свойство OnStart, проверьте его, наведя указатель мыши на объект Приложение в области Представление в виде дерева, выбрав многоточие (...), а затем выбрав Выполнить OnStart. В отличие от того, когда приложение загружается впервые, существующие коллекции и переменные уже будут установлены. Чтобы начать с пустых коллекций, используйте функцию ClearCollect вместо функции Collect.

Контекстное меню элемента приложения для запуска OnStart

Заметка

  • Использование функции Navigate в свойстве OnStart устарело. Существующие приложения будут продолжать работать. В течение ограниченного времени вы все равно можете включить ее в настройках приложения (доступно в Поддержка прекращена). Однако, использование Navigate таким образом может привести к задержкам загрузки приложения, поскольку это заставляет систему завершить оценку OnStart перед отображением первого экрана. Вместо этого используйте свойство StartScreen для расчета первого отображаемого экрана.
  • Переключатель Поддержка прекращена будет отключен для приложений, созданных до марта 2021 г., в которые вы добавили Navigate в OnStart с марта 2021 г. по настоящее время. Когда вы редактируете такие приложения в Power Apps Studio, вы можете увидеть ошибку. Включите вышеупомянутый переключатель Поддержка прекращена, чтобы сбросить эту ошибку.

Свойство StartScreen

Заметка

Свойство StartScreen не будет отображаться в списке свойств, когда включен устаревший параметр Расширенная строка формул. Чтобы отключить Расширенную строку формул, перейдите в раздел Параметры>Предстоящие функции>Устарело> выключите Расширенная строка формул, когда вы хотите использовать свойство StartScreen.

Свойство StartScreen определяет, какой экран будет отображаться первым. Он оценивается один раз при загрузке приложения и возвращает экранный объект для отображения. По умолчанию это свойство будет пустым, и первым отображается первый экран в дереве Studio.

StartScreen — это свойство потока данных, которое не может содержать функции поведения. Доступны все функции потока данных, в частности, используйте эти функции и сигналы, чтобы определить, какой экран показывать первым:

  • Функция Param для чтения параметров, используемых для запуска приложения.
  • Функция User для чтения информации о текущем пользователе.
  • Функции LookUp, Filter, CountRows, Max и другие функции, считывающие из источника данных.
  • Любые вызовы API через соединитель, но будьте осторожны, чтобы он быстро вернулся.
  • Такие сигналы, как Подключение, Компас и Приложение.

Заметка

Глобальные переменные и коллекции, в том числе созданные в OnStart, недоступны в StartScreen. Существуют декларативные альтернативы для этого, которые находятся на подходе. Чтобы получить отзыв об этом ограничении, перейдите на форум сообщества Power Apps.

Если StartScreen возвращает ошибку, первый экран в дереве Studio будет отображаться, как если бы StartScreen не был установлен. Используйте функцию IfError для обнаружения ошибок и перенаправления на соответствующий экран ошибок.

После того, как вы измените свойство StartScreen в Studio, проверьте его, наведя указатель мыши на объект Приложение в области Представление в виде дерева, выбрав многоточие (...), а затем выбрав Перейти к StartScreen. Экран изменится, как если бы приложение было загружено.

Перейти к StartScreen

Примеры

Screen9

Указывает на то, что Screen9 должен отображаться первым при запуске приложения.

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

Проверяет, установлен ли параметр «admin-mode» пользователем, и использует его, чтобы решить, следует ли сначала отображать HomeScreen или AdminScreen.

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

Проверяет, является ли участник конференции сотрудником, и направляет его на нужный экран при запуске.

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

Направляет приложение на основе вызова API в ForestScreen или OceanScreen. Если API не работает по какой-либо причине, вместо этого используется ErrorScreen.

Свойство StudioVersion

Используйте свойство StudioVersion, чтобы отобразить или зарегистрировать версию Power Apps Studio, которая использовалась для публикации приложения. Это может быть полезно при отладке и для проверки того, что ваше приложение было переиздано с последней версией Power Apps Studio.

StudioVersion возвращается в виде текста. Формат текста может меняться со временем, и его следует рассматривать как единое целое; избегайте извлечения отдельных частей.