Fonction With

S’applique à : Applications canevas Flux de bureau Applications pilotées par modèle CLI Power Platform

Calcule des valeurs et effectue des actions pour un seul enregistrement, y compris des enregistrements en ligne de valeurs nommées.

Description

Utilisez la fonction With pour évaluer une formule pour un seul enregistrement. La formule peut calculer une valeur et/ou effectuer différentes actions, par exemple modifier des données ou utiliser une connexion. Utilisez la fonction ForAll pour évaluer une formule pour tous les enregistrements d’une table d’enregistrements.

Les champs de l’enregistrement en cours de traitement sont disponibles dans la formule. Utilisez l’opérateur ThisRecord ou référencez simplement les champs par leur nom comme vous le feriez pour toute autre valeur. L’opérateur As peut également être utilisé pour nommer l’enregistrement en cours de traitement, ce qui peut faciliter la compréhension de votre formule et rendre les enregistrements imbriqués accessibles. Pour plus d’informations, consultez les exemples ci-dessous et la section Utilisation de l’étendue de l’enregistrement.

Utilisez With pour améliorer la lisibilité des formules complexes en les divisant en sous-formules nommées plus petites. Ces valeurs nommées agissent comme de simples variables locales limitées à la portée de la fonction With. La même syntaxe d’enregistrement en ligne que celle utilisée avec la fonction UpdateContext peut être utilisée avec With. L’utilisation de la fonction With est préférée aux variables de contexte ou globales, car elle est autonome, facile à comprendre et peut être utilisée dans n’importe quel contexte de formule déclarative.

Utilisez la fonction With pour accéder aux champs de l’enregistrement qui sont renvoyés par les fonctions telles que Patch ou Match. La fonction With contient la valeur de ces fonctions suffisamment longtemps pour être utilisée dans d’autres calculs ou actions.

Si l’argument Record vers With est une erreur, cette erreur est renvoyée par la fonction et la valeur Formula ne sera pas évaluée.

Syntaxe

With( Record, Formula )

  • Record : obligatoire. L’enregistrement doit être traité. Pour les valeurs de noms, utilisez la syntaxe en ligne { name1: value1, name2: value2, ... }
  • Formula : obligatoire. La formule à évaluer pour Record. La formule peut référencer n’importe lequel des champs de Record directement comme une étendue d’enregistrement.

Exemples

Valeurs nommées simples

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

Cet exemple utilise un enregistrement de valeurs nommées pour calculer le volume d’un cylindre. With est utilisée pour capturer toutes les valeurs d’entrée ensemble, ce qui facilite leur séparation du calcul lui-même.

Imbriqué avec

Calculateur d’intérêt utilisant la fonction 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
      )
)

Cet exemple imbrique les fonctions With pour créer un calcul à deux niveaux pour les paiements hypothécaires mensuels. Tant qu’il n’y a pas de conflit, toutes les valeurs intitulées With extérieures sont disponibles dans la fonction With interne.

Étant donné que les contrôles Slider ne peuvent se déplacer que par incréments de 1, les curseurs sont divisés ou multipliés pour créer efficacement un incrément personnalisé. Dans le cas du taux d’intérêt, le contrôle RateSlider a sa propriété Max définie sur 48, divisé par 8 pour un incrément de 1/8 point de pourcentage et divisé par 100 pour convertir un pourcentage en décimal, couvrant la plage de 0,125 % à 6 %. Dans le cas du montant du prêt, le contrôle AmountSlider a sa propriété Max définie sur 60 et multipliée par 10 000, couvrant la plage de 10 000 à 600 000.

La fonction With est automatiquement recalculée lorsque les curseurs se déplacent et que le nouveau paiement de prêt s’affiche. Aucune variable n’est utilisée et il n’est pas nécessaire d’utiliser la propriété OnChange des contrôles Slider.

Voici les instructions détaillées pour créer cette application :

  1. Créez une application.
  2. Ajoutez un contrôle Slider et nommez-le RateSlider. Définissez sa propriété Max sur 48.
  3. Ajoutez un contrôle Label à gauche du contrôle Slider. Définissez sa propriété Text sur "Interest Rate:".
  4. Ajoutez un contrôle Label à droite du contrôle Slider. Définissez sa propriété Text sur la formule RateSlider/8 & " %".
  5. Ajoutez un autre contrôle Slider et nommez-le AmountSlider. Définissez sa propriété Max sur 60.
  6. Ajoutez un contrôle Label à gauche de ce contrôle Slider. Définissez sa propriété Text sur "Loan Amount:".
  7. Ajoutez un contrôle Label à droite de ce contrôle Slider. Définissez sa propriété Text sur la formule AmountSlider/8 * 10000.
  8. Ajoutez un autre contrôle Slider et nommez-le YearsSlider. Définissez sa propriété Max sur 40.
  9. Ajoutez un contrôle Label à gauche de ce contrôle Slider. Définissez sa propriété Text sur "Number of Years:".
  10. Ajoutez un contrôle Label à droite de ce contrôle Slider. Définissez sa propriété Text sur la formule YearsSlider.
  11. Ajoutez un contrôle Label et définissez sa propriété Text sur la formule affichée ci-dessus.
  12. Ajoutez un contrôle Label à gauche du dernier contrôle Label. Définissez sa propriété Text sur "Recurring Monthly Payment:".

Clé primaire renvoyée par 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
              )
      )
)

Cet exemple ajoute un enregistrement à la table Order dans SQL Server. Il utilise ensuite la clé primaire renvoyée pour la commande, renvoyée par la fonction Patch dans le champ OrderID pour créer des enregistrements associés dans la table OrderDetails.

Valeurs extraites avec une expression régulière

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)

Cet exemple extrait les heures, les minutes et les secondes d’une valeur de durée ISO 8601, puis utilise ces sous-correspondances pour créer une valeur de date/heure.

Notez que bien que les sous-correspondances contiennent des nombres, elles sont toujours dans une chaîne de texte. Utilisez la fonction Value pour convertir en nombre avant d’effectuer des opérations mathématiques.

Mapper un enregistrement dans un composant

Reportez-vous à la rubrique Mapper un enregistrement.