Répondre à: Mode Offline : Limites de stockage et documents
-
@Tanguy Touzard marrant, je vais justement participer aux journées complètes de formation de la MWCP2022 où j’aborderais (entre autres) le sujet du mode déconnecté sous Power Apps 😁 :
https://modern-workplace.pro/agenda-2022/#page-content
Alors pour répondre à tes questions :
- La première chose vraiment importante c’est de bien prendre en compte ce besoin du mode déconnecté dès le début de la conception. Car transformer une application déjà existante pour lui rajouter du mode déconnecté c’est juste l’enfer. Principalement à cause de la manière dont tu gères les données dans l’appli lorsqu’elle inclue le mode déconnecté.
- La gestion des données est donc particulière en mode déconnecté. J’ai fait une grosse appli en mode déconnecté et j’ai choisi de fonctionner comme ceci : la totalité de l’application ne tourne qu’avec des collections locales. Dans les écrans de l’application il n’y a jamais aucun référencement direct aux sources de données (moi c’était du SharePoint), SAUF à la sauvegarde.
- Cela implique qu’il faut impérativement que ton applications puisse tourner avec des volumes de données inférieur à 2000 enregistrements. Parce-que sinon tu t’embarques dans un truc encore plus complexe qu’il ne l’est déjà. Je dis pas que c’est pas impossible mais bon, si on peut l’éviter…
- Dans mon appli, le seul écran qui fait appel aux sources de données c’est l’écran de démarrage qui charge les données nécessaires pour que l’application soit utilisable :
- Il regarde si on est en mode connecté ou pas.
- Si on est connecté, il charge dans des collections toutes les données depuis les sources de données et les RE-stocke en cache local avec SaveData() pour les avoir à dispo au lancement suivant pour le cas où on soit en déconnecté.
- Si on est déconnecté, il charge dans des collections toutes les données depuis le cache local avec LoadData().
- A partir de ce moment-là, vu que tout est chargé dans des collections et que toute ton application ne fait que travailler avec ces collections, ton appli est utilisable que l’on soit en mode connecté ou pas. Et pendant toute son utilisation finalement on s’en fichera pas mal de savoir si on est connecté ou pas, SAUF à la sauvegarde.
- Astuce : pour simuler le mode déconnecté pendant la phase de développement, tu peux mettre un toggle togConnecté quelque part sur un écran que tu définis par défaut à true. Et là l’étape 4.a) tu alimentes une variable gloConnecté avec togConnecté.Value || Connection.Connected. Et c’est gloConnecté que tu testes pour savoir si t’es connecté ou pas.
- Dans l’application, à la sauvegarde :
- Si t’es connecté tu sauvegardes tes collections dans tes datasources
- Ensuite tu sauvegardes toujours tes collections dans le cache local avec le SaveData()
- Attention : si ta source de données génère des données automatiques à la création des enregistrements et que tu en as besoin dans l’appli en mode déconnecté, alors après avoir sauvegardé tes données vers tes datasources, recharge tes collections à partir de tes datasources avant de les sauvegarder dans le cache local.
- Attention : si tu utilises des formulaires dans ton appli et que tu as des champs de type Choice (liste de valeurs), il va falloir que tu les sauvegardes aussi en cache local car la fonction Choices() ne fonctionne que sur de la vraie source de données. Il faudra donc que toi-même tu forces le Items de ces champs-là non pas à du Choices() mais à une collection chargée depuis le cache local.
- Prévois-toi aussi un écran de débogage qui t’affiche facilement en permanence le contenu de tes collections qui sont en cache local. Parce-qu’il n’y a aucun moyen d’y accéder autrement… Et tant qu’à faire, moi j’y avais ajouté la possibilité de supprimer des enregistrements du cache voire carrément de vider une entrée du cache local.
- Tu as de la chance, désormais les fonctions LoadData() et SaveData() fonctionnent en mode web. Auparavant elles ne fonctionnaient que sur des devices mobiles (bien relou pour les test). Assure-toi juste d’avoir activé la fonctionnalité expérimentale correspondante :
Enfin, par rapport aux volumes de données, désormais la limite est celle du device sur lequel l’application tourne (ah : je viens de voir qu’à priori en mode web c’est assez limité… surprenant… à challenger peut-être) :
C’est extrait de la doc de la fonction SaveData() que je t’ai mis ci-dessous…
👉 Ah et par rapport à ta question sur les PDF, je suis pas sûr d’avoir bien compris : tu veux pouvoir rendre des PDF accessibles en mode offline ? Si c’est le cas, je ne crois pas que ce soit possible car le composant lecteur de PDF proposé par Power Apps ne prend en entrée que des URLs. Or, un fichier PDF stocké en local n’aurait pas d’url… A creuser… Je vais réfléchir de mon côté…
Autre resources
- La doc officielle des fonctions SaveData(), LoadData(), ClearData() et Connection.
- Matthew Devaney a fait un p’tit article qui donne les base du concept également, avec un exemple :
Voilou… N’hésite pas à poser d’autres questions si nécessaire… 😉
CommentID=UnAK1rctoRaMZ2o, PostID=4BxZK1snba2M2pC