Ознайомлення зі змінними у компонованих програмах

Якщо ви раніше використовували інший засіб програмування, як-от Visual Basic або JavaScript, вас можете цікавити, де змінні. Power Apps дещо відрізняється й потребує іншого підходу. Створюючи компоновану програму, спробуйте не мислити в категоріях змінних, а подумати, що було би потрібно робити в Excel.

Можливо, в інших засобах ви явно виконували обчислення та зберігали результати в змінній. Утім, Power Apps і Excel автоматично переобчислюють формули, якщо вхідні дані змінено, тож зазвичай створювати та оновлювати змінні не потрібно. Користуючись принагідно цим підходом, можна легко створити програму, зрозуміти принцип її дії, а також забезпечити її підтримку.

У деяких випадках у Power Apps необхідно використовувати змінні, що розширюють модель Excel, додаючи формули поведінки. Ці формули, наприклад, виконуються, якщо користувач натискає кнопку. У формулі поведінки часто доцільно задати змінну, яка використовуватиметься в інших формулах.

Загалом краще намагатися не використовувати змінні. Проте іноді лише змінна може забезпечити потрібний функціонал. Змінні створюються неявно й вводяться тоді, коли вони присутні у функціях, які встановлюють їхні значення.

Зіставлення можливостей Excel із Power Apps

Excel

Розгляньмо, як працює Excel. Клітинка може містити значення, як-от число чи рядок, або формулу, засновану на значеннях інших клітинок. Коли користувач вводить у клітинку інше значення, Excel автоматично переобчислює всі формули, які від нього залежать. Щоб забезпечити таку поведінку, не потрібно нічого програмувати.

У наведеному нижче прикладі клітинка A3 містить формулу A1+A2. Якщо A1 або A2 змінено, програма автоматично переобчислює значення в A3 з урахуванням таких змін. Щоб забезпечити цю поведінку, не потрібно писати код за межами самої формули.

Анімація, що демонструє переобчислення суми двох чисел в Excel.

Excel не має змінних. Значення клітинки з формулою змінюється залежно від вхідних даних, але програма не може запам’ятати результат формули та зберегти його в клітинці чи деінде. Якщо значення клітинки змінено, може змінитися вся електронна таблиця, а всі попередньо обчислені значення буде втрачено. Користувач Excel може копіювати та вставляти клітинки, але тільки вручну. Зробити це за допомогою формул неможливо.

Power Apps

За своєю поведінкою програми, створені в Power Apps, значною мірою нагадують Excel. Замість того щоб оновлювати клітинки, можна додавати елементи керування будь-де на екрані та присвоювати їм імена, щоб потім використовувати їх у формулах.

Наприклад, щоб відтворити поведінку Excel у програмі, можна додати елемент керування Текстовий підпис з іменем Label1, а також два елементи керування Введення тексту з іменами TextInput1 і TextInput2. Якщо після цього для властивості Text елемента керування Label1 задати значення 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.Longitude. Коли ви рухатиметеся, карта автоматично відстежуватиме ваше місцезнаходження.
  • Інші користувачі можуть оновлювати джерела даних. Наприклад, колеги з вашої робочої групи можуть оновлювати елементи в списку. Якщо оновити джерело даних, усі залежні формули автоматично переобчислюються з урахуванням оновлених даних. Крім того, наприклад, для властивості колекції Items можна задати значення Filter( SharePointList ), щоб автоматично відобразити новий фільтрований набір записів.

Переваги

Використання формул для створення програм має багато переваг.

  • Якщо ви вмієте працювати з Excel, ви вмієте працювати з Power Apps. Модель і мова формул у них однакові.
  • Якщо ви використовували інші засоби програмування, тільки уявіть, скільки коду знадобилося б, щоб створити ці приклади. У Visual Basic довелося б написати обробник подій для події змінення в кожному елементі керування введенням тексту. Код для обчислення в кожному з них надлишковий і може не синхронізуватися. Щоб цього уникнути, доведеться писати загальну підпрограму. У Power Apps ви зробили все це за допомогою єдиної формули довжиною в один рядок.
  • Щоб з’ясувати джерело тексту в елементі керування Label1, досить просто переглянути формулу у властивості Text. Жодним іншим чином на текст цього елемента керування вплинути не можна. У традиційному засобі програмування значення підпису може змінити будь-який обробник подій або підпрограма в будь-якій частині програми. Через це відстежити, де й коли змінено змінну, доволі складно.
  • Якщо користувач змінить значення елемента керування повзунком, а потім передумає, він може повернути повзунок у вихідне положення. Програма поводитиметься так, ніби нічого не змінилось: значення елементів керування залишаться такими ж, як і раніше. Таким чином тут, як і в Excel, можна експериментувати й пробувати різні варіанти без жодних наслідків.

Загалом, якщо можна отримати бажаний результат за допомогою формули, варто нею скористатися. Обробник формул Power Apps зробить усе за вас.

Підстави для використання змінних

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

Відобразити Опис
Програма із елементом керування для введення тексту, текстовим підписом та двома кнопками. Коли програма запускається, проміжний підсумок дорівнює 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 має вихідне значення blank.

    Коли він уперше натисне кнопку Додати й запуститься функція Set, змінній RunningTotal буде присвоєно значення RunningTotal + TextInput1.

    Функцію Set установлено як значення властивості OnSelect для кнопки «Додати».

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

    Set( RunningTotal, 0 )

    Функцію Set установлено як значення властивості OnSelect для кнопки «Очистити».

  5. Додайте елемент керування Текстовий підпис і присвойте його властивості Text значення RunningTotal.

    Ця формула переобчислюватиметься автоматично. Значення RunningTotal, що відображатиметься для користувача, змінюватиметься залежно від того, які кнопки він натискає.

    Значення властивості Text підпису – ім’я змінної.

  6. Перегляньте, як працює програма. Ми отримали арифмометр, описаний вище. Введіть число в текстове поле та натисніть кнопку Додати кілька разів. Зробивши це, поверніться до функціоналу розробки за допомогою клавіші Esc.

    Елемент керування введенням тексту містить значення, а підпис містить проміжний підсумок.

  7. Щоб відобразити значення глобальної змінної, виконайте одну з наведених нижче дій.

    • Якщо ви використовуєте версію Power Apps Studio для попереднього перегляду, виберіть Змінні в меню створення програми.

      Меню змінних та колекцій.

    • Якщо ви використовуєте класичну версію Power Apps Studio, виберіть меню Файл і виберіть Змінні на лівій панелі.

  8. Щоб відобразити всі місця, де визначено та використано змінну, позначте її у розділі Загальні змінні.

    Список розташувань, у яких використано змінну.

Типи змінних

Power Apps має три типи змінних.

Тип змінних Scope Опис Функції, що їх задають
Глобальні змінні Програма Найпростіші у використанні. Містить число, текстовий рядок, логічне значення, запис, таблицю тощо, на які можна посилатися з будь-якого місця програми. Установити
Змінні контексту Екран Чудово підходять для передавання значень на екран, подібно до параметрів, що передаються до процедури в інших мовах. На них можна посилатися лише на одному екрані. UpdateContext
Перейти
Колекції Програма Містять таблицю, на яку можна посилатися з будь-якої частини програми. Дають змогу змінювати вміст таблиці, а не задають її як єдине ціле. Їх можна зберегти на локальному пристрої для подальшого використання. Collect
ClearCollect

Створення та вилучення змінних

Усі змінні, зазначені у функціях Set, UpdateContext, Navigate, Collect або ClearCollect, створюються неявно. Щоб оголосити змінну та її тип, досить просто включити її в будь-яку з цих функцій будь-де в програмі. Жодна з цих функцій не створює змінні. Вони лише заповнюють змінні значеннями. Вам ніколи не доведеться явно оголошувати змінні, як в іншому засобі програмування. Усі введені елементи оголошуються неявно.

Наприклад, можна задати елемент керування "кнопка", використавши для OnSelect формулу Set( X, 1 ). Ця формула задає X як змінну числового типу. X можна використовувати у формулах як число. Коли ви відкриєте програму, ця змінна матиме значення blank, доки ви не натиснете кнопку. Якщо натиснути кнопку, змінній X присвоюється значення 1.

Якщо додати іншу кнопку й установити для її властивості OnSelect значення Set( X, "Привіт" ), станеться помилка, оскільки тип (текстовий рядок) не відповідає типу в попередній функції Set, де він числовий. Усі неявні визначення змінної слід узгоджувати за типом. Ще раз підкреслимо, що все це трапилося тому, що X згадано у формулах, а не через те, що якусь із них фактично виконано.

Щоб видалити змінну, видаліть усі функції Set, UpdateContext, Navigate, Collect і ClearCollect, які неявно її задають. Без них змінна не існує. Крім того, необхідно видалити будь-які посилання на змінну, оскільки вони спричинятимуть помилку.

Час життя змінної та початкове значення

Коли програма виконується, усі змінні зберігаються в пам’яті. Якщо закрити програму, усі значення, які зберігаються в змінних, буде втрачено.

За допомогою функцій Patch або Collect вміст змінної можна зберегти в джерело даних. Крім того, за допомогою функції SaveData можна зберігати значення в колекціях на локальному пристрої.

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

Зчитування значень змінних

Щоб зчитати значення змінної, слід скористатися її ім’ям. Наприклад, змінну можна визначити за допомогою цієї формули:

Set( Radius, 12 )

Потім змінну Radius можна використовувати скрізь, де потрібно вказати це число. Її просто буде замінено на 12.

Pi() * Power( Radius, 2 )

Якщо змінна контексту має таке саме ім’я, як і глобальна змінна або колекція, змінна контексту має пріоритет. Однак ви все одно можете посилатися на глобальну змінну або колекцію, якщо використовуєте оператор неоднозначності[@Radius].

Використання змінної контексту

Давайте подивимося, як створити арифмометр, використовуючи замість глобальної змінної змінну контексту.

Нижче описано принципи дії змінних контексту.

  • Неявно задати та встановити змінні контексту можна за допомогою функції UpdateContext або Navigate. Коли запускається програма, усі змінні контексту мають вихідне значення blank.
  • Змінні контексту можна оновити за допомогою записів. В інших засобах програмування для присвоювання зазвичай використовується оператор «=», як-от «x = 1». Для змінних контексту скористайтеся натомість синтаксисом { x: 1 }. Якщо ви використовуєте змінну контексту, указуйте її ім’я безпосередньо (без синтаксису запису).
  • Змінну контексту можна також задати, якщо екран відображається за допомогою функції Navigate. Якщо уявити що екран – це своєрідна процедура або підпрограма, такий підхід нагадуватиме передавання параметра в інших засобах програмування.
  • За винятком функції Navigate, область дії контекстних змінних обмежується контекстом одного екрана, у якому вони отримали своє ім’я. Їх не можна використовувати або встановлювати за межами цього контексту.
  • Змінні контексту можуть містити будь-яке значення: рядки, числа, записи, таблиці тощо.

Перебудуймо наш арифмометр так, щоб у ньому використовувалася змінна контексту.

  1. Додайте елемент керування введенням тексту з ім’ям TextInput1 і дві кнопки з іменами Button1 і Button2.

  2. Задайте для властивості Text елемента Button1 значення "Додати", а для властивості Text елемента Button2 – значення "Очистити".

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

    UpdateContext( { RunningTotal: RunningTotal + TextInput1 } )

    Сама наявність цієї формули задає RunningTotal як змінну контексту, яка (завдяки оператору +) містить число. На RunningTotal можна посилатися будь-де на цьому екрані. Коли користувач тільки-но відкриває цю програму, змінна RunningTotal має вихідне значення blank.

    Коли він уперше натисне кнопку Додати й запуститься функція UpdateContext, змінній RunningTotal буде присвоєно значення RunningTotal + TextInput1.

    Властивість OnSelect кнопки «Додати» з updatecontext.

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

    UpdateContext( { RunningTotal: 0 } )

    Знову UpdateContext використовується з формулою UpdateContext( { RunningTotal: 0 } ).

    Властивість OnSelect кнопки «Очистити» з updatecontext.

  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 кнопки «Додати» з collect.

  4. Щоб перфострічка очищувалася, коли користувач натискає кнопку Очистити, установіть як значення властивості OnSelect таку формулу:

    Clear( PaperTape )

    Властивість OnSelect кнопки «Очистити» clear.

  5. Щоб відобразити проміжний підсумок, додайте підпис і задайте як значення його властивості Text таку формулу:

    Sum( PaperTape, Value )

    Властивість Text підпису.

  6. Щоб запустити арифмометр, перейдіть у режим попереднього перегляду натисканням клавіші F5, введіть числа в елемент керування введенням тексту та натисніть кнопки.

    В елементі керування введенням тексту відображатиметься значення, а в підписі – проміжний підсумок.

  7. Щоб повернутися до стандартної робочої області, натисніть клавішу Esc.

  8. Щоб відобразити перфострічку, вставте елемент керування Таблиця даних і задайте як значення його властивості Items таку формулу:

    PaperTape

    В області праворуч виберіть Редагувати поля, а тоді виберіть Додати поле, виберіть стовпець Значення, і виберіть Додати, щоб показати його.

    Таблиця даних, у якій відображаються значення, додані до колекції.

  9. Щоб переглянути значення у вашій колекції, виконайте одну з наведених нижче дій.

    • Якщо ви використовуєте версію Power Apps Studio для попереднього перегляду, виберіть Змінні в меню створення програми, а потім виберіть Колекції.

    • Якщо ви використовуєте класичну версію, виберіть Power Apps Studio пункт Колекції в меню Файл .

  10. Щоб зберегти та отримати колекцію, додайте два додаткові елементи керування "кнопка" та задайте для їхньої властивості Text значення Завантажити та Зберегти. Як значення властивості OnSelect кнопки Завантажити задайте таку формулу:

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

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

    Властивість OnSelect кнопки "Завантажити".

  11. Як значення властивості OnSelect кнопки Зберегти задайте таку формулу:

    SaveData( PaperTape, "StoredPaperTape" )

    Властивість OnSelect* кнопки "Зберегти".

  12. Знову перегляньте, як працює програма. Для цього натисніть клавішу F5, введіть числа в елемент керування введенням тексту та натисніть кнопки. Натисніть кнопку Зберегти. Закрийте та перезавантажте програму й натисніть кнопку Завантажити, щоб перезавантажити колекцію.

Примітка

Функції SaveData і LoadData працюють у Power Apps Mobile, але не працюють у Power Apps Studio та веб-програвачі Power Apps.

Примітка

Розкажіть нам про свої уподобання щодо мови документації? Візьміть участь в короткому опитуванні. (зверніть увагу, що це опитування англійською мовою)

Проходження опитування займе близько семи хвилин. Персональні дані не збиратимуться (декларація про конфіденційність).