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