Функция With

Применимо к: приложениям на основе холста классическим потокам приложениям на основе модели интерфейсу командной строки Power Platform

Вычисляет значения и выполняет действия для одной записи, включая встроенные записи именованных значений.

Описание

Функция With вычисляет формулу для одной записи. Формула может рассчитать значение и (или) выполнить действия, например изменить данные или работу с подключением. Используйте функцию ForAll, чтобы оценить формулу для всех записей в таблице записей.

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

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

Используйте функцию With для доступа к полям записи, которые возвращаются такими функциями, как, например, Patch или Match. Функция With содержит значение из этих функций достаточно долго, чтобы использовать его в дальнейших вычислениях или действиях.

Если аргумент Record функции With является ошибкой, эта ошибка будет возвращена функцией и Formula не будет оцениваться.

Синтаксис

With( Record, Formula )

  • Record — обязательный аргумент. Запись, с которой выполняется действие. Для значений имен используйте встроенный синтаксис { name1: value1, name2: value2, ... }
  • Formula — обязательный аргумент. Формула, вычисляемая для записи Record. Формула может ссылаться на любое из полей записи 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, умноженное на 10000, охватывая диапазон от 10000 до 600000.

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

Вот подробные инструкции по созданию этого приложения:

  1. Создайте новое приложение.
  2. Добавьте элемент управления Slider (Ползунок) и назовите его RateSlider. Для свойства Max задайте значение 48.
  3. Добавьте элемент управления Label (Метка) слева от ползунка. Задайте для его свойства Text значение "Interest Rate:" (Процентная ставка:).
  4. Добавьте элемент управления Label (Метка) справа от ползунка. Задайте для его свойства Text формулу RateSlider/8 & " %".
  5. Добавьте другой элемент управления Slider (Ползунок) и назовите его AmountSlider. Для свойства Max задайте значение 60.
  6. Добавьте элемент управления Label (Метка) слева от этого ползунка. Задайте для его свойства Text значение "Loan Amount:" (Сумма кредита:).
  7. Добавьте элемент управления Label (Метка) справа от этого ползунка. Задайте для его свойства Text формулу AmountSlider/8 * 10000.
  8. Добавьте другой элемент управления Slider (Ползунок) и назовите его YearsSlider. Для свойства Max задайте значение 40.
  9. Добавьте элемент управления Label (Метка) слева от этого ползунка. Задайте для его свойства Text значение "Number of Years:" (Число лет:).
  10. Добавьте элемент управления Label (Метка) справа от этого ползунка. Задайте для его свойства Text формулу YearsSlider.
  11. Добавьте элемент управления Label и задайте в качестве значения свойства Text формулу, показанную выше.
  12. Добавьте элемент управления Label (Метка) слева от последнего ползунка. Задайте для его свойства 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 для преобразования в число перед выполнением математических операций.

Сопоставить запись в компоненте

См. Сопоставить запись.