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


With функция

Применимо к: Приложения На основе холста Copilot Studio Desktop поддерживают функции Power Platform CLI Dataverse, управляемые моделью

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

Описание

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

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

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

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

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

Синтаксис

With( Запись, формула )

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

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

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