Автоматическое обновление данных 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]);