Power Apps : éviter de perdre le focus sur un input d'une galerie
Un problème récurrent sur les galeries Power Apps dans lesquelles on a des input, est la perte du focus après avoir fait une tabulation. Ce problème apparaît souvent lorsque l'on a des propriétés OnChange sur un input qui vont modifier la source de la galerie en direct (cela permet de s'astreindre de bouton sauvegarder). Nous allons voir une astuce pour résoudre ce problème qui peut être un gros ennemi des clients habitués à Excel.
Souvent, dans des applications Power Apps, on utilise une collection pour récupérer en local des informations de sources distantes comme SharePoint ou Dataverse. Ces collections sont très pratiques pour s'astreindre des problèmes de délegations car elles sont plus permissives. Une bonne pratique est à l'initialisation de la page, initialiser la collection qui sera affichée dans la galerie et, lorsque l'on voudra faire des ajouts/modif/suppression, le faire sur la source et la galerie. Mais avec cela on se retrouve avec le problème décrit plus haut.
L'astuce est d'initialiser une collection bis à chaque fois que l'on charge notre première collection. Notre première collection sera uniquement utilisée pour l'affichage des valeurs dans la galerie mais ne sera pas modifiée directement.
Les ajouts et suppressions seront fait uniquement sur la source distante, puis on recharge nos deux collections comme auparavant. Cela n'est pas problématique car on ne fait pas cette action depuis un input donc avoir un rechargement de la galerie ici ne posera pas un trop gros problème pour l''utilisateur.
En revanche pour les modifications d'un élément de la galerie voilà la démarche : dans le OnChange, on patch uniquement la collection bis ainsi que la source distante avec la nouvelle information. Cela ne fera pas recharger la galerie. Il y aura dés lors, une différence entre la collection bis et de base, mais cela n'est pas problématique car en l'apparence, on en n'a pas l'impression.
L'astuce est d'initialiser une collection bis à chaque fois que l'on charge notre première collection. Notre première collection sera uniquement utilisée pour l'affichage des valeurs dans la galerie mais ne sera pas modifiée directement.
Les ajouts et suppressions seront fait uniquement sur la source distante, puis on recharge nos deux collections comme auparavant. Cela n'est pas problématique car on ne fait pas cette action depuis un input donc avoir un rechargement de la galerie ici ne posera pas un trop gros problème pour l''utilisateur.
En revanche pour les modifications d'un élément de la galerie voilà la démarche : dans le OnChange, on patch uniquement la collection bis ainsi que la source distante avec la nouvelle information. Cela ne fera pas recharger la galerie. Il y aura dés lors, une différence entre la collection bis et de base, mais cela n'est pas problématique car en l'apparence, on en n'a pas l'impression.
Il faudra être vigilant sur certains modules qui se calculent sur les informations contenues dans notre galeries (comme les sommes, moyennes, nombre d'éléments, etc) afin qu'il se calcule sur la collection bis qui elle est à jour contrairement à celle de base. Idem si lorsque l'on veut supprimer tous les éléments d'une galerie, il faut se baser sur les éléments de la collections bis.
Il est possible que pour certains affichages complexes avec des actions particulières, cette méthode puisse donner dur fil à retordre mais je pense qu'il est toujours possible de s'en sortir si on la raffraichie au bon moment où se base sur la collection bis.