События
Чемпионат мира Power BI DataViz
14 февр., 16 - 31 мар., 16
С 4 шансами войти, вы можете выиграть пакет конференции и сделать его в LIVE Grand Finale в Лас-Вегасе
ПодробнееЭтот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Если вы использовали другое средство программирования, например Visual Basic или JavaScript, у вас может возникнуть вопрос: Где переменные? Power Apps немного отличается и требует иного подхода. Вместо того, чтобы при создании приложения на основе холста мыслить в категориях переменных, спросите себя: Как это делается в Excel?
Возможно, в других средствах вы явно выполняли вычисления и хранили результаты в переменной. Однако в Power Apps и Excel формулы пересчитываются автоматически при изменении входных данных, поэтому обычно не требуется создавать и обновлять переменные. Применяя такой подход по мере возможности, можно легко создавать и обслуживать приложения, полностью понимая принцип их работы.
В некоторых случаях в Power Apps необходимо использовать переменные, которые расширяют модель Excel, добавляя в нее формулы поведения. Эти формулы, например, выполняются, когда пользователь нажимает кнопку. В формуле поведения зачастую удобно задать переменную, которую можно использовать в других формулах.
Как правило, использовать переменные нежелательно. Однако иногда только с их помощью можно обеспечить желаемые возможности. Переменные неявно создаются и типизируются, когда они появляются в функциях, которые устанавливают их значения.
Давайте посмотрим, как работает Excel. Ячейка может содержать значение, например число, строку или формулу, в которой используются значения других ячеек. После того как пользователь вводит другое значение в ячейку, Excel автоматически пересчитывает все формулы, которые зависят от нового значения. При этом для обеспечения такого поведения не нужно ничего программировать.
В следующем примере в ячейке A3 установлена формула A1+A2. Если ячейка A1 или A2 изменяется, ячейка A3 автоматически пересчитывается, чтобы отразить изменение. Такое поведение не требует кодирования вне самой формулы.
В Excel нет переменных. Значение ячейки, содержащей формулу, изменяется в зависимости от входных данных, но при этом нет возможности запомнить результат формулы и сохранить его в ячейке или в любом другом месте. При изменении значения ячейки может измениться вся таблица, а все ранее вычисляемые значения будут утрачены. Пользователь Excel может копировать и вставлять ячейки, но это нужно делать вручную. С помощью формул выполнить такую операцию невозможно.
Поведение приложений, создаваемых в Power Apps, во многом напоминает поведение Excel. Вместо обновления ячеек можно добавить элементы управления в любом месте на экране и присвоить им имена, чтобы их можно было использовать в формулах.
Например, можно воспроизвести поведение Excel в приложении, добавив элемент управления Подпись с именем Label1 и два элемента управления Ввод текста с именами TextInput1 и TextInput2. Если затем задать для свойства Text элемента управления Label1 значение TextInput1 + TextInput2, в результате всегда будет автоматически отображаться сумма любых чисел, указанных в элементах управления TextInput1 и TextInput2.
Обратите внимание, что при выборе элемента управления Label1 в строке формулы в верхней части экрана отображается его формула Text. В данном случае она выглядит таким образом: TextInput1 + TextInput2. Эта формула создает между этими элементами управления такую же зависимость, как между ячейками в книге Excel. Изменим значение TextInput1.
Формула для Label1 автоматически пересчитывается, и на экране отображается новое значение.
Чтобы в Power Apps определить не только основное значение элемента управления, но и его свойства, например форматирование, можно воспользоваться формулами. В следующем примере формула для свойства Color метки обеспечит автоматическое отображение отрицательных значений красным цветом. Функция If похожа на ту, которая используется в Excel.
If( Value(Label1.Text) < 0, Red, Black )
Формулы можно использовать в самых разнообразных сценариях.
Использование формул для создания приложений дает множество преимуществ.
Как правило, если желаемого эффекта можно добиться с помощью формулы, лучше использовать именно ее. Обработчик формул Power Apps сделает все автоматически.
Давайте изменим наш простой сумматор так, чтобы он функционировал по принципу старинного арифмометра, используя нарастающий итог. При нажатии кнопки Добавить число добавляется к нарастающему итогу. При нажатии кнопки Очистить нарастающий итог обнуляется.
Отобразить | Описание |
---|---|
![]() |
Когда приложение запускается, нарастающий итог равен 0. Красная точка представляет палец пользователя в поле ввода текста, куда пользователь вводит 77. |
![]() |
Пользователь выбирает кнопку Добавить. |
![]() |
77 добавлено к нарастающему итогу. Пользователь выбирает кнопку Добавить еще раз. |
![]() |
77 снова добавляется к нарастающему итогу, в результате чего получается 154. Пользователь выбирает кнопку Очистить. |
![]() |
Нарастающий итог сбрасывается на 0. |
Наш арифмометр использует то, чего нет в Excel: кнопки. В этом приложении для вычисления нарастающих итогов нельзя использовать только формулы, поскольку их значение зависит от ряда действий, которые выполняет пользователь. Вместо этого нарастающий итог записывается и обновляется вручную. Большинство средств программирования сохраняет эти сведения в переменной.
Иногда, чтобы приложения вели себя необходимым образом, требуется использовать переменные. Однако такой подход применим с некоторыми оговорками.
Чтобы создать арифмометр, нам понадобится переменная для хранения нарастающего итога. Простейшие переменные в Power Apps — это глобальные переменные.
Принцип их действия заключается в следующем:
Перестроим наш арифмометр, воспользовавшись глобальными переменными.
Добавьте элемент управления ввода текста с именем TextInput1 и две кнопки с именами Button1 и Button2.
Задайте для свойства Text элемента управления Button1 значение "Добавить", а для свойства Text элемента управления Button2 — значение "Очистить".
Чтобы нарастающий итог обновлялся, когда пользователь нажимает кнопку Добавить, задайте следующую формулу в качестве значения свойства OnSelect:
Set( RunningTotal, RunningTotal + TextInput1 )
Само существование этой формулы устанавливает RunningTotal в качестве глобальной переменной, которая содержит число из-за оператора +. Вы можете ссылаться на RunningTotal в любом месте приложения. Всякий раз, когда пользователь открывает это приложение, RunningTotal имеет начальное пустое значение,
Первый раз, когда пользователь выбирает кнопку Добавить и выполняется функция Set, для RunningTotal устанавливается значение RunningTotal + TextInput1.
Чтобы нарастающий итог становился равным 0, когда пользователь нажимает кнопку Очистить, задайте в качестве значения его свойства OnSelect следующую формулу:
Set( RunningTotal, 0 )
Добавьте элемент управления Подпись и задайте для его свойства Text значение RunningTotal.
Эта формула пересчитывается автоматически, а для пользователя отображается значение RunningTotal, которое изменяется в зависимости от нажимаемых им кнопок.
Перейдите в режим предварительного просмотра приложения, и вы увидите, что наш арифмометр работает, как описано выше. Введите число в текстовое поле и нажмите кнопку Добавить несколько раз. Выполнив эти действия, вернитесь к разработке, нажав клавишу ESC.
Чтобы отобразить значение глобальной переменной, выберите Переменные в меню разработки приложения.
Чтобы отобразить все места, где определена и где используется переменная, выберите ее в разделе Глобальные переменные.
Power Apps имеет три типа переменных:
Тип переменных | Scope | Описание | Функции, которые устанавливают |
---|---|---|---|
Глобальные переменные | Приложение | Самые простые в использовании. В них могут храниться любые значения, в том числе числа, текстовые строки, логические значения, записи, таблицы и т. п., на которые можно ссылаться из любого места в приложении. | Задание записи |
Переменные контекста | Экран | Отлично подходят для передачи значений на экран, похожи на параметры для процедур на других языках. На них можно ссылаться только с одного экрана. |
UpdateContext Navigate |
Коллекции | Приложение | Содержит таблицу, на которую можно ссылаться из любого места в приложении. Позволяет изменять содержимое таблицы вместо того, чтобы задать все содержимое сразу. Можно сохранить на локальном устройстве для дальнейшего использования. |
Collect ClearCollect |
Все переменные создаются неявно, когда они появляются в функции Set, UpdateContext, Navigate, Collect или ClearCollect. Чтобы объявить переменную и ее тип, вам нужно только включить ее в любую из этих функций в любом месте вашего приложения. Ни одна из этих функций не создает переменные; они только заполняют переменные значениями. Вы никогда не объявляете переменные явно, как в другом инструменте программирования, и вся типизация неявна по использованию.
Например, у вас может быть элемент управления "Кнопка" с формулой OnSelect равной Set( X, 1 ). Эта формула устанавливает X как переменную с типом числа. Вы можете использовать X в формулах в виде числа, и эта переменная имеет пустое значение после открытия приложения, но до нажатия кнопки. Когда вы выбираете кнопку, вы задаете для X значение 1.
Если вы добавите еще одну кнопку и установите для ее свойства OnSelect значение Set( X, "Hello" ), возникает ошибка, потому что тип (текстовая строка) не соответствует типу предыдущего вызова функции Set (число). Все неявные определения переменной должны иметь согласованный тип. Опять же, все это произошло потому, что вы упомянули X в формулах, а не потому, что какая-то из этих формул действительно выполнялась.
Вы удаляете переменную, удаляя все функции Set, UpdateContext, Navigate, Collect или ClearCollect, которые неявно устанавливают переменную. Без этих функций переменная не существует. Вы также должны удалить все ссылки на переменную, потому что они вызовут ошибку.
Все переменные хранятся в памяти во время выполнения приложения. Когда приложение закрывается, хранящиеся в переменных значения утрачиваются.
Вы можете сохранить содержимое переменной в источник данных, используя функции Patch или Collect. Вы также можете сохранить значения в коллекциях на локальном устройстве, используя функцию SaveData.
Когда пользователь открывает приложение, все переменные имеют пустое начальное значение.
Чтобы узнать значение переменной, используйте ее имя. Например, вы можете определить переменную с помощью этой формулы:
Set( Radius, 12 )
Тогда вы можете просто использовать переменную Radius везде, где вы можете использовать число, и она будет заменена на 12:
Pi() * Power( Radius, 2 )
Если вы присвоите контекстной переменной то же имя, что и глобальной переменной или коллекции, она будет иметь приоритет. Однако вы по-прежнему можете ссылаться на глобальную переменную или коллекцию, если используете оператор устранения неоднозначности[@Radius].
Давайте попробуем создать наш арифмометр, используя переменную контекста вместо глобальной переменной.
Принцип действия контекстных переменных заключается в следующем:
Перестроим наш арифмометр, воспользовавшись переменными контекста:
Добавьте элемент управления ввода текста с именем TextInput1 и две кнопки с именами Button1 и Button2.
Задайте для свойства Text элемента управления Button1 значение "Добавить", а для свойства Text элемента управления Button2 — значение "Очистить".
Чтобы нарастающий итог обновлялся, когда пользователь нажимает кнопку Добавить, задайте следующую формулу в качестве значения свойства OnSelect:
UpdateContext( { RunningTotal: RunningTotal + TextInput1 } )
Само существование этой формулы устанавливает RunningTotal в качестве переменной контекста, которая содержит число из-за оператора +. Вы можете ссылаться на RunningTotal в любом месте этого экрана. Всякий раз, когда пользователь открывает это приложение, RunningTotal имеет начальное пустое значение,
Первый раз, когда пользователь выбирает кнопку Добавить и выполняется функция UpdateContext, для RunningTotal устанавливается значение RunningTotal + TextInput1.
Чтобы нарастающий итог становился равным 0, когда пользователь нажимает кнопку Очистить, задайте в качестве значения его свойства OnSelect следующую формулу:
UpdateContext( { RunningTotal: 0 } )
Опять же, функция UpdateContext используется с формулой UpdateContext( { RunningTotal: 0 } ).
Добавьте элемент управления Подпись и задайте для его свойства Text значение RunningTotal.
Эта формула пересчитывается автоматически, а для пользователя отображается значение RunningTotal, которое изменяется в зависимости от нажимаемых им кнопок.
Перейдите в режим предварительного просмотра приложения, и вы увидите, что наш арифмометр работает, как описано выше. Введите число в текстовое поле и нажмите кнопку Добавить несколько раз. Выполнив эти действия, вернитесь к разработке, нажав клавишу ESC.
Вы можете задать значение переменной контекста, перейдя на экран. Этот вариант используется для передачи "контекста" или "параметров" с одного экрана на другой. Чтобы продемонстрировать этот прием, вставьте экран, вставьте кнопку и установите для ее свойства OnSelect следующую формулу:
Navigate( Screen1, None, { RunningTotal: -1000 } )
Удерживайте нажатой клавишу ALT, пока вы нажимаете эту кнопку, чтобы показать экран Screen1 и установить для переменной контекста RunningTotal значение –1000.
Чтобы отобразить значение переменной контекста, выполните одно из следующих действий:
Если вы используете предварительную версию Power Apps Studio, выберите Переменные в меню разработки приложения.
Если вы используете классическую версию Power Apps Studio, выберите меню Файл, а затем выберите Переменные в левой области.
Чтобы отобразить все места, где определена и где используется переменная контекста, выберите ее в разделе Переменные контекста.
Наконец, давайте попробуем создать наш арифмометр с помощью коллекции. Так как коллекция хранит таблицу, которую можно легко изменить, в этом арифмометре каждое вводимое значение будет сохранятся на "бумажной ленте".
Принцип действия коллекций описан ниже.
Создадим арифмометр, воспользовавшись коллекцией.
Добавьте элемент управления Ввод текста "Ввод текста" с именем TextInput1 и две кнопки с именами Button1 и Button2.
Задайте для свойства Text элемента управления Button1 значение "Добавить", а для свойства Text элемента управления Button2 — значение "Очистить".
Чтобы нарастающий итог обновлялся, когда пользователь нажимает кнопку Добавить, задайте следующую формулу в качестве значения свойства OnSelect:
Collect( PaperTape, TextInput1.Text )
Само существование этой формулы устанавливает PaperTape как коллекцию, которая содержит таблицу с одним столбцом текстовых строк. Вы можете ссылаться на PaperTape в любом месте этого приложения. Всякий раз, когда пользователь открывает это приложение, PaperTape является пустой таблицей.
Когда эта формула выполняется, она добавляет новое значение в конец коллекции. Так как мы добавляем одно значение, функция Collect автоматически помещает его в таблицу с одним столбцом с именем Value, который мы будем использовать позже.
Чтобы очищать "бумажную ленту", когда пользователь нажимает кнопку Очистить, задайте в качестве значения свойства OnSelect следующую формулу:
Clear( PaperTape )
Для отображения нарастающего итога добавьте метку и задайте для нее в качестве значения свойства Text следующую формулу:
Sum( PaperTape, Value )
Чтобы запустить арифмометр, нажмите F5, чтобы перейти в режим предварительного просмотра, введите число в текстовом поле и нажмите кнопки.
Нажмите клавишу ESC, чтобы вернуться в рабочую область по умолчанию.
Чтобы отобразить "бумажную ленту", вставьте элемент управления Таблица данных и задайте его свойству Items следующую формулу:
PaperTape
На правой панели выберите Редактировать поля, а затем выберите Добавить поле, выберите столбец Значение, а затем выберите Добавить, чтобы показать.
Чтобы просмотреть значения в коллекции, выполните одно из следующих действий:
Если вы используете предварительную версию Power Apps Studio, выберите Переменные в меню разработки приложения и затем выберите Коллекции.
Если вы используете классическую версию Power Apps Studio, выберите Коллекции в меню Файл.
Чтобы сохранить и извлечь коллекцию, добавьте две дополнительные кнопки и задайте для их свойств Text значения Загрузить и Сохранить. Задайте для свойства OnSelect кнопки Загрузить такую формулу:
Clear( PaperTape ); LoadData( PaperTape, "StoredPaperTape", true )
Сначала нужно очистить коллекцию, так как функция LoadData добавит хранящиеся значения в конец коллекции.
Установите для свойства OnSelect кнопки Сохранить следующую формулу:
SaveData( PaperTape, "StoredPaperTape" )
Перейдите в режим предварительного просмотра снова, нажав клавишу F5, введите числа в элементе управления для ввода текста и нажмите кнопки. Выберите кнопку Сохранить. Закройте и перезапустите приложение, затем нажмите кнопку Загрузить, чтобы повторно загрузить коллекцию.
Примечание
Функции SaveData и LoadData работают в Power Apps Mobile, но не в Power Apps Studio или в веб-проигрывателе для Power Apps.
События
Чемпионат мира Power BI DataViz
14 февр., 16 - 31 мар., 16
С 4 шансами войти, вы можете выиграть пакет конференции и сделать его в LIVE Grand Finale в Лас-Вегасе
ПодробнееОбучение
Схема обучения
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Документация
Создание и обновление коллекции в приложении на основе холста - Power Apps
Создайте коллекцию, добавьте элементы в коллекцию и удалите один или все элементы из коллекции в приложении на основе холста.
Функция UpdateContext - Power Platform
Справочные сведения о функции UpdateContext, включая описание синтаксиса и примеры.
Справочные сведения о функции Set, включая описание синтаксиса и примеры.