PowerApps est une plate-forme de développement d'applications métier compatible smartphones, tablettes et navigateur Web. En tant que Service (PaaS) disponible via le Cloud et incorporée à la plateforme Microsoft Power Platforms, permet de connecter des sources de données ou de stocker les données directement dans l’application. Ces applications permettrons de consulter, manipuler et enrichir de manière interactive ces base de données.
PowerApps est inclus avec Office 365 Enterprise E1 ou tout abonnement supérieur. Néanmoins, différents niveaux de licence permettent d’accéder à différentes fonctionnalités.
La plupart des outils de développement intègrent un éditeur graphique (EDI). C'est cet éditeur qui permet de “dessiner” l'interface utilisateur (UI) grâce à des objets que l'on appelle des “contrôles”.
Ce sont ces contrôles (comme les images, formes, listes déroulantes ou étiquettes d'affichage) qui permettent de construire rapidement l'interface graphique de l'application.
Les contrôles d'entrée (signature, entrée de texte, case à cocher) assurent
l'interaction et la navigation ( Carte, Case à cocher, Liste déroulante, Galerie, Zone de liste, Case d’option, Évaluation, Curseur, Saisie de texte et Bouton à bascule.) entre
l'utilisateur et l'application. Cet ensemble permet de concevoir l'expérience utilisateur (UX).
Un contrôle conteneur est utilisé pour regrouper logiquement d’autres contrôles. Voici quelques détails à son sujet :
les galeries sont des contrôles qui permettent d’afficher des enregistrements de données généralement provenant de collections sous forme de liste ou de grille. Il y en a plusieurs
Galerie Horizontale :
Galerie Verticale :
Galerie Vide (Hauteur Flexible) :
En résumé, choisissez le type de galerie en fonction de vos besoins d’affichage et de l’espace disponible dans votre application Power Apps.
Un utilisateur peut spécifier dans ce contrôle TextInput, des nombres, du texte, une valeur, un variable et autres. Selon la configuration de l’application, ces données peuvent être ajoutées à une source de données, utilisées pour calculer une valeur temporaire ou incorporées d’une autre façon.
Nous pouvons entrer une valeur par défaut dans les propriétés du TextInput. Nous pouvons supprimer ce texte à la saisie d'une valeur puis le réinitialiser à l'appui d'un contrôle. Pour ce faire, sélectionnez le TextInput à configurer dans le volet de gauche.
Dans le volet de droite de ce contrôle, modifiez les propriétés avancées :
Reset(NomTextInput)
Ce contrôle sert à afficher des informations sous forme d'étiquette provenant d'une source de données quelconque via un connecteur.
Pour exemple, nous souhaitons dans une étiquette d'une galerie afficher la valeur contenu dans les lignes d'une colonne native au liste sharepoint 'Créé par'. Nous entrons dans la propriété avancée de cette étiquette la formule suivante :
ThisItem.'Créé par'.DisplayName
les boutons radio sont conçus pour permettre aux utilisateurs de sélectionner une seule option parmi plusieurs. Cependant, si nous avons besoin de gérer plusieurs groupes de boutons radio, vous pouvons les configurer de manière à ce que chaque groupe soit indépendant.
Si nous souhaitons permettre la sélection de plusieurs options, vous devrons utiliser un autre type de contrôle, comme des cases à cocher (checkboxes).
Définissons les options dans la propriété Items :
["Option 1", "Option 2", "Option 3"]
Ce contrôle permet de spécifier une valeur booléenne. Les propriétés clés de ce contrôle sont Checked, Label, OnCheck et OnUncheck.
Fonctionne de la même manière qu'une case à cocher.
La fonction Navigate permet de naviguer entre les écrans d’une application PowerApps.
Utilisez Navigate pour rediriger l’utilisateur vers un autre écran.
Exemple :
Navigate(Screen2, Transition.None)
Cela redirige l’utilisateur vers l’écran nommé “Screen2” sans transition.
Patch et Collect peuvent tous deux être utilisés pour ajouter un enregistrement à une source de données. En règle générale, Patch est utilisé pour modifier des enregistrements entiers ou les valeurs de champs spécifiques dans un enregistrement, mais lorsqu’il est utilisé avec la fonction defaults, il se comporte de la même manière que Collect.
Une différence importante est que Patch ne peut ajouter qu’à une collection existante alors que Collect créera la collection si elle n’existe pas déjà. Utilisez donc Patch pour modifier les notices des collections existantes et Collect pour définir une nouvelle collection. Patch est également plus adapté pour modifier un sous-ensemble de champs dans une collection.
Patch est une fonction qui permet de créer ou de mettre à jour des enregistrements dans une source de données. Elle est très utile pour modifier des colonnes de type choix dans sharepoint, qui sont des listes déroulantes de valeurs prédéfinies. Pour utiliser la fonction Patch :
Patch(source, enregistrement, modifications)
Source est le nom de la source de données, enregistrement est l’identifiant de l’enregistrement à modifier ou à créer, et modifications est un enregistrement qui contient les nouvelles valeurs des champs à changer.
Par exemple, si nous avons une liste sharepoint nommée “Tâches” qui contient une colonne choix nommée “Statut”, nous pouvons utiliser la fonction Patch pour changer le statut d’une tâche à partir d’une application PowerApps. Voici un exemple de code :
Patch(‘Tâches’, LookUp(‘Tâches’, ID=1), {Statut: {Value: “Terminé”}})
Ce code va modifier le statut de la tâche dont l’ID est 1 et le mettre à “Terminé”. Nous pouvons aussi utiliser un contrôle comme une liste déroulante ou un bouton radio pour sélectionner la nouvelle valeur du statut. Par exemple, si nous avons un contrôle nommé “Dropdown_Statut” qui contient les mêmes valeurs que la colonne choix, nous pouvons utiliser ce code :
Patch(‘Tâches’, LookUp(‘Tâches’, ID=1), {Statut: Dropdown_Statut.Selected})
Ce code modifiera le statut de la tâche dont l’ID est 1 et le mettre à la valeur sélectionnée dans le contrôle “Dropdown_Statut”.
Autre exemple :
Patch( Source; Defaults(Source); { ColonneTextData : TextInput.Text; //Valable pour DataCardValue et textInput 'Colonne2' : Galerie.Selected.Colonne2; ColonneComboBox : ComboBox.Selected.Value; ColonneDate : Text(Today();"dd/mm/yyyy"; ColonneDate2 : DateValue(Text(Today(); "[$-fr-FR]dd/mm/yyyy")); ColonneDate3 : DatePicker.SelectedDate; ColonneBool : True; ColonneChoix : ComboBox.Selected ColumnChoix : {Value: "ValeurChoix"} ChoiceField_Toggle: If(Toggle1.Value, "Choix_1", "Choix_2") } )
La fonction Collect ajoute des enregistrements à une source de données. Les éléments ajoutés sont du type :
Si nous utilisons une collection, d’autres colonnes sont créées si nécessaire. Les colonnes d’autres sources de données sont définies par la source de données et aucune nouvelle colonne ne peut être ajoutée.
Si la source de données n’existe pas, une collection est créée.
Les collections sont parfois utilisées pour contenir les variables globales ou effectuer une copie temporaire d’une source de données. Les applications canevas dépendent de formules recalculées automatiquement lorsque l’utilisateur interagit avec une application. Les collections ne proposent pas cet avantage et peuvent compliquer la création et la compréhension de votre application.
La fonction ClearCollect :
ClearCollect( NomCollection; SourceDonnées )
La fonction Clear supprime tous les enregistrements d’une collection, à l’exception des colonnes.
Notez que Clear fonctionne uniquement sur les collections et non sur d’autres sources de données.
Utilisez RemoveIf( DataSource, true ) dans ce deuxième cas. Soyez prudent, car vous supprimez alors tous les enregistrements de la zone de stockage de la source de données, ce qui peut avoir une incidence sur d’autres utilisateurs.
Utilisez la fonction Remove pour supprimer les enregistrements de manière sélective.
Aucune valeur n’est renvoyée avec la fonction Clear. qui peut uniquement être utilisée dans une formule de comportement.
Utilisez la fonction Remove pour supprimer un ou des enregistrements spécifiques d’une source de données. Dans les collections, l’enregistrement complet doit correspondre. Vous pouvez utiliser l’argument RemoveFlags.All pour supprimer toutes les copies d’un enregistrement. Dans le cas contraire, une seule copie de l’enregistrement est supprimée.
Utilisez la fonction RemoveIf pour supprimer un ou des enregistrements d’après une condition ou un ensemble de conditions. Chaque condition peut être une formule au choix de type true ou false, ainsi qu’elle peut référencer des colonnes de la source de données par nom. Chaque condition est évaluée individuellement pour chaque enregistrement et l’enregistrement est supprimé si toutes les conditions renvoient true.
Les fonctions Remove et RemoveIf renvoient toutes deux la source de données modifiée sous la forme d’une table. Utilisez ces deux fonctions ensemble uniquement dans les formules de comportement.
Vous pouvez également utiliser la fonction Clear pour supprimer tous les enregistrements d’une collection.
La fonction Filter permet de rechercher des enregistrements dans une table ou un collection en fonction d’une ou plusieurs conditions.
La syntaxe de la fonction Filter est la suivante :
Filter(datasource, condition1 && condition2 && ... && conditionN)
Par exemple, la formule suivante récupère tous les enregistrements d’une liste SharePoint appelée « Employés » où le service est « Ventes » et l’emplacement est « New York » :
Filter(Employees, Department = "Sales" && Location = "New York")
Pour filtrer une source de données en utilisant un contrôle, le choix entre les événements OnChange et OnSelect dépend de la spécificité de votre scénario. En résumé, OnChange est idéal pour des mises à jour en temps réel pour un filtrage dynamique et immédiat, tandis que OnSelect offre plus de contrôle à l’utilisateur en confirmant la sélection avant d'appliquer le filtre par le biais d'un autre contrôle (bouton) ainsi éviter des MAJ fréquentes.
Pour filtrer une source de données en utilisant StartsWith tout en excluant les champs vides, vous pouvez utiliser la formule suivante :
Filter(Table, StartsWith(Texte(Colonne), "Texte") || !IsBlank(Colonne))
Dans l'exemple ci-dessous, nous filtrons dans une galerie issue d'une collection sur deux colonnes. La première ligne autorise les enregistrements avec une valeur vide du premier champ 'Date Remise'. Les lignes avec une valeur vide dans le champ 'Nom' ne s'afficherons pas.
Filter( RestitutionColl; StartsWith('Date Remise'; RechDateConsRest.Text) || IsBlank('Date Remise'); StartsWith('Nom (Prenom)'; RechNomConsRest.Text) )
La fonction LookUp récupère le premier enregistrement spécifique à partir d’une source de données associée en fonction d’une valeur correspondante dans une colonne spécifique. Il est couramment utilisé pour récupérer une valeur unique à partir d’une table ou d’une liste secondaire. La syntaxe de la fonction Lookup est la suivante :
Lookup(datasource, (condition or valeur), NomColonne)
Par exemple, la formule suivante récupère Le nom de l'employé d’un employé avec l’ID « 1234 » à partir d’une liste SharePoint appelée « Employees » :
Lookup(Employees, ID.Value="1234 && Departement.Value="Dept 1",'NomEmployee'.DisplayName)
La fonction Search recherche des enregistrements dans une table ou collections ou contenant une ou plusieurs chaîne ou valeurs spécifiques dans une ou plusieurs colonnes des sources de données **.
La recherche n’est pas sensible à la casse et peut trouver des correspondances partielles.
Contrairement à Filter et LookUp, **Search utilise une valeur ou chaine unique (et non une formule) pour établir la correspondance.
Search renvoie une table contenant les mêmes colonnes que la table d’origine et les enregistrements qui contiennent la chaîne recherchée.
La syntaxe de la fonction de recherche est la suivante :
Search(datasource, searchstring, column1, column2, ..., columnN)
Par exemple, la formule suivante recherche des enregistrements dans une liste SharePoint appelée « Employés » qui contiennent le texte « John » dans la colonne « Prénom » ou « Nom » :
Search(Employees, "John", "First Name", "Last Name")
En résumé, utilisez Search pour trouver des enregistrements contenant un terme de recherche spécifique, LookUp pour récupérer un enregistrement unique basé sur une condition spécifique, et Filter pour récupérer un sous-ensemble d’enregistrements basé sur un ou plusieurs critères.
Exemple :
Sort( Table; NomTable; SortOrder.Ascending ) trie la table par la colonne NomTable
trie la table par la colonne NomTable.
Exemple :
SortByColumns( NomTable; "NomColonne1"; SortOrder.Ascending, "NomColonne2"; SortOrder.Descending )
Trie la table d’abord par la colonne NomColonne1 en ordre croissant, puis par la colonne NomColonne2 en ordre décroissant.
Pour combiner les fonctions Filter et Sort, nous pouvons imbriquer ces fonctions pour obtenir des résultats souhaités.
Exemple :
Vous pouvez utiliser les formules suivantes :
Sort( Filter(BaseDonnées, NomColonne = "IT"); ColonneDeTrie; SortOrder.Ascending //ordre croissant )
SortByColumns( Filter(BaseDonnées, NomColonne = "IT" || NomColonne2 = "RH"); ColonneDeTrie, SortOrder.Ascending //ordre croissant; ColonneDeTrie2, SortOrder.Descending //ordre décroissant, )
La fonction If teste une ou plusieurs conditions jusqu’à ce qu’un résultat true soit trouvé. Si un résultat de ce type est trouvé, une valeur correspondante est retournée. Si aucun résultat de ce type n’est trouvé, une valeur par défaut est retournée. Dans les deux cas, la valeur retournée peut être une chaîne à afficher, une formule à évaluer ou une autre forme de résultat.
If( Condition ; alors Action/Résultat ;; alors/et Action2/Résultat2 ; sinon Action/Résultat) ;; alors/et Action3/Résultat3 ; alors/et Action4/Résultat4 )
If( condition1, result1, If( condition2, result2, If( condition3, result3, defaultResult ) ) )
Exemple :
If( IsEmpty(ComboEtat_1.SelectedItems)||IsBlank(ComboEtat_1.Selected.Value); // Liste et zone de liste déroulante Notify("Veuillez Relire";NotificationType.Error);; Patch( Database; Defaults(Database); { Colonne:Gallery1.Selected.Colonne; 'Date Affectation':Gallery1.Selected.DateAffectation;'Date Remise':Text(Today();"dd/mm/yyyy"); 'Commentaire': TextInputRestComment.Text; 'Commentaire Exemple' : Gallery1.Selected.COMMENTAIRE } );; If(CheckboxPortabilité.Value = true; Patch( portabilité; Defaults(portabilité); { Colonne:Gallery1.Selected.Colonne; 'Date1':Gallery1.Selected.Date1;'Date2':Text(Today();"dd/mm/yyyy"); 'Commentaire': TextInputRestComment.Text; 'Commentaire Exemple' : Gallery1.Selected.COMMENTAIRE } ) );; Navigate(PageAccueil);; Notify("Lecture effectuée avec succès";NotificationType.Success); )
Switch(
variable, value1, result1, value2, result2, value3, result3, defaultResult
)
La fonction Concatenate permet de fusionner plusieurs chaînes de texte en une seule. Utilisez Concatenate pour créer des messages personnalisés ou des étiquettes dynamiques. Exemple :
Concatenate("Bonjour ", User().FullName)
"Bonjour " & User().FullName)
Cela affichera “Bonjour [Nom complet de l’utilisateur]” dans votre application.
La fonction Reset réinitialise un contrôle à sa valeur de propriété Default. Toutes les modifications de l’utilisateur sont ignorées.
les contrôles qui se trouvent dans un contrôle Gallery ou Edit form ne sont pas réinitialisable depuis l’extérieur de ces contrôles. La réinitialisation des contrôles à partir de formules sur les contrôles situés dans la même galerie ou le même formulaire. Vous pouvez également réinitialiser tous les contrôles d’un formulaire avec la fonction ResetForm.
Dans la propriété OnSelect du contrôle, utilisez la formule suivante :
Reset(NomTextInput)
Pour réinitialiser tous les contrôles d'un écran depuis le bouton d'un autre écran dans PowerApps, vous pouvez utiliser des variables globales avec la fonction Set.
Voici comment procéder :
1. Définir une variable globale :
Sur l'écran où se trouve le bouton, définissez une variable globale dans la propriété OnSelect du bouton. Par exemple :
<code bash>
Set(resetAllControls, true);
Set(resetAllControls, false)
</code>
2. Utiliser la variable pour réinitialiser les contrôles :
Sur l'écran où se trouvent les contrôles à réinitialiser, définissez la propriété Reset de chaque contrôle sur la variable globale resetAllControls.
Cette méthode permet de réinitialiser tous les contrôles d'un écran à partir d'un bouton situé sur un autre écran en utilisant des variables globales.
Détermine l'état d'affichage d'un contrôle.I l existe trois valeurs principales pour cette propriété :
Voici un exemple d'utilisation de la propriété DisplayMode :
If(Len(DataCardValue104.Value) = 13; DisplayMode.Edit; DisplayMode.Disabled) //Validation pour une saisie de 13 caractères
Infobulle qui apparaît lorsque l'utilisateur survole un contrôle avec la souris. Il est utilisé pour fournir des informations supplémentaires ou des instructions sur l'utilisation du contrôle et notamment lors d'une erreur de saisie.
Voici un exemple d'utilisation de la propriété DisplayMode :
If(Len(DataCardValue104.Value) <> 20; "Le numéro SIM ne comporte pas 20 chiffres"; "Entrez un numéro à 20 chiffres")
La décision de mettre un conteneur dans une galerie ou l’inverse dépend des besoins spécifiques en matière de conception et de fonctionnalité dans PowerApps. Voici quelques points à considérer :
Organisation : Placer un conteneur dans une galerie peut aider à organiser les éléments de chaque ligne de manière plus structurée. Cela est particulièrement utile si chaque ligne de la galerie contient plusieurs contrôles qui doivent être regroupés logiquement.
Réactivité : Les conteneurs peuvent aider à rendre votre application plus réactive en ajustant automatiquement la disposition des contrôles en fonction de la taille de l’écran1.
Flexibilité : Mettre une galerie dans un conteneur peut offrir plus de flexibilité pour organiser plusieurs galeries ou autres contrôles dans une seule vue. Cela peut être utile pour créer des mises en page complexes où plusieurs galeries doivent coexister.
Gestion des espaces : Les conteneurs peuvent aider à gérer l’espace autour de la galerie, en ajoutant des marges ou des bordures pour améliorer l’esthétique de l’application.
Utilisation combinée : Souvent, une combinaison des deux approches est la plus efficace. Par exemple, vous pouvez avoir une galerie principale contenant des conteneurs pour chaque ligne, tout en plaçant cette galerie dans un conteneur plus grand pour gérer la disposition globale.
Utiliser des colonnes indexées dans les bases de données sont particulièrement utiles. Ils permettent aux applications :
Pour rafraichir une page sans perdre le focus sur un filtre renseigné, nous pouvons agir en naviguant entre deux écrans avec la fonction navigate(). exemple :
Navigate(HomeScreen_1);; Navigate(Screen1)
Pour sélectionner plusieurs valeurs dans un ComboBox à l'aide d'une entrée de texte dans PowerApps, nous pouvons utiliser une combinaison de fonctions pour traiter les valeurs collées et les sélectionner dans le ComboBox par l'appui d'un bouton. Pour ce faire nous créons :
1. Une entrée de texte qui nous permettra de lister (ex: copier-coller) tous les items souhaités en sélection dans notre combobox.
2. Un bouton qui nous permettra de récuperer les items lister et de les sélectionner au combobox par défaut lors de l'appui sur ce contrôle.
Sa propriété OnSelect sera configurée de la manière suivante:
ClearCollect(ListChoixItems; Split(TextInput.Text; Char(10)));; \\ création de la table ListChoixItems avec les items listés dans l'entrée de texte séparés par un saut de ligne. Reset(ComboBox)
3. Une zone de liste déroulante où ces propriétés seront configurés de cette manière :
DefaultSelectedItems : If(Not(IsBlank(TextInput.Text)); ListChoixItems) \\ Va permettre de sélectionner les items contenus dans la table ListChoixItems DisplayFields : ["Value"]; \\ Affiche les items défini dans la propriétés Items du contrôle IsSearchable : true; \\ Permet de faire une recherche via un textinput depuis le contrôle Items : Distinct(collection; colonne_1); \\ Retourne une table d'enregistrement de la colonne colonne_1 de la collection sans doublon SearchFields : ["Value"]; \\ Affiche les items défini dans la propriétés Items du contrôle dans la zone de recherche SelectMultiple : true; \\ Permet la sélection multiple d'items dans la zone de la liste déroulante
Pour permettre le défilement d'un contrôle scrollable, celui-ci doit-être contenu dans un conteneur horizontal ou vertical selon l'orientation choisie pour le défilement de l'item. Le conteneur doit avoir sa propriété “Débordement” sur la position “Faire défiler”. La propriété LayoutMinWidth du conteneur vertical Parent doit être plus petit que celle du contrôle fils. Dans le cas d'un conteneur horizontal, nous agirons sur la propriété LayoutMinHeight.:
Comment effacer une saisie de texte dans une entrée de texte