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


З функцією

Застосовується до: програм Canvas Потоків робочого столу Програм, Power Platform керованих моделлю, CLI

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

Опис

Функція With обчислює формулу для одного запису. Формула може обчислювати значення та/або виконувати дії, як-от змінювати дані або працювати з підключенням. Використовуйте функцію ForAll, щоб обчислити формулу для всіх записів у таблиці записів.

Поля оброблюваного запису доступні у формулі. Використовуйте оператор ThisRecord або просто вкажіть посилання на поля за іменем, як у випадку з будь-яким іншим значенням. Оператор As також можна використовувати для призначення імені оброблюваного запису, що спростить сприймання формули та зробить вкладені записи доступними. Додаткову інформацію див. у прикладах нижче та в статті Робота з областю застосування записів.

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

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

Якщо аргумент Record функції With має помилку, функція поверне цю помилку, а формулу не буде обчислено.

Синтаксис

With( Record, Formula )

  • Record – обов’язковий аргумент. Це запис, для якого потрібно виконати дію. Для значень імен використовуйте вбудований синтаксис { name1: value1, name2: value2, ... }
  • Formula — обов’язковий аргумент. Формула, яка обчислюється для запису Record. У формулі можна посилатися на будь-яке з полів запису безпосередньо в області запису.

Приклади

Прості іменовані значення

With( { radius: 10,
        height: 15 },
    Pi() * (radius*radius) * height
)
// Result: 4712.38898038 (as shown in a label control)

У цьому прикладі використовується запис іменованих значень для обчислення об’єму циліндра. Функція With використовується для збору всіх вхідних значень, що спрощує їх відділення від самого обчислення.

Вкладені функції With

Калькулятор відсотків використовує функцію With.

With( { AnnualRate: RateSlider/8/100,        // slider moves in 1/8th increments and convert to decimal
        Amount: AmountSlider*10000,          // slider moves by 10,000 increment
        Years: YearsSlider,                  // slider moves in single year increments, no adjustment required
        AnnualPayments: 12 },                // number of payments per year
      With( { r: AnnualRate/AnnualPayments,  // interest rate
              P: Amount,                     // loan amount
              n: Years*AnnualPayments },     // number of payments
            r*P / (1 - (1+r)^-n)             // standard interest calculation
      )
)

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

Оскільки елемент керування "повзунок" може пересуватися лише на 1 крок приросту, повзунки діляться або множаться для ефективного створення спеціального кроку приросту. У випадку з відсотковою ставкою для RateSlider властивість Max встановлено на 48, поділено на 8 для приросту на 1/8 відсотка і поділено на 100 для можливості перетворення з відсотка на десяткове значення, що охоплює діапазон від 0,125% до 6%. У випадку із сумою позики для AmountSlider властивість Max встановлено на 60 і помножено на 10 000, що охоплює діапазон від 10 000 до 600 000.

Функція With автоматично переобчислюється з рухом повзунків, і відображається новий платіж за кредитом. Змінні не використовуються, і не потрібно використовувати властивість OnChange елементів керування "повзунок".

Нижче наведено докладні інструкції щодо створення цієї програми:

  1. Створіть нову програму.
  2. Додайте елемент керування Повзунок і назвіть його RateSlider. Встановіть для властивості Max значення 48.
  3. Додайте елемент керування Надпис ліворуч від елемента керування "повзунок". Для властивості Text задайте значення "Interest Rate:" (Відсоткова ставка).
  4. Додайте елемент керування Надпис праворуч від елемента керування "повзунок". Встановіть для його властивості Text формулу RateSlider/8 & " %".
  5. Додайте ще один елемент керування Повзунок і назвіть його AmountSlider. Встановіть для властивості Max значення 60.
  6. Додайте елемент керування Надпис ліворуч від цього елемента керування "повзунок". Для властивості Text задайте значення "Loan Amount:" (Сума позики).
  7. Додайте елемент керування Надпис праворуч від цього елемента керування "повзунок". Для властивості Text задайте формулу AmountSlider/8 * 10000.
  8. Додайте ще один елемент керування Повзунок і назвіть його YearsSlider. Встановіть для властивості Max значення 40.
  9. Додайте елемент керування Надпис ліворуч від цього елемента керування "повзунок". Для властивості Text задайте значення "Number of Years:" (Кількість років).
  10. Додайте елемент керування Надпис праворуч від цього елемента керування "повзунок". Для властивості Text задайте формулу YearsSlider.
  11. Додайте елемент керування Надпис і задайте для його властивості Text показану вище формулу:
  12. Додайте елемент керування Надпис ліворуч від останнього елемента керування "надпис". Задайте для властивості Text значення "Recurring Monthly Payment:" (Повторюваний щомісячний платіж).

Первинний ключ, який повернула функція Patch

With( Patch( Orders, Defaults( Orders ), { OrderStatus: "New" } ),
      ForAll( NewOrderDetails,
              Patch( OrderDetails, Defaults( OrderDetails ),
                     { Order: OrderID,          // from With's first argument, primary key of Patch result
                       Quantity: Quantity,      // from ForAll's NewOrderDetails table
                       ProductID: ProductID }   // from ForAll's NewOrderDetails table
              )
      )
)

У цьому прикладі додається запис до таблиці Order в SQL Server. Потім використовується повернутий первинний ключ для замовлення, повернутий функцією Patch в полі OrderID, щоб створити пов’язані записи в таблиці OrderDetails.

Видобуті значення з регулярним виразом

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
    Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
// Result: 2:01 AM (as shown in a label control, use the Text function to see the seconds)

Цей приклад видобуває години, хвилини та секунди зі значення тривалості ISO 8601, а потім застосовує ці вкладені збіги, щоб створити значення дати й часу.

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

Зіставлення запису в компоненті

Див. Зіставлення записів.