Opérateurs et identificateurs dans Power Apps
S’applique à : Applications canevas Applications pilotées par modèle Power Pages
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 |
---|---|---|---|
’...’ | Identifiant | ’Nom du compte’ | Les identifiants contenant des caractères spéciaux, y compris des espaces, sont placés entre guillemets simples |
"..." | Chaîne de texte | "Bonjour le monde" | Les chaînes de texte sont entre guillemets doubles |
$"..." | Interpolation de chaîne | "Cher {FirstName}, » | Formules intégrées dans une chaîne de texte |
. | Sélecteur de propriété | Valeur du curseur 1 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 | 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 :
|
; [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 | Ce disque 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. |
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 :
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.
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.
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 | PourTous, Filtre, Avec, Somme et autres portée d’enregistrement fonctions | Le nom par défaut de l’enregistrement actuel dans ForAll et d’autres fonctions de portée d’enregistrement. |
En tant quenom | Contrôle de la galerie ForAll, Filtre, Avec, Somme 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 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
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
De même, la formule du nom utilise également ThisItem :
ThisItem.'First Name' & " " & ThisItem.'Last Name'
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" ) )
Cet enregistrement 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
Les formules de l’image et du nom sont ajustées pour utiliser ce nom pour l’enregistrement actuel :
Employee.Picture
Employee.'First Name' & " " & Employee.'Last Name'
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 :
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
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
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 )
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, 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 à :
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 :
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 :
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 :
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 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 :
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.