Funktionen With

Gäller: Arbetsyteappar Datorflöden Modellbaserade appar Power Platform CLI

Beräknar värden och utför åtgärder för en enskild post, inklusive infogade poster med namngivna värden.

Beskrivning

With-funktionen utvärderar en formel för en enskild post. Formeln kan beräkna ett värde och/eller utföra åtgärder, som att t.ex. modifiera data eller arbeta med en anslutning. Använd funktionen ForAll för att utvärdera en formel för alla poster i en tabell med poster.

Fälten för den post som bearbetas för närvarande är tillgängliga i formeln. Använd ThisRecord-operatorn eller referera bara till fälten med namn på samma sätt som med andra värden. As-operatorn kan också användas för att namnge posten som bearbetas, vilket kan göra att formeln blir lättare att förstå och göra kapslade poster tillgängliga. Mer information finns i exemplen nedan och i arbeta med postomfattning.

Använd With för att förbättra läsbarheten i komplexa formler genom att dela upp den i mindre namngivna delformler. De här namngivna värdena fungerar som enkla lokala variabler som är begränsade till omfånget med With. Samma syntax för infogad post som används med UpdateContext-funktionen kan användas med With. Använda With är att föredra framför sammanhang eller globala variabler som de är självständiga, lätta att förstå och som kan användas i alla deklarerande deklarativ formelsammanhang.

Använd With för att komma åt fälten i posten som returneras av funktioner, t.ex. Patch eller Match. With håller värdet för de här funktionerna tillräckligt länge för att kunna användas i ytterligare beräkningar eller åtgärder.

Om argumentet Record till With är ett fel returneras felet av funktionen och formeln utvärderas inte.

Syntax

With( Record, Formula )

  • Record – obligatoriskt. Posten behöver åtgärdas. För namnvärden använder du infogad syntaxen { name1: value1, name2: value2, ... }
  • Formula – obligatoriskt. Formel som ska utvärderas för Post. Formeln kan referera till alla fält för post direkt som postomfång.

Exempel

Enkla namngivna värden

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

I det här exemplet används en post med namngivna värden för att beräkna volymen på en cylinder. With används för att samla in alla inmatningsvärden tillsammans, vilket gör det enkelt att åtskilja dem från beräkningen.

Kapslade med

Ränteräknare med With-funktionen.

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
      )
)

I det här exemplet kapslas With-funktioner i för att skapa en beräkning på två nivåer för månadsbetalningar av bolån. Så länge det inte finns några konflikter är alla de yttre With namngivna värden tillgängliga i den inre With.

Eftersom reglagen endast kan flyttas i steg om 1, delas eller multipliceras skjutreglaget för att skapa en anpassad ökning på ett effektivt sätt. När det gäller räntesatsen, har RateSlider egenskapen Max inställd på 48, delat med 8 för en 1/8 procentenhetsökning och delat med 100 för att konvertera från ett procenttal till ett decimaltal som täcker intervallet 0,125 % till 6 %. När det gäller lånebeloppet AmountSlider har egenskapen Max inställd på 60 och multiplicerats med 10 000 som omfattar intervallet 10 000 till 600 000.

With räknas automatiskt om när reglagen flyttas och den nya lånebetalningen visas. Inga variabler används och det finns inget behov av att använda OnChange-egenskapen för skjutreglagen.

Nedan följer detaljerade instruktioner om hur du skapar det här programmet:

  1. Skapa ett nytt program.
  2. Lägg till en Slider-kontroll och ge den namnet RateSlider. Ange dess egenskap Max till 48.
  3. Lägg till en Label-kontroll till vänster om skjutreglaget. Ange Text-egenskapen som "Ränta:".
  4. Lägg till en Label-kontroll till höger om skjutreglaget. Ange dess Text-egenskap till formeln RateSlider/8 & " %".
  5. Lägg till en annan Slider-kontroll och ge den namnet AmountSlider. Ange dess egenskap Max till 60.
  6. Lägg till en Label-kontroll till vänster om detta skjutreglage. Ange Text-egenskapen som "Lånebelopp:".
  7. Lägg till en Label-kontroll till höger om detta skjutreglage. Ange dess Text-egenskap till formeln AmountSlider/8 * 10000.
  8. Lägg till en annan Slider-kontroll och ge den namnet YearsSlider. Ange dess egenskap Max till 40.
  9. Lägg till en Label-kontroll till vänster om detta skjutreglage. Ange egenskapen Text till "Antal år:".
  10. Lägg till en Label-kontroll till höger om detta skjutreglage. Ange dess Text-egenskap till formeln YearsSlider.
  11. Lägg till kontrollen Label och ange egenskapen Text till formeln som visas ovan:
  12. Lägg till en Label-kontroll till vänster om den sista label-kontrollen. Ange Text-egenskapen till "Återkommande månadsbetalning:".

Primär nyckel returnerades från korrigeringsfil

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
              )
      )
)

I det här exemplet läggs en post till i Order-tabellen i SQL Server. Sedan används den returnerade primära nyckeln för ordern, returnerad av funktionen Patch i fältet OrderID för att skapa relaterade poster i tabellen OrderDetails.

Extraherade värden med ett reguljärt uttryck

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)

I det här exemplet extraheras timmarna, minuter och sekunder från ett varaktighetsvärde på ISO 8601 och sedan används dessa under matchningar för att skapa ett datum/tid-värde.

Observera att även om underordnade matchningar innehåller siffror finns de fortfarande i en textsträng. Använd funktionen Value för att konvertera till ett tal innan du utför matematiska åtgärder.

Mappa en post i en komponent

Se Mappa post.