Публикация

Автоматическое обновление данных Dashboard (графиков, аналитика, итоги)

Вопрос

Как включить автоматическое обновление Dashboard-ов?

Ответ

На данный момент (версия 7.6.Х) на пользовательском уровне автоматическое обновление включить нельзя, но можно использовать для решения этой задачи подписку на сообщения ReloadDashboard, которая есть у всех виджетов панели итогов (dashboard).
Для этого можно создать свой модуль без родительского объекта, например UsrDashboardHelper,
в сообщениях добавить ReloadDashboard (Направление: Публикация, Режим: Адресное).
Код возможной реализации генерации событий может быть следующим:

define("UsrDashboardHelper", ["ext-base", "terrasoft", "sandbox"], function(Ext, Terrasoft, sandbox) {
   var getView = function() {
      var config = {
         id: "UsrDashboardHelper",
         selectors: {
            wrapEl: "#UsrDashboardHelper"
         },
         items: []
      };
      return Ext.create("Terrasoft.Container", config);
   };
   return {
      timerId: 0,
      myTimer: function() {
         console.log("tik");
         sandbox.publish("ReloadDashboard", null, ["SectionModuleV2_UsrAutomobileSectionSectionDashboardDashboardModule"]);
      },
      init: function() {
         console.log("UsrDashboardHelper is on in: " + sandbox.id);
         this.timerId = setInterval(this.myTimer, 30000);
      },
      render: function(renderTo) {
         var view = getView();
         view.render(renderTo);
      },
      destroy: function() {
         console.log("UsrDashboardHelper is off!");
         clearInterval(this.timerId);
      }
   };
});

После создания модуля, его можно добавить как виджет, в настройках "dashboard-а", что приведет к выполнению его кода на странице. Данная его реализация будет обновлять все виджеты на странице, имеющие подписку на событие ReloadDashboard, и находящиеся в песочнице, указанной третьим параметром в методе sandbox.publish(...) каждые 300000 миллисекунды (5 минут).

Id песочницы вашей страницы итогов можно узнать посмотрев значение "sandbox.id",
в методе подписки всех "виджетов" на событие "ReloadDashboard", поставив точку остановки в модуле DashboardModule.js на строке:
 

sandbox.subscribe("ReloadDashboard", this.onReloadDashboard, this, [sandbox.id]);

 

Нравится

Поделиться

0 комментариев
Показать все комментарии