===== PRESENTATION =====
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.
\\
===== CONTROLE =====
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).
==== Conteneur ====
Un contrôle conteneur est utilisé pour regrouper logiquement d’autres contrôles. Voici quelques détails à son sujet :
* Le conteneur peut contenir un ensemble de contrôles et possède ses propres propriétés.
* Nous pouvons commencer par insérer un conteneur vide, puis le personnaliser en y ajoutant des contrôles, en le redimensionnant, en le déplaçant, en le masquant et en apportant d’autres modifications.
* Les conteneurs affectent la présentation de l’application et aident les utilisateurs à comprendre la structure de l’application.
* Notez que les conteneurs ne fonctionnent pas dans les formulaires, et certains contrôles (comme la table de données, la visionneuse PDF et le scanner de codes-barres web) ne sont pas compatibles avec un conteneur.
==== Gallery ====
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 :
* Affiche les éléments côte à côte, de gauche à droite.
* Convient pour afficher plusieurs éléments avec une largeur limitée.
* Utilisé lorsque l’espace horizontal est plus important que la hauteur.
Galerie Verticale :
* Affiche les éléments les uns en dessous des autres, de haut en bas.
* Idéal pour afficher des listes d’éléments avec une hauteur limitée.
* Utilisé lorsque l’espace vertical est plus important que la largeur.
Galerie Vide (Hauteur Flexible) :
* Ajuste automatiquement la hauteur de chaque élément en fonction de son contenu.
* Utile lorsque les éléments de votre jeu de données ont des quantités de données variables dans le même champ.
* Vous pouvez afficher complètement les éléments contenant plus de données sans ajouter d’espace vide après les éléments contenant moins de données1.\\
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.
==== Texinput - entrée de texte ====
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 :
* "Par Défaut", supprimez le texte
* "Texte d'information| HintText", ajoutez le texte désiré par défaut
* "OnSelect" du contrôle à configurer, entrez la formule suivante : Reset(NomTextInput)
{{:microsofplatforms:powerapps:powerappstextinput2.png?400|}}
==== Label - étiquette de texte ====
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
\\
==== Radio - Case d'option ====
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"]
\\
==== Checkbox - case à cocher ====
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.
\\
==== Toggle - bascule (bouton) ====
Fonctionne de la même manière qu'une case à cocher.
\\
===== FONCTION =====
==== Navigate ====
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, Collect ====
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 ====
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")
}
)
==== Collect ====
La fonction Collect ajoute des enregistrements à une source de données. Les éléments ajoutés sont du type :\\
* Valeur unique : la valeur est placée dans le champ Value d’un nouvel enregistrement. Toutes les autres propriétés sont blank.\\
* Enregistrement : chaque propriété nommée est placée dans la propriété correspondante d’un nouvel enregistrement. Toutes les autres propriétés sont vides.\\
* Table : chaque enregistrement de la table est ajouté sous forme d’enregistrement séparé de la source de données, comme décrit ci-dessus. La table n’est pas ajoutée à un enregistrement sous forme de table imbriquée. Pour cela, incluez tout d’abord la table dans un enregistrement.\\
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.\\
==== ClearCollect ====
La fonction ClearCollect :
* Supprime tous les enregistrements d’une collection
* Ajoute un ensemble différent d’enregistrements à la même collection.
* Regroupe Clear et Collect dans une même fonction.
* Renvoie la collection modifiée en tant que table. La fonction ClearCollect peut uniquement être utilisée dans une formule de comportement.\\
ClearCollect(
NomCollection;
SourceDonnées
)
==== Clear ====
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.
==== Remove ====
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.
==== Removeif ====
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.\\
==== Filtre ====
=== Filter ===
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")
* Utilisez Filter permet de trouver un ensemble d’enregistrements correspondant à un ensemble de critères et exclure ceux qui ne correspondent pas.
* La formule est évaluée pour chaque enregistrement de la table, et les enregistrements dont le résultat est true font partie du résultat.
* Vous pouvez utiliser des opérateurs de formule habituels ainsi que les opérateurs in et exactin pour les correspondances de sous-chaînes.
* Filter renvoie une table contenant les mêmes colonnes que la table d’origine et les enregistrements qui correspondent aux conditions de recherche.\\
\\
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)
)
\\
=== LookUp ===
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)
* Utilisez LookUp pour trouver un enregistrement unique correspondant à un ou plusieurs critères à partir d’une source de données secondaire.
* La formule est évaluée pour chaque enregistrement de la table jusqu’à ce qu’un enregistrement satisfaisant soit trouvé.
* LookUp renvoie uniquement le premier enregistrement trouvé, après avoir appliqué la formule pour limiter l’enregistrement à une valeur unique.\\
=== Search ===
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.
==== Sort Trie SortByColumns ====
=== Sort ===
* Trie une table en fonction d’une formule.
* La formule est évaluée pour chaque enregistrement de la table, et les résultats sont utilisés pour trier la table.
* La formule doit retourner un nombre, une chaîne ou une valeur booléenne.
Exemple :\\
Sort(
Table;
NomTable;
SortOrder.Ascending
)
trie la table par la colonne NomTable
trie la table par la colonne NomTable.\\
\\
=== SortByColumns ===
* Trie une table en fonction d’une ou plusieurs colonnes spécifiées.
* Les noms des colonnes sont fournis sous forme de chaînes.
* Permet de trier par plusieurs colonnes dans un ordre spécifique.
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.\\
\\
==== Trie avec Filtre ====
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,
)
==== If ====
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
)
==== Concatenate ====
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.
==== Reset ====
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 :\\
Set(resetAllControls, true);
Set(resetAllControls, false)
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.
===== PROPRIETE CONTRÔLE =====
==== Displaymode ====
Détermine l'état d'affichage d'un contrôle.I l existe trois valeurs principales pour cette propriété :
* DisplayMode.Edit : Le contrôle est en mode édition, ce qui permet à l'utilisateur de modifier son contenu. Par exemple, un champ de texte sera éditable.
* DisplayMode.View : Le contrôle est en mode affichage, ce qui signifie que l'utilisateur peut voir le contenu mais ne peut pas le modifier. Par exemple, un champ de texte affichera les données sans permettre la saisie.
* DisplayMode.Disabled : Le contrôle est désactivé, ce qui signifie qu'il est grisé et que l'utilisateur ne peut ni le voir ni le modifier.
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
==== Tooltip ====
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")
===== BONNE PRATIQUE =====
==== conteneur dans une galerie ou l'inverse ====
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 :
=== Conteneur dans une Galerie ===
**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.
=== Galerie dans un Conteneur ===
**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.\\
=== Conclusion ===
**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.
==== Base de données, Liste et colonne ====
Utiliser des colonnes indexées dans les bases de données sont particulièrement utiles. Ils permettent aux applications :
- **L'amélioration des performances :** accélère les requêtes et les opérations de filtrage dans PowerApps, surtout lorsque nous travaillons avec de grandes listes SharePoint. Cela garantit que les applications restent réactives et performantes.
- **L'optimisation des filtres et des tris :** Crée des filtres et des tris plus efficaces dans nos applications. Cela permet aux utilisateurs de trouver rapidement les informations dont ils ont besoin.
- **La gestion des grands ensembles de données :** Gère les listes contenant un grand nombre d’éléments, en permettant à PowerApps de traiter les données plus efficacement et de contourner les limitations de performance.
- **Une intégration fluide :** Lors de la création d’applications PowerApps qui se connectent à des listes SharePoint, les colonnes indexées facilitent l’intégration et la manipulation des données, rendant les applications plus robustes et fiables.
===== ASTUCES =====
==== Rafraichir page ====
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)
==== Recherche et filtre combobox ====
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
==== Défilement Conteneur ====
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.:
- Nous créons un conteneur horizontal.
- Nous activons le défilement en mettant la propriété Débordement vertical ou horizontal sur la position "Faire défiler".
- Nous ajoutons une valeur 50 à la propriété LayoutMinHeight de notre conteneur horizontal dans notre cas.
- Dans notre conteneur horizontal, nous ajoutons un conteneur vertical ou horizontal.
- Nous ajoutons une valeur 100 à la propriété LayoutMinHeight de notre conteneur horizontal dans notre cas.
==== Défilement Galerie ====
===== Le saviez-vous ? =====
Comment effacer une saisie de texte dans une entrée de texte\\
\\
===== RESSOURCES =====
[[https://thtioxine.developpez.com/tutoriels/web/tutoriel-powerapps-developpement-from-scratch-une-application-logistique/?page=developpement|Tutoriel sur Developpez.com]]\\
[[https://learn.microsoft.com/fr-fr/power-platform/power-fx/reference/function-clear-collect-clearcollect|Fonctions Collect, Clear et ClearCollect]]\\
[[https://learn.microsoft.com/fr-fr/power-platform/power-fx/reference/function-patch|Fonction Patch]]\\
[[https://zeitgeistcode.com/powerapps-lookup-vs-filter-search-function/?utm_content=cmp-true|Fonctions de Filtre]]\\
[[https://www.inkeysolutions.com/blogs/how-to-create-a-horizontal-scrollable-gallery-in-power-apps-canvas-apps/|Galerie défilante scrollable]]\\
[[https://learn.microsoft.com/fr-fr/power-platform/power-fx/reference/function-reset|Fonction Reset]]\\