Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: приложениям Canvas
Получите сведения о текущем работающем приложении и управляйте поведением приложения.
Description
Как и элемент управления, объект App имеет свойства, определяющие, какой экран отображается и запрашивать сохранение изменений, чтобы не потерять их. Каждое приложение имеет объект App.
Напишите формулы для некоторых свойств объекта App . Вверху панели Представление в виде дерева выберите объект App, как вы выбираете любой другой элемент управления или экран. Чтобы просмотреть или изменить одно из свойств объекта, выберите его в раскрывающемся списке слева от строки формул.
В этой статье рассматриваются следующие свойства объекта App :
- ActiveScreen — экран, отображаемый в данный момент.
- BackEnabled — как приложение реагирует на жест обратной стороны устройства.
- ConfirmExit и ConfirmExitMessage — предупреждают пользователя перед закрытием приложения.
- Строка подключения — настройка ведения журнала Application Insights.
- Формулы — определяют именованные формулы, определяемые пользователем функции и пользовательские типы.
- OnError — глобально обрабатывает ошибки.
- OnStart — выполнение логики при запуске приложения.
- StartScreen — задайте экран, отображаемый сначала при загрузке приложения.
- StudioVersion — возвращает версию Power Apps Studio, опубликованную приложением.
Свойство ActiveScreen
Свойство ActiveScreen определяет экран, отображаемый в данный момент.
Это свойство возвращает объект экрана. Используйте его для ссылки на свойства текущего экрана, например имя с помощью формулы App.ActiveScreen.Name. Это свойство также можно сравнить с другим объектом экрана, например с формулой сравнения App.ActiveScreen = Screen2 , чтобы проверить, является ли Экран2 текущим.
Используйте функцию Back или Navigate , чтобы переключить отображаемый экран.
Свойство BackEnabled
Свойство BackEnabled изменяет способ реагирования приложения на жест обратного устройства (проводите пальцем или используйте кнопку "Назад" на устройствах Android или проводите пальцем влево на устройствах iOS) при запуске в Power Apps mobile. При включении жест обратного устройства возвращается на экран, который был недавно показан, который похож на формулу Back . При отключении жест обратного устройства принимает пользователя в список приложений.
Свойства ConfirmExit
Никто не хочет терять несохраненные изменения. Используйте свойства ConfirmExit и ConfirmExitMessage , чтобы предупредить пользователя перед закрытием приложения.
Note
- ConfirmExit не работает в приложениях, внедренных в Power BI и SharePoint.
- ConfirmExit не поддерживается на пользовательских страницах.
- Теперь эти свойства могут ссылаться на элементы управления только на первом экране, если включена функция предварительной версии отложенной загрузки (которая по умолчанию используется для новых приложений). Если вы ссылаетесь на другие экраны, Power Apps Studio не отображает ошибку, но опубликованное приложение не открывается в Power Apps Mobile или браузере. Microsoft работает над отменой этого ограничения. В то же время отключите задержку загрузки впредстоящих функциях>параметров(в разделе "Предварительная версия").
ConfirmExit
ConfirmExit — это логическое свойство, которое, когда значение true, открывает диалоговое окно подтверждения перед закрытием приложения. По умолчанию это свойство имеет значение false, и никакое диалоговое окно не появляется.
Если у пользователя могут быть несохраненные изменения в приложении, используйте это свойство для отображения диалогового окна подтверждения перед выходом из приложения. Используйте формулу, которая проверяет переменные и свойства элемента управления (например, свойство Unsaved элемента управления формы Edit ).
Диалоговое окно подтверждения отображается в любой ситуации, когда данные могут быть потеряны, например:
- Запустите функцию Exit .
- Если приложение выполняется в браузере:
- Закройте браузер или вкладку браузера, на которой выполняется приложение.
- Нажмите кнопку "Назад" браузера.
- Запустите функцию запуска с помощью LaunchTargetself.
- Если приложение работает в Power Apps Mobile (iOS или Android):
- Проводите пальцем, чтобы перейти к другому приложению в Power Apps Mobile.
- Нажмите кнопку "Назад" на устройстве Android.
- Запустите функцию запуска , чтобы запустить другое приложение холста.
Точное представление диалогового окна подтверждения может различаться на устройствах и версиях Power Apps.
Диалоговое окно подтверждения не отображается в Power Apps Studio.
ConfirmExitMessage
По умолчанию в диалоговом окне подтверждения отображается общее сообщение, например "У вас могут быть несохраненные изменения." на языке пользователя.
Используйте ConfirmExitMessage, чтобы предоставить пользовательское сообщение в диалоговом окне подтверждения. Если это свойство пусто, используется значение по умолчанию. Пользовательские сообщения усечены по мере необходимости в диалоговом окне подтверждения, поэтому не более нескольких строк.
В браузере диалоговое окно подтверждения может отображать универсальное сообщение из браузера.
Example
Установите для свойства ConfirmExit объекта App следующее выражение:
AccountForm.Unsaved Or ContactForm.UnsavedОткроется диалоговое окно, если пользователь изменяет данные в любой форме, а затем пытается закрыть приложение без сохранения этих изменений.
Установите для свойства ConfirmExitMessage объекта App следующую формулу:
If( AccountForm.Unsaved, "Accounts form has unsaved changes.", "Contacts form has unsaved changes." )В диалоговом окне отображается сообщение для конкретной формы, когда пользователь изменяет данные в любой форме, а затем пытается закрыть приложение без сохранения этих изменений.
Свойство строки подключения
Используйте свойство строки подключения для экспорта журналов приложений, созданных системой, в Application Insights.
Чтобы задать строка подключения, выполните следующие действия.
- Откройте ваше приложение для редактирования в Power Apps Studio.
- Выберите объект Приложение из представления дерева в левой навигации.
- Введите строку подключения в области свойств.
Если данные не отправляются в Application Insights, обратитесь к администратору Power Platform и проверьте, отключен ли Application Insights на уровне клиента.
Свойство формул
Используйте свойство Formulas для определения многократно используемой логики в приложении. Свойство Formulas поддерживает три конструкции:
- Именованные формулы — назначьте имя формуле и повторно используете значение в приложении.
- Определяемые пользователем функции — именованные формулы, которые принимают параметры и возвращают значение.
- Определяемые пользователем типы — именованные типы, которые можно использовать повторно в формулах и сигнатурах функций.
Именованные формулы
Используйте именованные формулы в свойстве "Формулы" , чтобы определить формулу, которую можно повторно использовать во всем приложении.
В Power Apps значение свойств элемента управления определяется формулами. Например, чтобы задать цвет фона согласованно в приложении, задайте свойству Fill для каждого элемента управления общую формулу:
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 также могут быть изменено в каком-то уголке приложения, о котором разработчик не знает, изменение, внесенное кем-то другим, и это может быть трудно отследить.
Именованные формулы предоставляют альтернативу. Так же, как обычно вы пишете свойство control-property = expression, вы можете вместо этого написать имя = выражение , а затем повторно использовать имя в приложении для замены выражения. Определите эти формулы в свойстве Formulas :
App.Formulas: BGColor = ColorValue( Param( "BackgroundColor" ) );
Label1.Fill: BGColor
Label2.Fill: BGColor
Label3.Fill: BGColor
К преимуществам использования именованных формул относятся:
- Значение формулы всегда доступно. Тут нет временной зависимости, нет события OnStart, которое должно выполняться первым, прежде чем значение будет установлено, и нет времени, когда значение формулы будет неправильным. Именованные формулы могут ссылаться друг на друга в любом порядке, если они не создают циклическую ссылку. Их можно вычислять параллельно.
- Значение формулы всегда актуально. Формула может выполнять вычисления, зависящие от свойств элемента управления или записей базы данных, и по мере их изменения значение формулы автоматически обновляется. Вам не нужно вручную обновлять значение, как в случае с переменной. И формулы пересчитываются только при необходимости.
- Определение формулы неизменно. Определение в Формулы является единственным источником достоверной информации, и значение нельзя изменить где-либо еще в приложении. При использовании переменных некоторые коды могут неожиданно изменить значение, но эта сложная ситуация невозможна с именованной формулой.
- Вычисление формулы можно отложить. Поскольку это значение неизменно, его всегда можно вычислить при необходимости, а это означает, что его не нужно вычислять до тех пор, пока оно не понадобится. Значения формулы, которые не используются до отображения экрана2 приложения, не нужно рассчитывать до тех пор, пока не будет отображаться экран2. Откладывание этой работы может сократить время загрузки приложения. Именованные формулы являются декларативными и предоставляют системе возможность оптимизировать способ и время их вычисления.
- Именованные формулы — это концепция Excel. Power Fx по возможности использует концепции Excel, поскольку многие люди хорошо знают Excel. Именованные формулы эквивалентны именованным ячейкам и именованным формулам в Excel, управляемым с помощью диспетчера имен. Они пересчитываются автоматически, как это делают ячейки электронной таблицы и свойства элемента управления.
Определите именованные формулы друг за другом в свойстве Formulas , каждый из которых заканчивается точкой с запятой. Тип формулы определяется типами элементов в формуле и тем, как они используются вместе. Например, эти именованные формулы извлекают полезную информацию о текущем пользователе из 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; в одном и том же приложении не допускается.
Функции, определённые пользователем
Power Fx включает длинный список встроенных функций, таких как If, Text и Set. С помощью определяемых пользователем функций можно написать собственные функции, которые принимают параметры и возвращают значение, как и встроенные функции. Думайте о определяемых пользователем функциях как расширение именованных формул, которые добавляют параметры и поддерживают формулы поведения.
Например, можно определить именованную формулу, которая возвращает художественную литературу из библиотеки:
Library = [ { Title: "The Hobbit", Author: "J. R. R. Tolkien", Genre: "Fiction" },
{ Title: "Oxford English Dictionary", Author: "Oxford University", Genre: "Reference" } ];
LibraryFiction = Filter( Library, Genre = "Fiction" );
Без параметров необходимо определить отдельные именованные формулы для каждого жанра. Но вместо этого параметризируйте именованную формулу:
LibraryType := Type( [ { Title: Text, Author: Text, Genre: Text } ] );
LibraryGenre( SelectedGenre: Text ): LibraryType = Filter( Library, Genre = SelectedGenre );
Теперь можно вызвать или отфильтровать LibraryGenre( "Fiction" )LibraryGenre( "Reference" )другие жанры с помощью одной определяемой пользователем функции.
Синтаксис:
FunctionName( [ ParameterName1: ParameterType1 [ , ParameterName2: ParameterType2 ... ] ] : ReturnType = ;
- FunctionName — обязательный параметр. Имя определяемой пользователем функции.
- ParameterNames – Необязательно. Имя параметра функции.
- ParameterType — необязательный параметр. Имя типа, встроенного имени типа данных, имени источника данных или типа, определенного с помощью функции Type .
- ReturnType — обязательный аргумент. Тип возвращаемого значения функции.
- Формула – Обязательно. Формула, которая вычисляет значение функции на основе параметров.
Необходимо ввести каждый параметр и выходные данные определяемой пользователем функции. В этом примере SelectedGenre: Text определяет первый параметр функции для типа Text и SelectedGenre имя параметра, используемого в тексте для операции фильтра. Поддерживаемые имена типов см. в разделе Типы данных.
Функция Type используется для создания агрегатного типа для библиотеки, чтобы можно было вернуть таблицу книг из функции.
Вы определяете LibraryType как таблицу с множественной таблицей типов записей. Если вы хотите передать одну книгу в функцию, можно извлечь тип записи для этой таблицы с помощью функции RecordOf:
BookType := Type( RecordOf( LibraryType ) );
IsGenre( Book: BookType, SelectedGenre: Text ): Boolean = (Book.Genre = SelectedGenre);
Сопоставление записей для параметров функции более строгое, чем в других частях Power Fx. Поля значения записи должны быть правильным подмножеством определения типа и не могут содержать дополнительные поля. Например, IsGenre( { Title: "My Book", Published: 2001 }, "Fiction" ) приводит к ошибке.
Рекурсия пока не поддерживается определяемыми пользователем функциями.
Поведения определяемых пользователем функций
Именованные формулы и большинство пользовательских функций не поддерживают функции поведения с побочными эффектами, такие как Set или Notify. Как правило, не обновляйте состояние, если вы можете. Вместо этого следует полагаться на функциональные шаблоны программирования и разрешить Power Fx пересчитывать формулы по мере необходимости автоматически. Но бывают случаи, когда это неизбежно. Чтобы включить логику поведения в пользовательскую функцию, заключите тело в фигурные скобки:
Spend( Amount: Number ) : Void = {
If( Amount > Savings,
Error( $"{Amount} is more than available savings" ),
Set( Savings, Savings - Amount );
Set( Spent, Spent + Amount)
);
}
Теперь можно вызвать Spend( 12 ) , чтобы проверить наличие 12 в вашей экономии, и если да, дебет его на 12 и добавить 12 в переменную "Потрачено". Тип возвращаемого значения этой функции — Void, так как она не возвращает значение.
Синтаксис определяемой пользователем функции поведения выглядит следующим образом:
FunctionName( [ ParameterName1: ParameterType1 [ , ParameterName2: ParameterType2 ... ] ] : ReturnType = { Formula1 [ ; Формула2 ... ] };
- FunctionName — обязательный параметр. Имя определяемой пользователем функции.
- ParameterNames – Необязательно. Имя параметра функции.
- ParameterType — необязательный параметр. Имя типа, имя встроенного типа данных, имя источника данных или тип, определенный с помощью функции Type.
- ReturnType — обязательный аргумент. Тип возвращаемого значения функции. Используйте Void , если функция не возвращает значение.
- Формулы – Обязательно. Формула, которая вычисляет значение функции на основе параметров.
Как и в случае со всеми формулами Power Fx, выполнение не заканчивается при обнаружении ошибки. После вызова функции Error функцияIf запрещает изменения в экономии и затратах. Функцию IfError также можно использовать для предотвращения дальнейшего выполнения после ошибки. Несмотря на то, что формула возвращает значение Void, она все равно может вернуть ошибку при возникновении проблемы.
Пользовательские типы
Используйте именованные формулы с функцией Type для создания пользовательских типов. Используйте := вместо = для определения пользовательского типа, например Book := Type( { Title: Text, Author: Text } ). Дополнительные сведения и примеры см. в разделе Функция Type.
Свойство OnError
Используйте OnError, чтобы принять меры при возникновении ошибки в любом месте приложения. Он предоставляет глобальную возможность перехвата баннера об ошибке перед отображением для конечного пользователя. Его также можно использовать для регистрации ошибки с помощью функции трассировки или записи в базу данных или веб-службу.
В приложениях на основе холста результат каждого вычисления формулы проверяется на наличие ошибки. Если возникла ошибка, onError вычисляется с теми же переменными области FirstError и AllErrors, которые приложение использует, если вся формула упакована в функцию IfError.
Если OnError пуст, по умолчанию отображается баннер ошибки FirstError.Message ошибки. Определение формулы OnError переопределяет это поведение, поэтому производитель может обрабатывать отчеты об ошибках по мере необходимости. Поведение по умолчанию в OnError можно запросить, повторно выполнив функцию Error. Используйте подход повторного увеличения, если вы хотите отфильтровать или обрабатывать некоторые ошибки по-другому, но позвольте другим пройти через него.
OnError не может заменить ошибку в расчетах так, как это может IfError. Если вызывается OnError , ошибка уже произошла и уже обрабатывается с помощью вычислений формул, таких как IfError; OnError управляет только отчетами об ошибках.
Формулы OnError оцениваются параллельно, и возможно, что их оценка может перекрываться обработкой других ошибок. Например, если вы задаете глобальную переменную в верхней части OnError и считываете ее позже в той же формуле, это значение может измениться. Используйте функцию With для создания именованного значения, которое является локальным для формулы.
Хотя OnError обрабатывает каждую ошибку по отдельности, баннер ошибок по умолчанию может не отображаться для каждой ошибки по отдельности. Чтобы избежать слишком большого количества баннеров ошибок, отображаемых одновременно, один и тот же баннер ошибок не отображается снова, если он был недавно показан.
Example
Рассмотрим элемент управления Label и элемент управления Slider, которые связаны между собой формулой:
Label1.Text = 1/Slider1.Value
Значение slider по умолчанию равно 50. При перемещении ползунка на 0 метка1 не отображается значения, а баннер об ошибке отображается:
Давайте рассмотрим, что происходит подробно:
- Ползунок перемещается слева, а свойство Slider1.Value изменяется на 0.
- Label1.Text автоматически переоценивает. Деление по нулю возникает, создавая ошибку.
- В этой формуле нет IfError. Ошибка деления на ноль возвращается вычислением формулы.
- Label1.Text ничего не может показать для этой ошибки, поэтому он показывает пустое состояние.
- Вызывается OnError. Поскольку обработчик отсутствует, отображается стандартный баннер ошибки с информацией об ошибке.
При необходимости можно также изменить формулу Label1.Text = IfError( 1/Slider1.Value, 0 )на . Использование IfError означает, что не существует баннера об ошибке или ошибке. Невозможно изменить значение ошибки из OnError , так как эта ошибка уже произошла. OnError управляет только тем, как она сообщается.
Если вы добавите обработчик OnError , он не влияет на шаги до шага 5, но он изменяет способ сообщения об ошибке:
Trace( $"Error {FirstError.Message} in {FirstError.Source}" )
При использовании этого обработчика OnError пользователь приложения не видит никаких ошибок. Но эта ошибка добавляется в трассировку монитора, включая источник сведений об ошибке из FirstError:
Если вы также хотите отобразить баннер ошибок по умолчанию вместе с трассировкой, повторно запустите ошибку с помощью функции error после вызова трассировки , как если бы трассировка не была:
Trace( $"Error {FirstError.Message} in {FirstError.Source}" );
Error( FirstError )
Свойство OnStart
Note
Использование свойства OnStart может вызвать проблемы с производительностью при загрузке приложения. Прежде чем добавлять логику в OnStart, рассмотрите следующие варианты:
- Чтобы кэшировать данные или настроить глобальные переменные, используйте именованную формулу в свойстве Formulas , где это возможно.
- Чтобы задать первый экран для отображения, используйте свойство StartScreen вместо Навигации.
- Чтобы выполнить логику при отображении определенного экрана, используйте свойство OnVisible экрана.
В зависимости от контекста свойство OnStart может быть отключено по умолчанию. Если вы не видите его и не хотите использовать его, проверьте дополнительные параметры приложения, чтобы включить его.
Если правило OnStart неблокировано (по умолчанию), OnStart выполняется одновременно с другими правилами приложения. В результате:
- Переменные, инициализированные в OnStart , могут быть не полностью инициализированы, когда другие правила приложения считывают их.
- Экран может отображаться и становиться интерактивным до завершения работы App.OnStart или Screen.OnVisible , особенно если эти функции занимают много времени.
Свойство OnStart запускается, когда пользователь запускает приложение. Используйте это свойство для:
- Получение и кэширование данных в коллекциях с помощью функции "Сбор ".
- Настройка глобальных переменных с помощью функции Set.
Эта формула выполняется до появления первого экрана. Никакой экран не загружен, поэтому вы не можете установить переменные контекста с помощью функции UpdateContext. Но можно передать переменные контекста с помощью функции Навигации .
После изменения свойства OnStart проверьте его, наведите указатель мыши на объект App в области представления "Дерево ", выбрав многоточие (...), а затем нажмите кнопку Run OnStart. В отличие от того, когда приложение загружается в первый раз, существующие коллекции и переменные уже заданы. Чтобы начать с пустых коллекций, используйте функцию ClearCollect вместо функции Collect.
Note
- Использование функции Навигации в свойстве OnStart прекращено. Существующие приложения по-прежнему работают. В течение ограниченного времени его можно включить в параметрах приложения (в разделе " Отставлено"). Но использование Navigate таким образом может привести к задержкам загрузки приложения, так как система завершит работу OnStart перед отображением первого экрана. Вместо этого используйте свойство StartScreen , чтобы задать первый экран.
- Снятый параметр отключен для приложений, созданных до марта 2021 г., где вы добавили переход к OnStart в период с марта 2021 г. и сейчас. При редактировании этих приложений в Power Apps Studio возникает ошибка. Включите устаревший переключатель, чтобы сбросить эту ошибку.
Свойство StartScreen
Свойство StartScreen задает, на каком экране отображается первый экран. Power Apps вычисляет это свойство один раз, когда приложение загружает и возвращает объект экрана для отображения. По умолчанию это свойство пусто, а первый экран в представлении дерева Студии отображается сначала.
StartScreen — это свойство потока данных, которое не может содержать функции поведения. Доступны все функции потока данных. Используйте эти функции и сигналы, чтобы решить, какой экран будет отображаться сначала:
- Функция Param для чтения параметров, используемых для запуска приложения.
- Функция User для чтения информации о текущем пользователе.
- Функции LookUp, Filter, CountRows, Max и другие функции, считывающие из источника данных.
- Вызовы API через соединитель. Убедитесь, что вызов возвращается быстро.
- Такие сигналы, как Подключение, Компас и Приложение.
Note
Глобальные переменные и коллекции, включая созданные в OnStart, недоступны в StartScreen. Доступны именованные формулы, которые часто являются лучшей альтернативой для повторного использования формул в приложении.
Если StartScreen возвращает ошибку, первый экран в представлении дерева Студии отображается так, как если бы не задан начальный экран . Используйте функцию IfError для перехвата ошибок и перенаправления на экран ошибки.
После изменения начального экрана в Студии проверьте его, наведите указатель мыши на объект приложения в области представления "Дерево", выбрав многоточие (...), а затем нажмите кнопку "Перейти к начальной экран". Экран изменяется, как если бы приложение только что загружено.
Примеры
Screen9
Screen9 сначала отображается при запуске приложения.
If( Param( "admin-mode" ) = 1, HomeScreen, AdminScreen )
Проверяет, задан ли параметр "режим администрирования" и использует его для выбора того, отображается ли экран 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 возвращает текст. Формат этого текста может меняться со временем, поэтому рассматривать его как целое и не извлекать отдельные части.