1. Livres & vidéos
  2. Power Apps
  3. Canvas : niveau avancé
Extrait - Power Apps Créez des applications métiers avec Microsoft Power Platform (Canvas Apps, Dataverse, Power Automate, Copilot)
Extraits du livre
Power Apps Créez des applications métiers avec Microsoft Power Platform (Canvas Apps, Dataverse, Power Automate, Copilot) Revenir à la page d'achat du livre

Canvas : niveau avancé

Introduction

L’objectif de ce chapitre est de rendre votre application plus agréable à utiliser et plus sûre. Vous allez apprendre à étendre les capacités de recherche, à rendre vos formulaires contextuels et adaptatifs, et à améliorer l’ergonomie générale de l’application grâce aux thèmes, à une responsivité légère et à des indications visuelles pertinentes. Vous découvrirez également comment surveiller et déboguer votre application de manière efficace, puis comment l’empaqueter dans une solution prête à être partagée et déployée.

Recherche étendue et tri multi-critères

Nous avons déjà une recherche simple sur le titre. C’est bien. Mais les utilisateurs veulent plus : rechercher sur le titre et la description, filtrer aussi par Service, Statut et Priorité, trier par date ou par priorité, tout en restant délégable avec Dataverse.

1. Barre de recherche multi-champs

 Ajoutez un champ de recherche txtSearch en haut de l’écran liste (scrListe ou scrManager selon votre flux).

Nous allons utiliser StartsWith, qui est délégable sur Dataverse pour les colonnes de texte.

 Ajoutez un Toggle nommé tglDesc pour activer ou non la recherche dans Description.

 Dans galDemandes.Items, écrivez :

With( 
{ 
q: Trim(txtSearch.Text) 
}; 
SortByColumns( 
Filter( 
Demande; 
IsBlank(q) 
|| StartsWith(Titre, q) 
|| (tglDesc.Value && StartsWith(Description, q)) 
); 
"Datedelademande"; 
SortOrder.Descending 
) 
)  

La fonction est lisible. q est la requête. Si q est vide, aucun filtre textuel n’est appliqué. Sinon, on teste Titre. Si le toggle est actif, on teste aussi Description.

2. Filtres de facettes (Service, Statut, Priorité)

 Ajoutez trois Combo box : cmbService, cmbStatut, cmbPriorite.

 Alimentez-les avec les tables ou jeux de choix déjà...

Formulaires intelligents : logique conditionnelle, validations et règles d’affichage

Un bon formulaire guide l’utilisateur. Il affiche les bons champs, au bon moment. Il vérifie et explique. Vous allez enrichir le formulaire d’édition frmEditDemande.

1. Conditionner la visibilité

 Rendez le champ Statut invisible lors de la création. C’est pertinent : on crée d’abord, puis on traite.

 Sélectionnez la carte de données du champ Statut. Dans la propriété Visible, indiquez :

frmEditDemande.Mode <> FormMode.New  

Ou, si vous préférez garder de la flexibilité :

If(frmEditDemande.Mode = FormMode.New; false; true)  

2. Valeurs par défaut intelligentes

 Préremplissez le Demandeur avec l’utilisateur connecté :

 Sur la DataCardValue du champ Demandeur, mettez :

DefaultSelectedItems =  
If( 
!IsBlank(CurrentUser.Email); 
LookUp(Users; 'Primary Email' = CurrentUser.Email); 
Blank() 
)  

 Préremplissez la Date de la demande :

DataCardValueDate.DefaultDate = Today()  

 Définissez un Statut initial lors de la création, même si le champ n’est pas visible, avec la propriété Update de la carte de données Statut :

If(  frmEditDemande.Mode = FormMode.New; Statut.Nouveau;  DataCardValueStatut.Selected...

Ergonomie : thèmes, indications visuelles et responsivité légère

Vous n’avez pas besoin d’un rendu pixel perfect. Quelques repères visuels suffisent toutefois à améliorer l’expérience utilisateur.

1. Thème et couleurs

 Choisissez un thème cohérent (ruban Thèmes).

 Uniformisez les boutons d’action :

  • Nouveau en accent (bleu) ;

  • Enregistrer en vert ;

  • Supprimer en rouge discret.

Vous pouvez aussi centraliser les couleurs dans des variables à l’ouverture de l’app (App.OnStart) afin de disposer d’un fichier de paramétrage du thème pour l’application :

Set(clrAccent; RGBA(56; 96; 178; 1));; Set(clrOk; RGBA(16; 124; 16; 1));; 
Set(clrWarn; RGBA(255;185; 0; 1));; Set(clrErr; RGBA(208; 52; 44; 1))  

 Utilisez ensuite clrAccent, clrOk, etc., dans les propriétés Fill et Color.

2. Badges de statut

 Ajoutez une petite capsule couleur à côté du statut.

 Sur un label dédié, définissez la propriété Fill :

With({s: ThisItem.Statut.Value}; 
Switch( 
s ; 'Statut de la demande (Demandes)'.Nouveau; RGBA(0;120;212;0,15); 
'Statut de la demande (Demandes)'.'En cours'; RGBA(255;185;0;0,2); 
'Statut de la demande (Demandes)'.Résolu; RGBA(16;124;16;0,18) ...

Supervision et débogage : logique, Monitor et erreurs gérées

Il faut pouvoir comprendre ce qui se passe lorsque l’application fonctionne.

Deux leviers permettent de le faire : Monitor et une journalisation légère.

1. Utiliser Monitor

 Depuis Power Apps Studio, lancez Monitor.

 Ouvrez l’app dans une nouvelle session et rejouez un scénario : recherche, filtrage, enregistrement.

Vous verrez les appels Dataverse, les temps de réponse et les erreurs éventuelles.

Repérez :

  • les requêtes répétées à l’identique, à optimiser avec Concurrent, With ou ClearCollect ;

  • des erreurs 403 (droits), 429 (throttling) ;

  • les avertissements de délégation.

Notez ce que vous observez. Corrigez, puis rejouez le scénario. L’analyse est très visuelle.

2. Gérer les erreurs de données

 Ajoutez des messages dédiés :

  • Si cmbService.Selected est vide, affichez Merci de choisir un service.

  • Si Len(Description) < 20, affichez Donnez plus de détails.

  • Si l’enregistrement échoue, affichez le message Dataverse, puis proposez Réessayer.

 Cliquez sur le bouton Envoyer puis, dans la propriété OnSelect du bouton:

If(  IsBlank(cmbService.Selected);  Notify("Merci de choisir un service."; NotificationType.Warning);  SubmitForm(frmEditDemande)...

Packaging ALM : solutions, gérées vs non gérées, export/import

Pour un projet destiné à aller en production, on ne déploie pas une app à la main, sans solution, puis tous les autres éléments les uns après les autres. On la place dans une solution. On choisit le bon type, puis on exporte et on importe selon les environnements (DEV → TEST → PROD). C’est propre et reproductible. 

1. Créer une solution (rappel rapide)

 Dans make.powerapps.com, cliquez sur Solutions - Nouvelle solution.

Nom : FilRouge-Demandes.  

Éditeur : votre éditeur.

Version : 1.0.0.0.

Environnement : DEV.

 Créez la solution, puis ouvrez-la.

 Ajoutez tous les composants utiles : tables Dataverse (Demande, Service, jeux de choix), vues, formulaires, app Canvas et références de connexion. Conservez un périmètre cohérent.

2. Gérée (managed) vs non gérée (unmanaged)

Dans Dataverse, une solution existe sous deux formes distinctes, selon l’étape du cycle de vie de votre application :

  • Non gérée : pour développer. Vous modifiez directement la solution, ajoutez des colonnes et des vues, puis testez vos changements.

  • Gérée : pour déployer. Vous ne modifiez pas directement la solution en PROD. Vous la remplacez...

Partage final : app, tables, rôles, principes

Partager une app est simple. Mais bien la partager demande trois vérifications : l’app, les tables et les rôles.

1. Partager l’app

 Depuis l’app dans la solution, sélectionnez Partager.

images/06RI03.png

 Choisissez des utilisateurs ou des groupes.

images/06RI04.png

 Attribuez le rôle Co-propriétaire uniquement si nécessaire, par exemple aux personnes qui modifieront l’app. Sinon, le rôle Utilisateur suffit.

2. Droits Dataverse

Le partage de l’app ne donne pas les droits de données.

 Assignez un rôle de sécuritéDataverse.

  • Pour les collaborateurs : lecture et écriture sur leurs demandes, lecture des services actifs.

  • Pour les managers : lecture globale des demandes, écriture sur leur périmètre, lecture et écriture sur Service si nécessaire.

  • Pour la DSI : administration.

 Testez avec un compte de test. Ouvrez l’app. Vérifiez :

  • les listes s’affichent ;

  • les enregistrements visibles sont bien ceux attendus ;

  • les actions interdites sont grisées, grâce à DataSource Info ;

  • les enregistrements sont sauvegardés sans erreur.

3. Lier l’app à Teams (optionnel)

Vous pouvez intégrer l’app dans un onglet Teams pour un accès rapide. C’est pratique pour la DSI ou pour un service. Pensez...

Contrôles finaux de qualité

Avant une diffusion large, faites une courte checklist :

Performance

  • Pas de filtres répétés sur les mêmes critères : regroupez-les avec With ou ClearCollect.

  • Les écrans complexes préchargent leurs dépendances dans OnVisible avec Concurrent.

  • Pas d’agrégats lourds dans les modèles de galerie, sauf sur de petits volumes.

Délégation

  • Recherche avec StartsWith sur les colonnes pertinentes.

  • Filtres sur les lookups par identifiant ou relation directe, et non sur du texte libre.

  • Aucun avertissement bleu résiduel sur les galeries principales.

UX

  • Indicateurs clairs : badges de statut, messages d’aide et validations.

  • Boutons homogènes.

  • Navigation sans impasse : un retour reste toujours possible.

Sécurité

  • Rôles Dataverse testés.

  • Boutons masqués ou désactivés selon DataSourceInfo.

  • Données sensibles non exposées.

ALM

  • Tout est dans une solution.

  • La version est incrémentée.

  • L’export et l’import ont été testés au moins une fois.

Ce que nous avons construit dans ce chapitre :

  • Une recherche souple, des filtres fins et un tri au choix.

  • Des formulaires qui s’adaptent au contexte.

  • Des contrôles visuels qui guident sans alourdir.

  • Une supervision à portée de clic avec Monitor.

  • Un packaging propre...

Utiliser les collections pour améliorer la performance

Quand on commence à développer une application Canvas connectée à Dataverse, on a tendance à tout lire directement depuis la source de données. On se dit : pourquoi s’embêter avec des collections alors qu’il est possible d’afficher la table Demandes dans une galerie en un clic ?

C’est vrai, et cela fonctionne très bien pour des scénarios simples. Mais dès que l’application grossit, que le volume de données augmente ou que les utilisateurs enchaînent les actions, les temps de réponse deviennent perceptibles.

C’est là que les collections entrent en jeu.

1. Rappel : qu’est-ce qu’une collection ?

Une collection peut être comparée à une petite base de données temporaire qui vit dans votre application. Elle se charge en mémoire lorsque vous ouvrez l’application et disparaît lorsque vous la fermez.

Contrairement à Dataverse, elle ne communique pas avec le serveur en continu. Elle est donc très rapide à interroger ou à manipuler.

On crée une collection avec la fonction ClearCollect. Cette fonction a deux rôles : vider une collection existante puis la remplir avec de nouvelles données.

Par exemple, dans notre fil rouge, il est possible de charger toutes les lignes...

Gérer des états complexes avec les variables globales

Dans une application Canvas connectée à Dataverse, certaines situations nécessitent de conserver une information tout au long de la navigation. Par exemple, l’utilisateur connecté, son rôle, le mode actuel de l’application, ou encore une valeur de filtre qui doit s’appliquer sur plusieurs écrans.

Pour répondre à ces besoins, Power Apps met à disposition les variables globales.

1. Qu’est-ce qu’une variable globale ?

Une variable globale est une donnée stockée en mémoire qui peut être utilisée n’importe où dans l’application. Contrairement aux collections, qui contiennent plusieurs lignes et colonnes, une variable globale est pensée pour stocker une valeur unique, comme un texte, un nombre ou même un enregistrement unique.

Elles se définissent avec la fonction Set.

Exemple simple :

Set(varMode; "Création");  

Ici, une variable globale appelée varModeest créée et reçoit la valeur Création. Cette valeur reste disponible tant que l’application est ouverte.

2. Pourquoi utiliser des variables globales ?

Les variables globales sont pratiques dans plusieurs cas :

  • Déterminer le mode d’un écran (création, édition, consultation).

  • Conserver...

Conclusion et mise en perspective

Nous avons parcouru un long chemin dans cette partie complémentaire. L’objectif était simple : combler les zones laissées de côté dans notre exploration de Dataverse et des applications Canvas.

Nous avons d’abord pris le temps de comprendre la différence entre une colonne de type choix et une relation lookup. Cette distinction est essentielle : elle détermine si votre application repose sur une liste figée de valeurs ou sur une table vivante, capable d’évoluer et de stocker des informations riches. C’est une décision de modélisation structurante, qui influence directement l’évolutivité de votre application.

Nous avons ensuite découvert comment exploiter les colonnes lookup dans une application Canvas. À travers des exemples concrets dans une galerie et un formulaire, nous avons vu comment naviguer dans les données liées. Nous avons appris que Power Apps ne se contente pas d’afficher un simple champ, mais peut parcourir les relations et exposer les valeurs qui comptent vraiment pour l’utilisateur final.

Puis nous avons abordé un aspect plus avancé : l’utilisation des variables globales et des collections. Ces outils permettent d’améliorer les performances, de simplifier la logique et de préparer l’application à...