Поделиться через


Объект 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 Studio.
  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; в одном и том же приложении не допускается.

Функции, определяемые пользователем

Внимание!

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 = Formula;

  • FunctionName — обязательный параметр. Имя определенной пользователем функции.
  • ParameterName — необязательный параметр. Имя параметра функции.
  • ParameterType — необязательный параметр. Имя типа, имя встроенного типа данных, имя источника данных или тип, определенный с помощью функции Type.
  • ReturnType — обязательный аргумент. Тип возвращаемого значения функции.
  • Formula — обязательный аргумент. Формула, которая вычисляет значение функции на основе параметров.

Каждый параметр и выходные данные пользовательской функции должны быть типизированы. В этом примере, SelectedGenre: Text определяет первый параметр нашей функции как тип Text, и SelectedGenre — это имя параметра, которое используется в теле для операции Filter. Поддерживаемые имена типов см. в разделе Типы данных. Функция 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 [ ; Formula2 ... ] };

  • FunctionName — обязательный параметр. Имя определенной пользователем функции.
  • ParameterName — необязательный параметр. Имя параметра функции.
  • ParameterType — необязательный параметр. Имя типа, имя встроенного типа данных, имя источника данных или тип, определенный с помощью функции Type.
  • ReturnType — обязательный аргумент. Тип возвращаемого значения функции. Используйте Void , если функция не возвращает значение.
  • Formula(s) — обязательный параметр. Формула, которая вычисляет значение функции на основе параметров.

Как и в случае со всеми формулами Power Fx, выполнение не заканчивается при обнаружении ошибки. После вызова функции Errorфункция If предотвращает внесение изменений в параметры Сбережения и Потрачено. Функцию IfError также можно использовать для предотвращения дальнейшего выполнения после ошибки. Несмотря на то, что формула возвращает значение Void, она все равно может вернуть ошибку при возникновении проблемы.

Пользовательские типы

Внимание!

Именованные формулы можно использовать с функцией Type для создания пользовательских типов. Используйте := вместо = для определения пользовательского типа, например Book := Type( { Title: Text, Author: Text } ). Дополнительные сведения и примеры см. в разделе Функция Type.

Свойство OnError

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

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

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

OnError не может заменить ошибку в расчетах так, как это может IfError. Если вызывается OnError, ошибка уже произошла, и она уже была обработана посредством вычислений по формуле, такой как IfError; 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 ). Использование IfError приведет к отсутствию ошибки или баннера ошибки. Мы не можем изменить значение ошибки с OnError поскольку в этот момент ошибка уже произошла, вопрос только в том, как о ней будет сообщено.

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

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

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

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

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

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

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

Свойство OnStart

Заметка

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

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

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

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

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

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

Заметка

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

Свойство StartScreen

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

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

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

Заметка

Глобальные переменные и коллекции, в том числе созданные в OnStart, недоступны в StartScreen. Доступны именованные формулы, которые часто являются лучшей альтернативой для повторного использования формул в приложении.

Если 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 возвращается в виде текста. Формат текста может меняться со временем, и его следует рассматривать как единое целое; избегайте извлечения отдельных частей.