Opérateurs et identificateurs dans Power Apps

S’applique à : Applications canevas Applications pilotées par modèle

Certains de ces opérateurs dépendent de la langue de l’auteur. Pour plus d’informations sur la prise en charge des langues dans les applications de canevas, voir Applications globales.

Symbole Type Exemple Description
... Identificateur ’Account Name’ Les identifiants contenant des caractères spéciaux, y compris des espaces, sont placés entre guillemets simples
"..." Chaîne de texte "Hello, World" Les chaînes de texte sont entre guillemets doubles
$"..." Interpolation de chaîne $"Dear {FirstName}," Formules intégrées dans une chaîne de texte
. Sélecteur de propriété Slider1.Value
Color.Red
Acceleration.X
Extrait une propriété d’une table, d’un contrôle, d’un signal ou d’une énumération. Pour la compatibilité descendante, ! peut également être utilisé.
.
[dépend 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 Filter(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 "hello" & " " & "world" Permet à plusieurs chaînes d’apparaître en continu
&& ou And Opérateurs logiques Price < 100 && Slider1.Value = 20
ou Price < 100 And Slider1.Value = 20
Conjonction logique, équivalente à la fonction And
|| ou Or   Price < 100 || Slider1.Value = 20 or Price < 100 Or Slider1.Value = 20 Disjonction logique, équivalente à la fonction Or
! ou Not   !(Price < 100) ou Not (Price < 100) Négation logique, équivalente à la fonction Not
exactin Opérateurs d’appartenance Gallery1.Selected exactin SavedItems Appartient à une collection ou à une table
exactin   "Windows" exactin “To display windows in the Windows operating system...” Test de la sous-chaîne (sensible à la casse)
dans   Gallery1.Selected in SavedItems Appartient à une collection ou à une table
dans   "The" in "The keyboard and the monitor..." Test de la sous-chaîne (non sensible à la casse)
@ Opérateur de levée des ambiguïtés MyTable[@fieldname] Levée des ambiguïtés d’un champ
@   [@MyVariable] Levée des ambiguïtés globale
,
[dépend de la langue]
Séparateur de liste If( X < 10, "Low", "Good" )
{ 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 Collect(T, A); Navigate(S1, "") Appels distincts de fonctions dans les propriétés de comportement. L’opérateur de chaînage dépend de la langue.
En tant que Opérateur As AllCustomers As Customer Remplace ThisItem et ThisRecord dans les galeries et les fonctions de portée d’enregistrement. As est utile pour fournir un meilleur nom spécifique et est particulièrement important dans les scénarios imbriqués.
Auto Opérateur Self Self.Fill Accès aux propriétés du contrôle en cours
Parent Opérateur parent Parent.Fill Accès aux propriétés d’un conteneur de contrôle
ThisItem Opérateur ThisItem ThisItem.FirstName Accès aux champs d’un contrôle Gallery ou Form
ThisRecord Opérateur ThisRecord ThisRecord.FirstName 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.

Note

L’opérateur @ peut également être utilisé pour valider le type de l’objet d’enregistrement par rapport à un source de données. Par exemple, Collect(coll,Account@{'Account Number: 1111')

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 :
    Filter(Inventory, "E" in 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 :
    Filter(Inventory, "E" exactin 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
ThisItem Contrôle Gallery
Contrôle Edit form
Contrôle Display form
Le nom par défaut de l’enregistrement actuel dans un contrôle de Gallery ou de formulaire.
ThisRecord ForAll, Filter, With, Sum et autres fonctions de portée d’enregistrement Le nom par défaut de l’enregistrement actuel dans ForAll et d’autres fonctions de portée d’enregistrement.
Asname Contrôle Gallery
ForAll, Filter, With, Sum et autre 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 qui suit le contrôle Gallery, la propriété Items est définie sur la source de données Employés (comme la table 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 de l’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, on aurait 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 nécessaire.

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.

As peut également être utilisé avec les fonctions d’étendue 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.
Opérateur Self 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.
Opérateur Parent 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 Parent sont des opérateurs et non des propriétés des 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 unique, ne change pas après avoir été créé, n’autorise généralement pas d’espaces ou d’autres caractères spéciaux et 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 d’affichage - 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, les applications canevas les proposent comme choix et ne suggèrent pas de 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 table 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 à :

Tableau des comptes avec champ personnalisé ajouté, affichant un nom complet de

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. Les guillemets simples ne sont pas obligatoires, 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 les noms de table et de champ système Dataverse, 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 table. Lorsque cela se produit, le nom logique sera ajouté à la fin de nom complet 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 de table, de choix 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 :
    Table[@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.