Funktionen With
Gælder for: Lærredapps Skrivebordsflow Modelbaserede apps Power Pages 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 holder værdien fra disse funktioner længe 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( Record; Formel )
- Optag – 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. Med bruges til at registrere alle inputværdierne sammen, hvilket gør det nemt at adskille dem fra selve beregningen.
Indlejret 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:
- Opret en ny app.
- Tilføj et Slider-kontrolelement, og giv det navnet RateSlider. Indstil dets Max-egenskab til 48.
- Tilføj en Label-kontrolelement til venstre for skyderkontrolelementet. Angiv dets Text-egenskab til "Rentesats:".
- Tilføj et Label-kontrolelement til højre for skyderkontrolelementet. Angiv dets egenskab Text til formlen RateSlider/8 & " %".
- Tilføj endnu et Slider-kontrolelement, og giv det navnet AmountSlider. Indstil dets Max-egenskab til 60.
- Tilføj en Label-kontrolelement til venstre for dette skyderkontrolelement. Angiv dets Text-egenskab til "Lånebeløb:".
- Tilføj et Label-kontrolelement til højre for dette skyderkontrolelement. Angiv dets Text-egenskab til formlen AmountSlider/8 * 10000.
- Tilføj endnu et Slider-kontrolelement, og giv det navnet YearsSlider. Indstil dets Max-egenskab til 40.
- Tilføj en Label-kontrolelement til venstre for dette skyderkontrolelement. Angiv dets Text-egenskab til "Antal år:".
- Tilføj et Label-kontrolelement til højre for dette skyderkontrolelement. Angiv dets Text-egenskab til formlen YearsSlider.
- Tilføj et Label-kontrolelement, og indstil dets Text-egenskab til den formel, som vises ovenfor:
- 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.