De functie With

Van toepassing op: Canvas-apps Bureaubladstromen Modelgestuurde apps Power Platform CLI

Berekent waarden en voert acties uit voor één record, waaronder inlinerecords met benoemde waarden.

Beschrijving

De functie With evalueert een formule voor een enkele record. De formule kan een waarde berekenen en/of acties uitvoeren, zoals het wijzigen van gegevens of het werken met een verbinding. Gebruik de functie ForAll om een formule te evalueren voor alle records in een tabel met records.

Velden van de momenteel verwerkte record zijn beschikbaar in de formule. Gebruik de operator ThisRecord of verwijs gewoon met de naam naar velden, zoals u dat ook bij andere waarden zou doen. De operator As kan ook worden gebruikt om een naam te geven aan de record die wordt verwerkt, wat kan helpen uw formule begrijpelijker te maken en geneste records toegankelijk te maken. Meer informatie vindt u in de voorbeelden hieronder en in werken met recordbereik.

Gebruik With om de leesbaarheid van complexe formules verbeteren, door deze op te delen in kleinere, benoemde subformules. Deze benoemde waarden functioneren als eenvoudige lokale variabelen, die beperkt zijn tot het bereik van de functie With. Dezelfde syntaxis voor inline records die wordt gebruikt met de functie UpdateContext kunt u ook gebruiken met With. Het verdient de voorkeur om With te gebruiken in plaats van contextvariabelen of globale variabelen, omdat deze functie op zichzelf staat, gemakkelijk te begrijpen is en kan worden gebruikt in elke declaratieve formulecontext.

Gebruik With om toegang te krijgen tot de velden van het record die worden geretourneerd door functies, zoals Patch of Match. With houdt de waarde van deze functies lang genoeg vast om ze te kunnen gebruiken in verdere berekeningen of acties.

Als het argument Record voor With een fout is, wordt die fout geretourneerd door de functie en de formule wordt niet geëvalueerd.

Syntaxis

With( Record, Formule )

  • Record: vereist. De record waarop de bewerking moet worden uitgevoerd. Gebruik voor naamwaarden de inline-syntaxis { name1: value1, name2: value2, ... }
  • Formula: vereist. De formule die moet worden geëvalueerd voor Record. De formule kan rechtstreeks verwijzen naar elk van de velden van Record als recordbereik.

Voorbeelden

Eenvoudige benoemde waarden

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

In dit voorbeeld wordt een record met benoemde waarden gebruikt om het volume van een cilinder te berekenen. With wordt gebruikt om alle invoerwaarden samen vast te leggen, waardoor ze gemakkelijk van de berekening zelf kunnen worden gescheiden.

Geneste With

Rentecalculator met de functie 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
      )
)

Dit voorbeeld wordt de functie With genest om een berekening op twee niveaus te maken voor maandelijkse hypotheeklasten. Zolang er geen conflict is, zijn alle benoemde With-waarden aan de buitenzijde beschikbaar in With.

Aangezien de schuifregelaars alleen kunnen bewegen in stappen van 1, worden de schuifregelaars gedeeld of vermenigvuldigd om effectief een aangepaste verhoging te creëren. In het geval van het rentetarief is voor de RateSlider de eigenschap Max ingesteld op 48, gedeeld door 8 voor een stijging met 1/8 procentpunt, en gedeeld door 100 om van een percentage naar een decimaal getal te converteren, met een bereik van 0,125% tot 6%. Voor wat betreft het geleende bedrag is voor de AmountSlider de eigenschap Max ingesteld op 60 en vermenigvuldigd met 10.000, wat een bereik van 10.000 tot 600.000 oplevert.

De functie With wordt automatisch opnieuw berekend als de schuifregelaars bewegen en het nieuwe leningbetaling wordt weergegeven. Er worden geen variabelen gebruikt en het is niet nodig om de eigenschap OnChange van de schuifregelaars te gebruiken.

Hier volgen gedetailleerde instructies voor het maken van deze app:

  1. Maak een nieuwe app.
  2. Voeg een besturingselement Slider toe en geef het element de naam RateSlider. Stel de eigenschap Max ervan in op 48.
  3. Voeg links van de schuifregelaar een besturingselement Label toe. Stel de eigenschap Text ervan in op "Rentetarief:".
  4. Voeg rechts van de schuifregelaar een besturingselement Label toe. Stel de eigenschap Text ervan in op de formule RateSlider/8 & " %".
  5. Voeg nog een besturingselement Slider toe en geef het element de naam BedragSlider. Stel de eigenschap Max ervan in op 60.
  6. Voeg links van deze schuifregelaar een besturingselement Label toe. Stel de eigenschap Text ervan in op "Leenbedrag:".
  7. Voeg rechts van deze schuifregelaar een besturingselement Label toe. Stel de eigenschap Text ervan in op de formule BedragSlider/8 * 10000.
  8. Voeg nog een besturingselement Slider toe en geef het element de naam JarenSlider. Stel de eigenschap Max ervan in op 40.
  9. Voeg links van deze schuifregelaar een besturingselement Label toe. Stel de eigenschap Text ervan in op "Aantal jaren:".
  10. Voeg rechts van deze schuifregelaar een besturingselement Label toe. Stel de eigenschap Text ervan in op de formule JarenSlider.
  11. Voeg een besturingselement van het type Label toe en stel de eigenschap Text in op de hierboven getoonde formule.
  12. Voeg links van het laatste besturingselement Label een besturingselement Label toe. Stel de eigenschap Text ervan in op "Maandelijks bedrag:".

Primaire sleutel geretourneerd door 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
              )
      )
)

In dit voorbeeld wordt een record toegevoegd aan de tabel Order in SQL Server. Vervolgens wordt de geretourneerde primaire sleutel voor de order, die wordt geretourneerd door de functie Patch in het veld OrderID, gebruikt om gerelateerde records te maken in de tabel OrderDetails.

Geëxtraheerde waarden met een reguliere expressie

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)

In dit voorbeeld worden de uren, minuten en seconden uit een ISO 8601-tijdsduurwaarde opgehaald, waarna met deze sub-overeenkomsten een datum/tijd-waarde wordt gemaakt.

Merk op dat alhoewel de sub-overeenkomsten getallen bevatten, ze nog steeds in een tekenreeks van het type tekst staan. Zet dit door middel van de functie Value om naar een getal voordat u rekenkundige bewerkingen laat uitvoeren.

Een record toewijzen aan een onderdeel

Zie Record toewijzen.