Del via


With-funksjon

Gjelder: Lerretsapper Skrivebordsflyt Modelldrevne apper Power Platform CLI

Beregner verdier og utfører handlinger for en enkelt post, inkludert innebygde poster med navngitte verdier.

Beskrivelse

Bruk With-funksjonen til å evaluere en formel for én enkelt oppføring. Formelen kan beregne en verdi og/eller utføre handlinger, for eksempel endring av data eller arbeide med en tilkobling. Bruk ForAll-funksjonen til å evaluere en formel for alle oppføringene i en oppføringstabell.

Feltene for oppføringen som blir behandlet er tilgjengelige i formelen. Bruk ThisRecord-operatoren eller bare referer til felt etter navn, på samme måte som andre verdier. As-operatoren kan også brukes til å gi navn til oppføringen som blir behandlet, noe som kan gjøre det enklere å forstå og ta i bruk nestede oppføringer. Hvis du vil ha mer informasjon, kan du se eksemplene nedenfor og arbeide med oppføringsomfang.

Bruk With til å forbedre lesbarheten til komplekse formler ved å dele den i mindre, navngitte delformler. Disse navngitte verdiene fungerer som enkle lokale variabler som er begrenset til omfanget av With. Den samme syntaksen for innebygd oppføring som brukes med UpdateContext-funksjonen, kan brukes sammen med With. Bruk av With er foretrukket fremfor kontekstvariabler eller globale variabler siden den er selvstendig, enkel å forstå og kan brukes i en forklarende formelkontekst.

Bruk With til å få tilgang til feltene i oppføringen som returneres av funksjoner som for eksempel Patch eller Match. With beholder verdien fra disse funksjonene lenge nok til å at de kan brukes i flere beregninger eller handlinger.

Hvis Record-argumentet til With er en feil, returneres denne feilen av funksjonen, og Formel evalueres ikke.

Syntaks

With( Record, Formula )

  • Record – obligatorisk. Oppføringen som krever handling. For navneverdier bruker du den innebygde syntaksen { name1: value1, name2: value2, ... }
  • Formula – obligatorisk. Formelen som skal evalueres Oppføring. Formelen kan referere til én eller flere av av feltene for Oppføring direkte som et oppføringsområde.

Eksempler

Enkle navngitte verdier

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

I dette eksemplet brukes en oppføring med navngitte verdier til å beregne volumet i en sylinder. With brukes til å fange opp alle inndataverdiene sammen, noe som gjør det enkelt å skille dem fra selve beregningen.

Nestet With

Rentekalkulator bruke With-funksjon.

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

Dette eksemplet nester With-funksjoner for å opprette en beregning på to nivåer for månedlige låneinnbetalinger. Så lenge det ikke er noen konflikt, er alle ytre With navngitte verdier tilgjengelige i den indre With.

Siden glidekontrollene bare kan flytte i trinn på 1, blir glidebryterne delt eller multiplisert for å skape et tilpasset trinn effektivt. Når det gjelder rentesatsen, har RateSlider satt Max-egenskapen til 48, delt på 8 for et 1/8 prosentpoeng og delt på 100 for å konvertere fra en prosentsats til en desimal, som dekker området 0,125 % til 6 %. Når det gjelder lånebeløpet, har AmountSlider satt Max-egenskapen til 60 og multiplisert med 10 000, som dekker området 10 000 til 600 000.

With beregnes automatisk på nytt etter hvert som glidebryterne flyttes, og den nye lånebetalingen vises. Ingen variabler brukes, og det er ikke nødvendig å bruke egenskapen OnChange for skyvekontrollene.

Her er de detaljerte instruksjonene for å opprette denne appen:

  1. Opprett en ny app.
  2. Legg til en Slider-kontroll, og gi den navnet RateSlider. Angi Max-egenskapen til 48.
  3. Legg til en Label-kontroll til venstre for glidekontrollen. Angi Text-egenskapen til Rentesats:".
  4. Legg til en Label-kontroll til høyre for glidekontrollen. Sett Text-egenskapen til formelen RateSlider/8 & " %".
  5. Legg til en annen Slider-kontroll, og gi den navnet AmountSlider. Angi Max-egenskapen til 60.
  6. Legg til en Label-kontroll til venstre for denne glidekontrollen. Angi Text-egenskapen til Lånebeløp:".
  7. Legg til en Label-kontroll til høyre for denne glidekontrollen. Sett Text-egenskapen til formelen AmountSlider/8 * 10000.
  8. Legg til en annen Slider-kontroll, og gi den navnet YearsSlider. Angi Max-egenskapen til 40.
  9. Legg til en Label-kontroll til venstre for denne glidekontrollen. Sett Text-egenskapen til Antall år:.
  10. Legg til en Label-kontroll til høyre for denne glidekontrollen. Sett Text-egenskapen til formelen YearsSlider.
  11. Legg til en Label-kontroll, og angi Text-egenskapen til denne formelen:
  12. Legg til en Label-kontroll til venstre for den siste etikettkontrollen. Sett Text-egenskapen til Regelmessig månedlig avdrag:.

Primærnøkkel returnert 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
              )
      )
)

Dette eksemplet legger til en oppføring i Ordre-tabellen i SQL-serveren. Deretter brukes den returnerte primærnøkkelen for ordren, som returneres av Patch-funksjonen i OrdreID-feltet, for å opprette relaterte oppføringer i OrderDetails-tabellen.

Uttrukne verdier med et vanlig uttrykk

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)

Dette eksemplet trekker ut timer, minutter og sekunder fra en ISO 8601-varighetsverdi og bruker disse deltreffene til å opprette en dato/klokkeslett-verdi.

Vær oppmerksom på at selv om deltreffene inneholder tall, er de fremdeles i en tekststreng. Bruk Value-funksjonen til å konvertere til et tall før du utfører matematiske operasjoner.

Tilordne en oppføring i en komponent

Se Tilordne oppføring.