2012-11-30 3 views
0

J'ai créé une application Web simple à l'aide des scripts Google Apps. L'interface utilisateur affiche simplement quelques numéros mis à jour en continu dans un FusionTable. Un système d'acquisition de données personnalisé fonctionne localement dans ma maison et envoie de nouveaux résultats chaque minute jusqu'au FusionTable. Je souhaite mettre à jour l'interface utilisateur de ma webapp GAS à intervalles d'une minute afin que les nouveaux numéros soient affichés.Actualiser automatiquement l'interface utilisateur Web Apps de Google Apps Scripts?

J'ai la moitié du problème résolu en exécutant un déclencheur de pilote de temps pour récupérer périodiquement des données de FusionTable et stocker les nombres dans ScriptDb de mon script. Donc, cela fonctionne bien pour obtenir mes données dans le bon quartier. Mais je ne vois toujours pas comment mettre à jour périodiquement une zone de texte dans mon interface utilisateur avec les nouvelles données. Jusqu'à présent, j'ai manuellement configuré un bouton d'actualisation sur l'interface utilisateur que l'utilisateur peut cliquer pour mettre à jour l'affichage avec les numéros les plus récents stockés dans le ScriptDb. Je suis si proche que je peux le goûter!

Quelqu'un a une idée?

Répondre

5

Vous pouvez utiliser la méthode UiInstance.addTimer pour l'actualisation automatique, mais ce n'est pas documenté et peut-être pas pris en charge.

Sa syntaxe est UiInstance.addTimer(ServerHandler , interval);

Voir l'exemple de code ci-dessous.

function doGet(e) { 

  var app = UiApp.createApplication(); 

   

  app.add(app.createLabel(new Date()).setId("label")); 

   

  app.addTimer(app.createServerHandler("update") , 1000); 

   

  return app; 

} 



function update(e){ 

  var app = UiApp.getActiveApplication(); 

  app.getElementById("label").setText(new Date()); 

  app.addTimer(app.createServerHandler("update") , 1000); 


  return app; 

} 

Un exemple d'application peut être trouvé here.

+0

Nice. Merci pour le conseil. Je vais essayer. – Who8MyLunch

+0

D'accord, c'était très facile à mettre en œuvre. J'ai d'abord été troublé par votre utilisation de addTimer() dans les deux fonctions doGet() et update(). Il semble que l'événement de minuterie créé ici soit un tir ponctuel, d'où la nécessité de l'appeler dans la fonction update(). Cela garantit une suite d'événements. Dans mon implémentation, je n'ai pas appelé addTimer() de doGet(). Au lieu de cela, j'appelle simplement update() de doGet(), et cela suffit pour lancer le processus. Merci beaucoup pour l'idée. – Who8MyLunch

+0

L'utilisation d'une minuterie provoque un «échec inattendu» si la création de l'application est globale. Sans une minuterie ce n'est pas un problème du tout et utile – SoftwareTester

1

Malheureusement, Google Apps Script ne dispose pas encore d'une fonction de temporisation permettant de mettre à jour l'interface utilisateur fréquemment. Cependant, il y a un hack que j'ai écrit un certain temps et est disponible dans l'ancien Apps forum Script à http://productforums.google.com/forum/#!topic/apps-script/2pqhh_eTIvQ

Il y a eu raffinements plus que vous pouvez rechercher dans stackoverflow, mais le principe de base reste le même à dire que vous Exploitez le fait que vous pouvez modifier par programme la valeur d'une case à cocher ET déclencher son gestionnaire de changement.

+0

Merci l'homme! Je vais vérifier ça aujourd'hui. – Who8MyLunch

2

Utilisez une feuille de calcul pour l'affichage. Ils autoupdate.

Stackoverflow, ce n'est pas un merci, mais la solution, mais pour vous:

  1. Faire une feuille de calcul
  2. ajouter un service pour l'affichage
  3. ont mise à jour le service tableur
  4. montre une feuille de calcul
Questions connexes