Funktionen With

Gælder for: Lærredsapps Skrivebordsflows Modeldrevne apps Power Platform CLI

Beregner værdier og udfører handlinger for en enkelt post, herunder indbyggede poster for navngivne værdier.

Beskrivelse

Funktionen With evaluerer en formel for en enkelt post. Formlen kan beregne en værdi/udføre handlinger, f.eks. ændre data eller arbejde med en forbindelse. Brug funktionen ForAll til at evaluere en formel for alle poster i en tabel med poster.

Felter i den post, der behandles i øjeblikket, er tilgængelige i formlen. Brug ThisRecord-operatoren, eller referer blot til feltet med navn, som du ville gøre med en vilkårlig anden værdi. As-operatoren kan også bruges til at navngive den post, der behandles, hvilket kan hjælpe med at gøre din formel mere forståelig og gøre indlejrede poster tilgængelige. Du kan få flere oplysninger i eksemplerne nedenfor og arbejdet med posternes omfang.

Brug With til at forbedre læsbarheden af komplekse formler ved at dele dem i mindre navngivne under formler. Disse navngivne værdier fungerer på samme måde som simple lokale variabler, der er begrænset til omfanget af With. Den samme indbyggede postsyntaks, der bruges sammen med funktionen UpdateContext, kan bruges sammen med With. Brug af With er foretrukket over kontekstafhængige eller globale variabler, da den er komplet, let at forstå og kan bruges i alle deklarative formelkontekster.

Brug With til at få adgang til felterne i den post, der returneres af funktioner, som f.eks Patch eller Match. With indeholder værdien fra disse funktioner, der er lange nok til at blive brugt i yderligere beregninger eller handlinger.

Hvis argumentet Post til Med er en fejl, returneres denne fejl af funktionen, og Formel evalueres ikke.

Syntaks

Med( Post, Formel )

  • Record – påkrævet. Den post, som handlingen skal udføres på. I forbindelse med navneværdier skal du bruge den indbyggede syntaks { name1: value1, name2: value2, ... }
  • Formel – påkrævet. Den formel, der skal evalueres for Record. Formlen kan referere til et hvilket som helst af felterne i Recorddirekte som et postområde.

Eksempler

Simple navngivne værdier

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

I dette eksempel bruges en post med navngivne værdier til at beregne omfanget af en cylinder. With bruges til at hente alle inputværdierne sammen, hvilket gør det nemt at adskille dem fra selve beregningen.

Indlejret With

Renteberegning ved hjælp af funktionen 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
      )
)

I dette eksempel indlejres With-funktioner for at oprette en dobbeltniveauberegning for de månedlige prioritetsbetalinger. Hvis der ikke er nogen konflikt, er alle de ydre navngivne With-værdier tilgængelige i den inderste With.

Da skyderkontrolelementer kun kan flyttes i trin på 1, deles eller multipliceres skyderne for at oprette en effektiv grad et brugerdefineret interval. Angående rentesatsen er Max-egenskaben for RateSlider indstillet til 48, divideret med 8 for et 1/8 procentpoint interval og divideret med 100 for at konvertere fra en procent til et decimaltal, der dækker intervallet 0,125 % til 6 %. Hvis der er tale om lånebeløbet, er egenskaben Max for AmountSlider indstillet til 60 og multipliceret med 10.000, der dækker området 10.000 til 600.000.

With genberegnes automatisk, efterhånden som skyderne flyttes, og den nye lånebetaling vises. Der bruges ingen variabler, og der er ingen grund til at bruger skyderkontrolelementets onChange-egenskab.

Her er en detaljeret vejledning i at oprette denne app:

  1. Opret en ny app.
  2. Tilføj et Slider-kontrolelement, og giv det navnet RateSlider. Indstil dets Max-egenskab til 48.
  3. Tilføj en Label-kontrolelement til venstre for skyderkontrolelementet. Angiv dets Text-egenskab til "Rentesats:".
  4. Tilføj et Label-kontrolelement til højre for skyderkontrolelementet. Angiv dets egenskab Text til formlen RateSlider/8 & " %".
  5. Tilføj endnu et Slider-kontrolelement, og giv det navnet AmountSlider. Indstil dets Max-egenskab til 60.
  6. Tilføj en Label-kontrolelement til venstre for dette skyderkontrolelement. Angiv dets Text-egenskab til "Lånebeløb:".
  7. Tilføj et Label-kontrolelement til højre for dette skyderkontrolelement. Angiv dets Text-egenskab til formlen AmountSlider/8 * 10000.
  8. Tilføj endnu et Slider-kontrolelement, og giv det navnet YearsSlider. Indstil dets Max-egenskab til 40.
  9. Tilføj en Label-kontrolelement til venstre for dette skyderkontrolelement. Angiv dets Text-egenskab til "Antal år:".
  10. Tilføj et Label-kontrolelement til højre for dette skyderkontrolelement. Angiv dets Text-egenskab til formlen YearsSlider.
  11. Tilføj et Label-kontrolelement, og indstil dets Text-egenskab til den formel, som vises ovenfor:
  12. Tilføj en Label-kontrolelement til venstre for det sidste kontrolelement. Angiv dets Text-egenskab til "Tilbagevendende månedlig betaling:".

Primærnøgle returneret fra 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
              )
      )
)

I dette eksempel føjes en post til tabellen Ordre i SQL Server. Derefter bruges den returnerede primærnøgle til ordren, der returneres af funktionen Patch i feltet Ordrenr, til at oprette tilknyttede poster i tabellen OrderDetails.

Udpakkede værdier med et regulært udtryk

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 dette eksempel udtrækkes time-, minut- og sekundtal fra en ISO 8601-varighedsværdi, og derefter bruges disse underresultater til at oprette en dato/klokkeslætsværdi.

Bemærk, at selvom underresultater indeholder tal, findes de stadig i en tekststreng. Brug funktionen Value til at konvertere til et tal, før du udfører matematiske handlinger.

Tilknytte en post i en komponent

Se Tilknytte post.