Partage via


Opérateurs et identificateurs

Note

Microsoft Power Fx est le nouveau nom du langage de formule pour les applications canevas. Ces articles associés sont un travail en cours car nous extrayons le langage des applications de canevas, l’intégrons à d’autres produits Microsoft Power Platform, et le rendons disponible en open source. Commencez par l’Aperçu de Microsoft Power Fx pour une introduction à la langue.

Les opérateurs de Microsoft Power Fx sont décrits ci-dessous. Certains de ces opérateurs dépendent de la langue de l’auteur. Pour plus d’informations, consultez la page sur les applications globales.

Symbole Type Syntaxe Description
. Sélecteur de propriété Valeur du curseur 1
Color.Red
Extrait une propriété d’une table, d’un contrôle ou d’une énumération. Pour la compatibilité descendante, ! peut être utilisé.
.
dépendant de la langue
Séparateur décimal 1.23 Séparateur entre les parties entières et partielles d’un nombre. Le caractère dépend de la langue.
( ) Parenthèses Filtre(T, A < 10)

(1 + 2) * 3
Détermine l’ordre de priorité et les sous-expressions de groupes dans une expression plus longue
+ Opérateurs arithmétiques 1 + 2 Addition
-   2 - 1 Soustraction et signe
*   2 * 3 Multiplication
/   2 / 3 Division (voir également la fonction Mod)
^   2 ^ 3 Élévation à une puissance, équivalente à la fonction Power
%   20% Pourcentage (équivalent à « * 1/100 »)
= Les opérateurs de comparaison Prix = 100 Égal à
>   Prix > 100 Supérieur(e) à
>=   Prix >= 100 Supérieur ou égal à
<   Prix < 100 Inférieur(e) à
<=   Prix <= 100 Inférieur ou égal à
<>   Prix <> 100 Différent de
& Opérateur de concaténation de chaînes "bonjour" et " " et "monde" Permet à plusieurs chaînes d’apparaître en continu
&& ou Et Opérateurs logiques Prix < 100 && slider1.Value = 20
ou Price < 100 And Slider1.Value = 20
Conjonction logique, équivalente à la fonction And
|| ou Ou   Prix < 100 || Slider1.Value = 20 ou Prix < 100 Ou Slider1.Value = 20 Disjonction logique, équivalente à la fonction Or
! ou Not   !(Prix < 100) ou Pas (Prix < 100) Négation logique, équivalente à la fonction Not
exactine Opérateurs d’adhésion Galerie1.Sélectionné avec précision dans les éléments enregistrés Appartient à une collection ou à une table
exactine   "Windows" signifie "Pour afficher les fenêtres dans le système d’exploitation Windows..." Test de la sous-chaîne (sensible à la casse)
dans   Galerie1.Sélectionné dans les éléments enregistrés Appartient à une collection ou à une table
dans   "Le" dans "Le clavier et le moniteur..." Test de la sous-chaîne (non sensible à la casse)
@ Désambiguïsation opérateur MaTable[@fieldname] Levée des ambiguïtés d’un champ
@   [@MaVariable] Levée des ambiguïtés globale
,
[dépend de la langue]
Séparateur de liste Si(X < 10, "Faible", "Bon")
{ X : 12, Y : 32 }
[ 1, 2, 3 ]
Sépare : Ce caractère dépend de la langue.
;
[dépend de la langue]
Chaînage de formules Collecter(T, A) ; Naviguer(S1, "") Appels distincts de fonctions dans les propriétés de comportement. L’opérateur de chaînage dépend de la langue.
Comme Comme opérateur Tous les clients en tant que client Remplace ThisItem et ThisRecord dans les galeries et les fonctions de portée d’enregistrement. Comme est utile pour fournir un nom meilleur et spécifique et est particulièrement important dans les scénarios imbriqués.
Soi Moi-même opérateur Auto-remplissage Accès aux propriétés du contrôle en cours
élément parent élément parent opérateur Parent.Remplir Accès aux propriétés d’un conteneur de contrôle
Cet article Cet article opérateur Cet article.Prénom Accès aux champs d’un contrôle Gallery ou Form
Ce disque Cet article opérateur Cet enregistrement.Prénom Accès à l’enregistrement complet et aux champs individuels de l’enregistrement dans ForAll, Sum, With et d’autres fonctions d’étendue d’enregistrement. Peut être remplacé avec l’opérateur As.

Opérateurs in et exactin

Utilisezr les opérateurs in et exactin pour rechercher une chaîne dans une source de données, telle qu’une collection ou une table importée. L’opérateur in identifie les correspondances indépendamment de la casse, tandis que l’opérateur exactin identifie les correspondances uniquement si elles présentent la même casse. Prenons un exemple :

  1. Créez ou importez une collection nommée Inventory et affichez-la dans une galerie en suivant la première procédure présentée dans l’article Afficher des images et du texte dans une galerie.

  2. Définissez la propriété Items de la galerie sur la formule suivante :
    Filtre (Inventaire, "E" dans ProductName)

    La galerie affiche tous les produits, sauf Callisto, car le nom de ce produit est le seul qui ne contient pas la lettre que vous avez spécifiée.

  3. Remplacez la propriété Items de la galerie par cette formule :
    Filtre (Inventaire, "E" exact dans ProductName)

    La galerie affiche uniquement Europa, car ce nom est le seul contenant la lettre que vous avez spécifiée dans le cas indiqué.

Opérateurs ThisItem, ThisRecord et As

Quelques contrôles et fonctions appliquent des formules à des enregistrements individuels d’une table. Pour faire référence à l’enregistrement individuel dans une formule, utilisez l’une des méthodes suivantes :

Opérateur S’applique à Description
Cet article Galerie contrôle
Formulaire d’édition contrôle
Formulaire d’affichage contrôle
Le nom par défaut de l’enregistrement actuel dans un contrôle de Gallery ou de formulaire.
Ce disque Pour tous, Filtre, Avec, Somme et autres portée de l’enregistrement fonctions Le nom par défaut de l’enregistrement actuel dans ForAll et d’autres fonctions de portée d’enregistrement.
Comme nom Galerie contrôle
ForAll, Filter, With, Sum et d’autres fonctions de portée d’enregistrement
Définit un nom pour l’enregistrement actuel, en remplaçant la valeur par défaut ThisItem ou ThisRecord. Utilisez As pour rendre les formules plus faciles à comprendre et résoudre les ambiguïtés lors de l’imbrication.

Opérateur ThisItem

Par exemple, dans ce contrôle Galerie suivant, la propriété Éléments est définie sur la source de données Employés (comme l’entité Employés incluse avec l’exemple Northwind Traders) :

Employees

Employés présentés dans une galerie.

Le premier élément de la galerie est un modèle qui est répliqué pour chaque employé. Dans le modèle, la formule de l’image utilise ThisItem pour faire référence à l’élément actuel :

ThisItem.Picture

Formule pour l’image d’un employé.

De même, la formule du nom utilise également ThisItem :

ThisItem.'First Name' & " " & ThisItem.'Last Name'

Formule pour le nom et prénom d’un employé.

Opérateur ThisRecord

ThisRecord est utilisé dans les fonctions qui ont une portée d’enregistrement. Par exemple, nous pouvons utiliser la fonction Filter avec notre propriété de galerie Items pour afficher uniquement les prénoms commençant par M :

Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) )

Filtrer les employés en fonction de leur nom, à l’aide de ThisRecord.

ThisRecord est facultatif et implicite en utilisant directement les champs, par exemple, dans ce cas, nous aurions pu écrire :

Filter( Employees, StartsWith( 'First Name', "M" ) )

Bien que facultatif, utiliser ThisRecord peut rendre les formules plus faciles à comprendre et peut être nécessaire dans des situations ambiguës où un nom de champ peut également être un nom de relation. ThisRecord est facultatif tandis que ThisItem est toujours obligatoire.

Utilisez ThisRecord pour référencer l’ensemble de l’enregistrement avec Patch, Collect et d’autres fonctions d’étendue d’enregistrement. Par exemple, la formule suivante définit le statut de tous les employés inactifs sur actif :

With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
      ForAll( InactiveEmployees, 
              Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) )

Opérateur As

Utilisez l’opérateur AS pour nommer un enregistrement dans une fonction de galerie ou d’étendue d’enregistrement, en remplaçant la valeur par défaut ThisItem ou ThisRecord. Le nom de l’enregistrement peut faciliter la compréhension de vos formules et peut être nécessaire dans des situations imbriquées pour accéder aux enregistrements dans d’autres étendues.

Par exemple, vous pouvez modifier la propriété Items de notre galerie afin qu’elle utilise As pour identifier que nous travaillons avec un employé :

Employees As Employee

Galerie des employés, grâce à l’opérateur As.

Les formules de l’image et du nom sont ajustées pour utiliser ce nom pour l’enregistrement actuel :

Employee.Picture

Image d’un employé utilisant le nom de l’employé défini avec l’opérateur As.

Employee.'First Name' & " " & Employee.'Last Name'

Prénom et nom d’un employé utilisant le nom de l’employé avec l’opérateur As.

Comme peut également être utilisé avec les fonctions de portée d’enregistrement pour remplacer le nom par défaut ThisRecord. Nous pouvons appliquer cela à notre exemple précédent pour clarifier l’enregistrement avec lequel nous travaillons :

With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
      ForAll( InactiveEmployees As Employee, 
              Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) )

Lors de l’imbrication des galeries et des fonctions d’étendue d’enregistrement, ThisItem et ThisRecord font toujours référence à la portée la plus interne, laissant les enregistrements dans les portées externes non disponibles. Utilisez As pour rendre toutes les portées d’enregistrement disponibles en donnant à chacune un nom unique.

Par exemple, cette formule produit un motif d’échiquier sous forme de chaîne de texte en imbriquant deux fonctions ForAll :

Concat( 
    ForAll( Sequence(8) As Rank,
        Concat( 
            ForAll( Sequence(8) As File, 
                    If( Mod(Rank.Value + File.Value, 2) = 1, " X ", " . " ) 
            ),
            Value 
        ) & Char(10) 
    ), 
    Value 
)

Définir la propriété Text d’un contrôle Label sur cette formule affiche :

Texte de l’échiquier affiché dans un contrôle d’étiquette.

Découvrons ce qui se passe ici :

  • Nous commençons par itérer une table sans nom de 8 enregistrements numérotés à partir de la fonction Sequence. Cette boucle s’applique pour chaque rangée du tableau, qui est communément appelée Rang et donc nous lui donnons ce nom.
  • Pour chaque ligne, nous parcourons une autre table sans nom de 8 colonnes, et nous donnons le nom commun Fichier.
  • Si Rank.Value + File.Value est un nombre impair, le carré obtient un X, sinon un point. Cette partie de la formule fait référence aux deux boucles ForAll, rendues possibles grâce à l’opérateur As.
  • Concat est utilisé deux fois, d’abord pour assembler les colonnes puis les lignes, avec un Char(10) ajouté pour créer une nouvelle ligne.

Un exemple similaire est possible avec des contrôles Gallery imbriqués au lieu de fonctions ForAll. Commençons par la galerie verticale pour le Rang. Ce contrôle Gallery aura une formule Items de :

Sequence(8) as Rank

Illustration de la galerie externe qui fournit l’itération de rang.

Dans cette galerie, nous placerons une galerie horizontale pour le Fichier, qui sera répliquée pour chaque Rang, avec une propriété Items de :

Sequence(8) as File

Illustration de la galerie interne qui fournit l’itération de fichier.

Et enfin, dans cette galerie, nous ajouterons un contrôle Label qui sera répliqué pour chaque Fichier et chaque Rang. Nous allons le dimensionner pour remplir tout l’espace et utiliser la propriété Fill pour fournir la couleur avec cette formule :

If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige )

Contrôle d’étiquette dans les deux galeries qui fournit les couleurs alternées pour l’échiquier.

Opérateurs Self et Parent

Il existe trois façons de faire référence à un contrôle et à ses propriétés dans une formule :

Méthode Description
Par le nom du contrôle Tout contrôle peut être référencé par son nom à partir de n’importe où dans l’application.

Par exemple, Label1.Fill fait référence à la propriété fill du contrôle dont le nom est Label1.
Moi-même opérateur Il est souvent pratique de faire référence à une autre propriété du même contrôle lors de l’écriture d’une formule. Au lieu d’utiliser une référence absolue par le nom, il est plus facile et plus portable d’utiliser une référence relative à un self (soi-même). L’opérateur Self donne accès aux propriétés du contrôle en cours.

Par exemple, Self.Fill fait référence à la couleur de remplissage du contrôle en cours.
élément parent opérateur Certains contrôles hébergent d’autres contrôles, tels que les contrôles Screen et Gallery. Le contrôle hébergeant est appelé parent des contrôles qui s’y trouvent. Comme l’opérateur Self, l’opérateur Parent fournit une référence relative facile au contrôle Container.

Par exemple, Parent.Fill fait référence à la propriété fill du contrôle qui est le conteneur du contrôle actuel.

Self et élément parent sont des opérateurs et non des propriétés sur les contrôles eux-mêmes. Il n’est pas possible de faire référence à Parent.Parent, Self.Parent ou à Parent.Self.

Noms d’identifiants

Les noms des variables, sources de données, colonnes et autres objets peuvent contenir tout Unicode.

Utilisez des guillemets simples autour d’un nom contenant un espace ou un autre caractère spécial.
Utilisez deux guillemets simples pour représenter un guillemet simple dans le nom. Les noms qui ne contiennent pas de caractères spéciaux ne nécessitent pas de guillemets simples.

Voici quelques exemples de noms de colonnes que vous pourriez rencontrer dans un tableau et comment ils sont représentés dans une formule :

Nom de colonne dans une base de données Référence de colonne dans une formule
SimpleName SimpleName
NameWith123Numbers NameWith123Numbers
Nom avec espaces 'Name with spaces'
Nom avec des guillemets "doubles" 'Name with "double" quotes'
Nom avec des guillemets ’simples’ 'Name with ''single'' quotes'
Nom avec un signe @ 'Name with an @ at sign'

Les guillemets doubles sont utilisés pour désigner des chaînes de texte.

Afficher les noms et les noms logiques

Certaines sources de données telles que SharePoint et Microsoft Dataverse ont deux noms différents pour faire référence à la même table ou colonne de données :

  • Nom logique - Un nom qui est garanti comme étant unique, qui ne change pas après sa création, qui n’autorise généralement pas d’espaces ou d’autres caractères spéciaux et qui n’est pas localisé dans différentes langues. En conséquence, le nom peut être cryptique. Ces noms sont utilisés par les développeurs professionnels. Par exemple, cra3a_customfield. Ce nom peut également être appelé nom du schéma ou juste nom.

  • nom complet - Un nom convivial et destiné à être vu par les utilisateurs finaux. Ce nom peut ne pas être unique, peut changer au fil du temps, peut contenir des espaces et tout caractère Unicode et peut être localisé dans différentes langues. Correspondant à l’exemple ci-dessus, le nom d’affichage peut être Champ personnalisé avec une espace entre les mots.

Étant donné que les noms d’affichage sont plus faciles à comprendre, Power Fx les proposera comme choix et ne suggérera pas les noms logiques. Bien que les noms logiques ne soient pas suggérés, ils peuvent toujours être utilisés s’ils sont tapés indirectement.

Par exemple, imaginez que vous ayez ajouté un Champ personnalisé à une entité dans Dataverse. Un nom logique vous sera attribué par le système que vous ne pourrez modifier que lors de la création du champ. Le résultat ressemblerait à :

Entité de comptes avec champ personnalisé ajouté, affichant un nom d’affichage de « Champ personnalisé » et un nom logique de « cr5e3_customfield ».

Lors de la création d’une référence à un champ de comptes, il vous sera suggéré d’utiliser ’Champ personnalisé’ puisque c’est le nom complet. Les guillemets simples doivent être utilisés car ce nom contient un espace :

Barre de formule Studio affichant des suggestions de noms de champs de comptes avec le nom complet ’Champ personnalisé’ en surbrillance.

Après avoir sélectionné la suggestion, ’Champ personnalisé’ s’affiche dans la barre de formule et les données sont récupérées :

Barre de formule Studio affichant l’utilisation du nom complet ’Champ personnalisé’ pour le champ.

Bien que cela ne soit pas suggéré, nous pourrions également utiliser le nom logique de ce champ. Cela entraînera la récupération des mêmes données. Aucun guillemet simple n’est requis car ce nom ne contient ni espaces ni caractères spéciaux :

Barre de formule Studio affichant l’utilisation du nom logique cr5e3_customfield pour le champ.

En coulisses, un mappage est maintenu entre les noms d’affichage vus dans les formules et les noms logiques sous-jacents. Étant donné que les noms logiques doivent être utilisés pour interagir avec la source de données, ce mappage est utilisé pour convertir automatiquement le nom complet actuel en nom logique et c’est ce qui est vu dans le trafic réseau. Ce mappage est également utilisé pour reconvertir en noms logiques, pour basculer vers de nouveaux noms d’affichage, par exemple, si un nom complet change ou si un créateur dans une autre langue modifie l’application.

Note

Les noms logiques ne sont pas traduits lors du déplacement d’une application entre des environnements. Pour l’entité système Dataverse et les noms de champ, cela ne devrait pas poser de problème, car les noms logiques sont cohérents dans tous les environnements. Mais tous les champs personnalisés, tels que cra3a_customfield dans cet exemple ci-dessus, peuvent avoir un autre préfixe d’environnement (cra3a dans ce cas). Les noms d’affichage sont préférés, car ils peuvent être comparés aux noms d’affichage dans le nouvel environnement.

Levée des ambiguïtés d’un nom

Étant donné que les noms d’affichage ne sont pas uniques, le même nom complet peut apparaître plusieurs fois dans la même entité. Lorsque cela se produit, le nom logique est ajouté à la fin du nom d’affichage entre parenthèses pour l’un ou plusieurs des noms en conflit. En s’appuyant sur l’exemple ci-dessus, s’il y avait un deuxième champ avec le même nom complet de Champ personnalisé avec un nom logique de cra3a_customfieldalt alors les suggestions montreraient :

Barre de formule Studio montrant l’utilisation du nom logique cr5e3_customfieldalt pour lever l’ambiguïté des deux versions de

Des chaînes de désambiguïsation de nom sont ajoutées dans d’autres situations où des conflits de noms se produisent, tels que les noms d’entités, de jeux d’options et d’autres éléments Dataverse.

Opérateur de levée des ambiguïtés

Certaines fonctions créent des étendues d’enregistrement pour accéder aux champs de table lors du traitement de chaque enregistrement, telles que Filter, AddColumns et Sum. Les noms de champs ajoutés à l’étendue d’enregistrement remplacent les mêmes noms qui se trouvent ailleurs dans l’application. Dans ce cas, vous pouvez toujours accéder aux valeurs en dehors de l’étendue d’enregistrement avec l’opérateur de levée d’ambiguïtés @ :

  • Pour accéder aux valeurs des étendues d’enregistrements imbriquées, utilisez l’opérateur @ avec le nom de la table actuellement utilisé à l’aide de ce modèle :
    Tableau[@FieldName]
  • Pour accéder à des valeurs globales, telles que des sources de données, des collections et des variables de contexte, utilisez le modèle [@NomObjet] (sans désignation du tableau).

Pour plus d’informations et d’exemples, consultez les étendues d’enregistrement.