Funzione With

Si applica a: App canvas Flussi desktop App basate su modello Power Pages Power Platform CLI

Calcola i valori ed esegue azioni per un singolo record, inclusi i record inline dei valori denominati.

Descrizione

La funzione With valuta una formula per un singolo record. La formula può calcolare un valore e/o eseguire azioni, ad esempio la modifica di dati o l'uso di una connessione. Usa la funzione ForAll per valutare una formula per tutti i record in una tabella di record.

I campi di record attualmente in elaborazione sono disponibili nella formula. Utilizza l'operatore ThisRecord o fai semplicemente riferimento ai campi in base al nome come faresti con qualsiasi altro valore. L'operatore As può anche essere utilizzato per denominare il record in fase di elaborazione in modo da semplificare la comprensione della formula e rendere accessibili i record nidificati. Per altre informazioni, consulta gli esempi di seguito e la sezione sull'utilizzo nell'ambito dei record.

Usa With per migliorare la leggibilità di formule complesse suddividendole in formule secondarie denominate più piccole. Questi valori denominati agiscono come semplici variabili locali confinate nell'ambito di With. La stessa sintassi del record inline utilizzata con la funzione UpdateContext può essere usata con With. L'uso di With è preferito al contesto o alle variabili globali in quanto è autonomo, facile da capire e può essere utilizzato in qualsiasi contesto di formula dichiarativa.

Usa With per accedere ai campi del record che vengono restituiti da funzioni come Patch o Match. With mantiene il valore di queste funzioni abbastanza a lungo da poter essere utilizzato in ulteriori calcoli o azioni.

Se l'argomento Record per With è un errore, tale errore verrà restituito dalla funzione e la Formula non verrà valutata.

Sintassi

With( Record, Formula )

  • Record: obbligatorio. Il record su cui eseguire le operazioni. Per i valori dei nomi, utilizza la sintassi inline { name1: value1, name2: value2, ... }
  • Formula: obbligatorio. La formula da valutare per Record. La formula può fare riferimento a uno qualsiasi dei campi di record direttamente come ambito del record.

Esempi

Valori denominati semplici

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

In questo esempio viene utilizzato un record di valori denominati per calcolare il volume di un cilindro. With viene utilizzato per acquisire tutti i valori di input insieme, facilitando la loro separazione dal calcolo stesso.

With nidificato

Calcolatore di interessi con la funzione 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
      )
)

Questo esempio nidifica le funzioni With per creare un calcolo a due livelli per i pagamenti ipotecari mensili. Finché non c'è conflitto, tutti i valori denominati del With esterno sono disponibili nel With interno.

Poiché i controlli del dispositivo di scorrimento possono spostarsi solo con incrementi di 1, i dispositivi di scorrimento vengono divisi o moltiplicati per creare effettivamente un incremento personalizzato. Nel caso del tasso di interesse, il RateSlider ha la proprietà Max impostata su 48, divisa per 8 per un incremento di 1/8 di punto percentuale e divisa per 100 per convertire da percentuale a decimale, coprendo l'intervallo dallo 0,125% al 6%. Nel caso dell'importo del prestito, il AmountSlider ha la proprietà Max impostata su 60 e moltiplicata per 10.000, coprendo l'intervallo da 10.000 a 600.000.

La funzione With viene ricalcolata automaticamente quando i dispositivi di scorrimento si spostano e viene visualizzato il nuovo pagamento del prestito. Non vengono utilizzate variabili e non è necessario utilizzare la proprietà OnChange dei controlli del dispositivo di scorrimento.

Ecco le istruzioni dettagliate per la creazione di questa app:

  1. Crea una nuova app.
  2. Aggiungi un controllo Slider e assegnagli il nome RateSlider. Impostane la proprietà Max su 48.
  3. Aggiungi un controllo Label a sinistra del controllo slider. Imposta la proprietà Text su "Interest Rate:".
  4. Aggiungi un controllo Label a destra del controllo slider. Impostane la proprietà Text sulla formula RateSlider/8 & " %".
  5. Aggiungi un altro controllo Slider e assegnagli il nome AmountSlider. Impostane la proprietà Max su 60.
  6. Aggiungi un controllo Label a sinistra di questo controllo slider. Imposta la proprietà Text su "Loan Amount:".
  7. Aggiungi un controllo Label a destra di questo controllo slider. Imposta la proprietà Text sulla formula AmountSlider/8 * 10000.
  8. Aggiungi un altro controllo Slider e assegnagli il nome YearsSlider. Impostane la proprietà Max su 40.
  9. Aggiungi un controllo Label a sinistra di questo controllo slider. Imposta la proprietà Text su "Number of Years:".
  10. Aggiungi un controllo Label a destra di questo controllo slider. Imposta la proprietà Text sulla formula YearsSlider.
  11. Aggiungi un controllo Label e impostane la proprietà Text sulla formula mostrata sopra.
  12. Aggiungi un controllo Label a sinistra dell'ultimo controllo label. Imposta la proprietà Text su "Recurring Monthly Payment:".

Chiave primaria restituita da 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
              )
      )
)

Questo esempio aggiunge un record alla tabella Order in SQL Server. Quindi utilizza la chiave primaria restituita per l'ordine, restituita dalla funzione Patch nel campo OrderID per creare record correlati nella tabella OrderDetails.

Valori estratti con un'espressione regolare

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)

Questo esempio estrae le ore, i minuti e i secondi da un valore di durata ISO 8601 e quindi utilizza queste corrispondenze secondarie per creare un valore Data/Ora.

Tieni presente che sebbene le corrispondenze secondarie contengano numeri, sono ancora in una stringa di testo. Usa la funzione Value per convertire in un numero prima di eseguire operazioni matematiche.

Mappare un record in un componente

Vedi Mappare record.