Funkcja With

Dotyczy: Aplikacje oparte na kanwie Przepływy pulpitu Aplikacje oparte na modelach Power Platform CLI

With – oblicza wartości i wykonuje akcje dla pojedynczego rekordu, łącznie z wbudowanymi rekordami nazwanych wartości.

Opis

Użyj funkcji With, aby oszacować formułę dla pojedynczego rekordu. Formuła może obliczać wartość i/lub wykonywać akcje, takie jak modyfikowanie danych lub współdziałanie z połączeniem. Aby oszacować formułę dla wszystkich rekordów w tabeli rekordów, należy użyć funkcji ForAll function.

Pola aktualnie przetwarzanego rekordu są dostępne w obrębie formuły. Użyj operatora ThisRecord lub po prostu odwołuj się do pól, używając ich nazw, tak jak w przypadku każdej innej wartości. Możesz też użyć operatora As w celu nadania nazwy przetwarzanemu rekordowi, co umożliwi utworzenie bardziej zrozumiałej formuły oraz dostęp do zagnieżdżonych rekordów. Aby uzyskać więcej informacji, zobacz poniższe przykłady oraz temat Praca z zakresem rekordów.

Użyj With, aby poprawić czytelność złożonych formuł, dzieląc je na mniejsze nazwane podformuły. Te nazwane wartości działają tak samo, jak proste zmienne lokalne, które są ograniczone do zakresu With. Ta sama składnia rekordu wbudowanego używana z funkcją UpdateContext może być używana razem z With. Użycie opcji With jest preferowane w stosunku do zmiennych kontekstowych lub globalnych, ponieważ jest to samodzielna, łatwa do zrozumienia i może być używana w dowolnym kontekście formuł deklaracyjnych.

Użyj funkcji With, aby uzyskać dostęp do pól rekordu, które są zwracane przez funkcje, takie jak Patch lub Match. With zawiera wartość z tych funkcji, które są wystarczająco długie, aby można je było wykorzystać w dalszych obliczeniach i działaniach.

Jeśli argument Rekord dla With jest błędem, błąd ten zostanie zwrócony przez funkcję i Formuła nie zostanie oceniony.

Składnia

With( Rekord, Formuła )

  • Rekord – wymagane. Rekord wymaga podjęcia akcji. W przypadku wartości nazw należy użyć składni wbudowanej { name1: value1, name2: value2, ... }
  • Formuła - wymagane. Formuła obliczana dla Rekordu. Formuła może odwoływać się do każdego pola Rekordu bezpośrednio jako zakresu rekordu.

Przykłady

Proste wartości nazwane

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

W tym przykładzie został użyty rekord o nazwanych wartościach w celu obliczenia objętości cylindra. With jest używana do przechwytywania wszystkich wartości wejściowych razem, co ułatwia ich oddzielenie od samego obliczenia.

Zagnieżdżony w

Kalkulator odsetek za pomocą funkcji 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
      )
)

W tym przykładzie zagnieżdżono funkcję With, aby utworzyć obliczenia dwuwarstwowe dla comiesięcznych spłat pożyczki hipotecznej. O ile nie ma konfliktu, wszystkie elementy zewnętrzne wartości o nazwie With są dostępne w obrębie wewnętrznego With.

Ponieważ regulatory suwaków mogą poruszać się z przyrostem 1, suwaki są dzielone lub mnożone w celu skutecznego utworzenia przyrostu niestandardowego. W przypadku stopy procentowej RateSlider ma wartość właściwości Max ustawioną na 48, podzieloną przez 8 na wartość procentową przyrostu stopnia 1/8 i podzieloną na 100 w celu przeprowadzenia konwersji z wartości procentowej na ułamek dziesiętny, obejmującą z zakresu od 0,125% do 6%. W przypadku kwoty pożyczki AmountSlider ma właściwość Max ustawioną na 60 i pomnożoną przez 10 000, obejmującą zakres 10 000 do 600 000.

With jest automatycznie przeliczany jako suwak przeniesienia i zostanie wyświetlona nowa opłata za pożyczkę. Nie są używane żadne zmienne i nie jest konieczne używanie właściwości OnChange kontrolek suwaka.

Szczegółowe instrukcje dotyczące tworzenia tej aplikacji są następujące:

  1. Tworzenie nowej aplikacji.
  2. Dodaj kontrolkę Slider i nadaj jej nazwę RateSlider. Ustaw jego właściwość Max na 48.
  3. Dodaj kontrolkę Label po lewej stronie kontrolki suwaka. Ustaw jej właściwość Text na „Oprocentowanie:”.
  4. Dodaj kontrolkę Label po prawej stronie kontrolki suwaka. Ustaw właściwość Text na formułę RateSlider/8 & " %"=.
  5. Dodaj kolejną kontrolkę Slider i nadaj jej nazwę AmountSlider. Ustaw jego właściwość Max na 60.
  6. Dodaj kontrolkę Label po lewej stronie tej kontrolki suwaka. Ustaw jej właściwość Text na „Wartość pożyczki:”.
  7. Dodaj kontrolkę Label po prawej stronie tej kontrolki suwaka. Ustaw wwłaściwość Text na formułę AmountSlider/8 * 10000.
  8. Dodaj kolejną kontrolkę Slider i nadaj jej nazwę YearsSlider. Ustaw jego właściwość Max na 40.
  9. Dodaj kontrolkę Label po lewej stronie tej kontrolki suwaka. Ustaw jej właściwość Text na „Liczba lat:”.
  10. Dodaj kontrolkę Label po prawej stronie tej kontrolki suwaka. Ustaw wwłaściwość Text na formułę YearsSlider.
  11. Dodaj kontrolkę Label i ustaw jej właściwość Text na formułę pokazaną powyżej:
  12. Dodaj kontrolkę Label po lewej stronie poprzedniej kontrolki etykiety. Ustaw jej właściwość Text na „Cykliczna płatność miesięczna:”.

Klucz podstawowy zwrócony z 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
              )
      )
)

W tym przykładzie dodano rekord do tabeli Zamówienie w SQL Server. Następnie używa zwróconego klucza podstawowego dla zamówienia, zwróconego przez funkcję Patch w polu OrderID, aby utworzyć powiązane rekordy w tabeli OrderDetails.

Wyodrębnione wartości w wyrażeniach regularnych

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)

W tym przykładzie wyrównuje godziny, minuty i sekundy z wartości czasu trwania ISO 8601, a następnie korzysta z tych podrzędnych w celu utworzenia wartości data/godzina.

Należy pamiętać, że chociaż dopasowania podrzędne zawierają cyfry, to wciąż są w ciągu tekstowym. Użyj funkcji Value, aby przekonwertować na liczbę przed wykonaniem operacji matematycznych.

Mapowanie rekordu w składniku

Zobacz: Mapowanie rekordów.