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


Общие сведения о переменных в приложениях на основе холста

Если вы использовали другое средство программирования, например Visual Basic или JavaScript, вы можете спросить: Где находятся переменные? Power Apps работает по-разному и нуждается в другом подходе. Вместо того, чтобы при создании приложения на основе холста мыслить в категориях переменных, спросите себя: Как это делается в Excel?

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

Иногда необходимо использовать переменные в Power Apps, которая расширяет модель Excel путем добавления формул поведения. Эти формулы, например, выполняются, когда пользователь нажимает кнопку. В формуле поведения часто полезно задать переменную для использования в других формулах.

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

Реализация подхода Excel в Power Apps

Excel

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

В следующем примере ячейка A3 использует формулу A1+A2. При изменении A1 или A2A3 автоматически пересчитывается, чтобы отобразить изменение. Это поведение не требует написания кода за пределами самой формулы.

Анимация пересчета суммы двух чисел в Excel.

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

Power Apps

Приложения, создаваемые в Power Apps, работают так же, как Excel. Вместо обновления ячеек вы добавляете элементы управления в любое место на экране и назовете их для использования в формулах.

Например, можно скопировать поведение Excel в приложении, добавив элемент управления Label с именем Label1 и два элемента управления ввода текста с именем TextInput1 и TextInput2. Если вы установите свойство TextLabel1 равным TextInput1 + TextInput2, всегда автоматически отображается сумма чисел в TextInput1 и TextInput2.

Вычисление суммы двух чисел в Power Apps.

Обратите внимание, что при выборе элемента управления Label1 в строке формулы в верхней части экрана отображается его формула Text. Формула TextInput1 + TextInput2 создает зависимость между этими элементами управления, как и зависимости между ячейками в книге Excel. Изменим значение TextInput1.

Анимация вычисления суммы двух чисел в Power Apps.

Формула для Label1 автоматически вычисляется и отображает новое значение.

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

If( Value(Label1.Text) < 0, Red, Black )

Анимация условного форматирования.

Формулы используются для многих сценариев:

  • При подключении GPS устройства элемент управления картой отображает текущее расположение с формулой, в которую используется Location.Latitude и Location.Долгота. При перемещении карта автоматически отслеживает расположение.
  • Другие пользователи обновляют источники данных. Например, другие участники группы могут обновлять элементы в списке. При обновлении источника данных все зависимые формулы автоматически пересчитываются для отображения обновленных данных. Например, можно задать свойство Items коллекции свойству formula Filter(SharePointList), которое автоматически отображает только что отфильтрованный набор записей.

Преимущества

Использование формул для создания приложений дает множество преимуществ.

  • Если вы умеете работать с Excel, вы умеете работать с Power Apps. Модель и язык формул у них одинаковы.
  • Если вы использовали другие средства программирования, подумайте о том, сколько кода вам потребуется сделать в этих примерах. В Visual Basic вы напишете обработчик событий для события изменения в каждом элементе управления текстовым вводом. Код для выполнения вычислений в каждом из них является избыточным и может привести к несогласованности, или вам нужно будет написать общую подпрограмму. В Power Apps все это выполняется с помощью одной однострочной формулы.
  • Чтобы узнать, откуда исходит текст Label1, вы точно знаете, где искать: в формуле свойства Text. Нет другого способа изменить текст этого элемента управления. В традиционном средстве программирования любой обработчик событий или подпрограмма может изменить значение метки в любом месте программы. Это затрудняет отслеживание того, когда и где переменная изменилась.
  • Если изменить элемент управления ползунка, а затем изменить свое мнение, вы можете изменить ползунок обратно на исходное значение. Это как будто ничего не изменилось: приложение отображает те же значения элементов управления, что и раньше. Нет никаких последствий для экспериментирования и запроса "что если", как в Excel.

Как правило, если вы можете что-то вычислить с помощью формулы, вам будет лучше. Обработчик формул в Power Apps сделает все автоматически.

Ситуации, в которых имеет смысл использовать переменные

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

Отображение Description
Приложение с элементом управления вводом текста, меткой и двумя кнопками. Когда приложение запускается, нарастающий итог равен 0.

Красная точка представляет палец пользователя в поле ввода текста, куда пользователь вводит 77.
Элемент управления вводом текста содержит 77, и кнопка Пользователь выбирает кнопку Добавить.
Итог равен 77, и еще 77 добавляется к нему. 77 добавлено к нарастающему итогу.

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

Пользователь выбирает кнопку Очистить.
Итог очищается. Нарастающий итог сбрасывается на 0.

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

Иногда требуется переменная для вашего приложения, чтобы вести себя так, как вы хотите, но этот подход поставляется с предостережениями:

  • Нарастающий итог обновляется вручную. Автоматический пересчет не работает за вас.
  • Нарастающий итог не рассчитывается на основе значений других элементов управления. Он зависит от того, сколько раз пользователь нажимает кнопку "Добавить " и какое значение находится в элементе управления вводом текста каждый раз. Пользователь ввел 77 и выбрал "Добавить" дважды, или ввел 24 и 130 для каждого сложения? Вы не заметите разницу, если итог достигнет 154.
  • Изменения в общем объеме могут поступать из различных действий. В этом примере кнопки "Добавить " и " Очистить " обновляют общую сумму. Если приложение не ведет себя так, как вы ожидаете, какая кнопка вызывает проблему?

Использование глобальной переменной

Чтобы создать арифмометр, понадобится переменная для хранения нарастающего итога. Самыми простыми переменными для использования в Power Apps являются глобальные переменные.

Принцип их действия заключается в следующем:

  • Задайте значение глобальной переменной с помощью функции Set . Set( MyVar, 1 ) задает для глобальной переменной MyVar значение 1.
  • Используйте глобальную переменную, ссылаясь на имя, используемое с функцией Set . В этом случае MyVar возвращает 1.
  • В глобальных переменных может храниться любое значение, в том числе строки, числа, записи и таблицы.

Перестройте счётную машину, используя глобальную переменную:

  1. Добавьте элемент управления вводом текста с именем TextInput1 и две кнопки с именем Button1 и Button2.

  2. Задайте для свойства Text элемента управления Button1 значение "Добавить", а для свойства Text элемента управления Button2 — значение "Очистить".

  3. Чтобы обновить текущий итог при нажатии кнопки Добавить, установите свойство OnSelect на следующую формулу:

    Set( RunningTotal, RunningTotal + TextInput1 )

    Эта формула создает RunningTotal в качестве глобальной переменной, содержащей число из-за + оператора. Ссылка на RunningTotal в любом месте приложения. Когда пользователь открывает приложение, RunningTotal имеет начальное значение пустого.

    При первом нажатии кнопки "Добавить" и запуске "Задать", параметру RunningTotal присваивается значение RunningTotal + TextInput1.

    Снимок экрана свойства OnSelect кнопки

  4. Чтобы задать текущую сумму 0, когда пользователь нажимает кнопку Очистить, задайте для свойства OnSelect следующую формулу:

    Set( RunningTotal, 0 )

    Снимок экрана: свойство OnSelect кнопки Clear, заданное для функции Set.

  5. Добавьте элемент управления Подпись и задайте для его свойства Text значение RunningTotal.

    Эта формула автоматически пересчитывает и показывает пользователю значение RunningTotal по мере изменения на основе кнопок, которые пользователь выбирает.

    Снимок экрана: свойство Text метки, заданное для имени переменной.

  6. Предварительно просмотрите приложение. Введите число в текстовом поле и нажмите кнопку "Добавить " несколько раз. Когда все готово, вернитесь к интерфейсу разработки с помощью клавиши ESC .

    Снимок экрана: элемент управления вводом текста со значением и меткой, показывающей текущий итог.

  7. Чтобы отобразить значение глобальной переменной, выберите Переменные в меню разработки приложения.

    Снимок экрана: меню

  8. Чтобы отобразить все места, где определена и где используется переменная, выберите ее в разделе Глобальные переменные.

    Снимок экрана: список расположений, где используется переменная.

Типы переменных

Power Apps имеет три типа переменных:

Тип переменной Область действия Описание Функции, которые устанавливают
Глобальные переменные Приложение Используйте глобальные переменные для хранения числа, текстовой строки, логического значения, записи, таблицы или другого значения, на которое вы ссылаетесь в любом месте приложения. Set
Переменные контекста Экран Используйте переменные контекста для передачи значений на экран, например параметры на других языках. Вы ссылаетесь на них только на одном экране. UpdateContext
Navigate
Коллекции Приложение Используйте коллекции для хранения таблицы, на которую вы ссылаетесь в любом месте приложения. Вы можете изменить содержимое таблицы и сохранить его на локальном устройстве для последующего использования. Collect
ClearCollect

Создание и удаление переменных

Переменные создаются неявно при использовании в функции Set, UpdateContext, Navigate, Collect или ClearCollect. Чтобы объявить переменную и его тип, просто включите ее в любую из этих функций в любом месте приложения. Эти функции не создают переменные; они заполняют только переменные значениями. Вы никогда не объявляете переменные явным образом, как в других языках программирования, и вся типизация неявно определяется исходя из использования.

Например, у вас может быть элемент управления "Кнопка" с формулой OnSelect равной Set( X, 1 ). Эта формула устанавливает X как переменную с типом числа. Вы используете X в формулах в качестве числа, и эта переменная имеет пустое значение после открытия приложения, но перед нажатием кнопки. Когда вы выбираете кнопку, вы задаете для X значение 1.

Если добавить другую кнопку и задать для свойства OnSelect значение Set( X, Hello) возникает ошибка, так как тип (текстовая строка) не соответствует типу в предыдущем наборе (число). Все неявные определения переменной должны иметь согласованный тип. Опять же, все это происходит потому, что вы упоминаете X в формулах, а не потому, что ни один из этих формул фактически выполняется.

Удалите переменную, удалив все функции Set, UpdateContext, Navigate, Collect или ClearCollect , которые неявно устанавливают переменную. Без этих функций переменная не существует. Также удалите все ссылки на переменную, так как они вызывают ошибку.

Время жизни и начальное значение переменной

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

Сохраните содержимое переменной в источнике данных с помощью функций Patch или Collect . Сохраните значения в коллекциях на локальном устройстве с помощью функции SaveData .

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

Считывание переменных

Используйте имя переменной для чтения его значения. Например, определите переменную с помощью этой формулы:

Set( Radius, 12 )

Затем используйте Radius в любом месте, где вы используете число, и оно заменено 12:

Pi() * Power( Radius, 2 )

Если вы присвоите контекстной переменной то же имя, что и глобальной переменной или коллекции, она будет иметь приоритет. Вы можете ссылаться на глобальную переменную или коллекцию с помощью оператора disambiguation[@Radius].

Зарезервированные имена переменных

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

  • ActiveScreen
  • DesignHeight
  • DesignWidth
  • Height
  • MinScreenHeight
  • MinScreenWidth
  • SizeBreakpoints
  • StudioVersion
  • TestCaseId
  • Тестирование
  • TestSuiteId
  • Тема
  • Width

Использование переменной контекста

Давайте рассмотрим, как построить суммирующую машину с помощью контекстной переменной вместо глобальной переменной.

Как работают переменные контекста

  • Вы неявно определяете и задаете переменные контекста с помощью функции UpdateContext или Navigate. При запуске приложения начальное значение каждой переменной контекста пусто.
  • Для обновления переменных контекста используются записи. В других средствах программирования обычно используется "=" для назначения, например "x = 1". Для переменных контекста вместо этого используется { x: 1 }. Когда вы используете переменную контекста, используйте ее имя напрямую без синтаксиса записи.
  • Переменную контекста можно также задать при использовании функции Navigate для отображения экрана. Если вы считаете экран типом процедуры или подпрограммы, этот подход похож на передачу параметров в других средствах программирования.
  • За исключением функции Navigate, переменные контекста ограничены контекстом одного экрана (того, на котором им было присвоено их имя). Их нельзя использовать или задавать вне этого контекста.
  • В переменных контекста может храниться любое значение, в том числе строки, числа, записи и таблицы.

Перестроим арифмометр, воспользовавшись переменными контекста:

  1. Добавьте элемент управления ввода текста с именем TextInput1 и две кнопки с именами Button1 и Button2.

  2. Задайте для свойства Text элемента управления Button1 значение "Добавить", а для свойства Text элемента управления Button2 — значение "Очистить".

  3. Чтобы нарастающий итог обновлялся, когда пользователь нажимает кнопку Добавить, задайте следующую формулу в качестве значения свойства OnSelect:

    UpdateContext( { RunningTotal: RunningTotal + TextInput1 } )

    Эта формула устанавливает RunningTotal в качестве контекстной переменной, содержащей число из-за + оператора. Ссылаться на RunningTotal можно в любом месте на этом экране. Когда пользователь открывает приложение, RunningTotal имеет начальное значение пустого.

    При первом нажатии кнопки "Добавить " и запуска UpdateContext для параметра RunningTotal задано значение RunningTotal + TextInput1.

    Свойство OnSelect кнопки

  4. Чтобы нарастающий итог становился равным 0, когда пользователь нажимает кнопку Очистить, задайте в качестве значения его свойства OnSelect следующую формулу:

    UpdateContext( { RunningTotal: 0 } )

    Опять же, используйте UpdateContext с формулой UpdateContext( { RunningTotal: 0 } ).

    Свойство OnSelect кнопки

  5. Добавьте элемент управления Подпись и задайте для его свойства Text значение RunningTotal.

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

    Свойство Text метки.

  6. Предварительно просмотрите приложение. Введите число в текстовом поле и нажмите кнопку "Добавить " несколько раз. Когда вы будете готовы, вернитесь к интерфейсу разработки с помощью клавиши ESC .

    Элемент управления вводом текста показывает значение, а метка показывает нарастающий итог.

  7. Задайте значение переменной контекста при переходе на экран, чтобы передать "контекст" или "параметры" с одного экрана на другой. Чтобы продемонстрировать этот прием, вставьте экран, вставьте кнопку и установите для ее свойства OnSelect следующую формулу:

    Navigate( Screen1, None, { RunningTotal: -1000 } )

    Свойство OnSelect кнопки.

    Удерживайте клавишу ALT при нажатии этой кнопки, чтобы отобразить Screen1 и задать для переменной контекста RunningTotal значение -1000.

    Screen1 открыт.

  8. Чтобы отобразить значение переменной контекста, выполните одно из следующих действий:

    • Если вы используете предварительную версию Power Apps Studio, выберите Переменные в меню разработки приложения.

    • Если вы используете классическую версию Power Apps Studio, выберите меню "Файл " и выберите переменные в левой области.

  9. Чтобы отобразить все места, где определена и где используется переменная контекста, выберите ее в разделе Переменные контекста.

Использование коллекции

Давайте создадим суммирующую машину, используя коллекцию. Так как коллекция содержит таблицу, которую легко изменить, этот арифмометр сохраняет "бумажную ленту" каждого значения при его вводе.

Как работают коллекции

  • Создайте и настройте коллекции с помощью функции ClearCollect. Вместо этого можно использовать функцию Collect , но для нее требуется другая переменная вместо замены старой.
  • Коллекция — это тип источника данных и таблицы. Чтобы получить одно значение в коллекции, используйте функцию First и получите одно поле из результирующей записи. Если вы используете одно значение с ClearCollect, это поле Value , как показано в следующем примере:
    First(VariableName).Value

Создайте суммирующую машину с помощью коллекции:

  1. Добавьте элемент управления Ввод текста "Ввод текста" с именем TextInput1 и две кнопки с именами Button1 и Button2.

  2. Задайте для свойства Text элемента управления Button1 значение "Добавить", а для свойства Text элемента управления Button2 — значение "Очистить".

  3. Чтобы нарастающий итог обновлялся, когда пользователь нажимает кнопку Добавить, задайте следующую формулу в качестве значения свойства OnSelect:

    Collect( PaperTape, TextInput1.Text )

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

    Когда эта формула выполняется, она добавляет новое значение в конец коллекции. Так как мы добавляем одно значение, функция Collect автоматически помещает его в таблицу с одним столбцом с именем Value, который мы будем использовать позже.

    Свойство OnSelect кнопки

  4. Чтобы очищать "бумажную ленту", когда пользователь нажимает кнопку Очистить, задайте в качестве значения свойства OnSelect следующую формулу:

    Clear( PaperTape )

    ![Свойство OnSelect кнопки but1 «Очистить». Чтобы запустить арифмометр, выберите F5, чтобы перейти в режим предварительного просмотра, введите числа в текстовом поле и выберите кнопки.

    Снимок экрана с элементом управления вводом текста, в котором отображается значение, и меткой, которая показывает нарастающий итог. label.](media/working-with-variables/papertape-3.png)

  5. Чтобы запустить арифмометр, нажмите F5, чтобы перейти в режим предварительного просмотра, введите число в текстовом поле и нажмите кнопки.

    Элемент управления вводом текста показывает значение, а метка показывает нарастающий итог.

  6. Чтобы вернуться в рабочую область по умолчанию, нажмите клавишу ESC.

  7. Чтобы отобразить бумажную ленту, вставьте управляющий элемент «Таблица данных» и задайте его **[Элементы](controls/properties1. Чтобы просмотреть значения в коллекции, выполните одно из следующих действий:

    • Если вы используете предварительную версию Power Apps Studio, выберите переменные в меню разработки приложений и выберите "Коллекции".

    • Если вы используете классическую версию Power Apps Studio, выберите коллекции в меню "Файл ". Чтобы просмотреть значения в коллекции, выполните одно из следующих действий:

    • Если вы используете предварительную версию Power Apps Studio, выберите Переменные в меню разработки приложения, затем выберите Коллекции.

    • Если вы используете классическую версию Power Apps Studio, выберите Коллекции в меню Файл.

  8. Чтобы сохранить и получить коллекцию, добавьте еще два элемента управления кнопки и задайте для свойств Text значение Load and Save. Задайте для свойства OnSelect кнопки Загрузить такую формулу:

    Clear( PaperTape ); LoadData( PaperTape, "StoredPaperTape", true )

    Сначала нужно очистить коллекцию, так как функция LoadData добавит хранящиеся значения в конец коллекции.

    Свойство OnSelect кнопки

  9. Установите для свойства OnSelect кнопки Сохранить следующую формулу:

    SaveData( PaperTape, "StoredPaperTape" )

    Свойство OnSelect* кнопки

  10. Перейдите в режим предварительного просмотра, выбрав F5, введите числа в элементе управления для ввода текста и выберите кнопки. Выберите кнопку Сохранить. Закройте и перезапустите приложение, затем нажмите кнопку Загрузить, чтобы повторно загрузить коллекцию.

Заметка

Функции SaveData и LoadData работают в Power Apps Mobile, но не в Power Apps Studio или в веб-проигрывателе для Power Apps.