Здравствуйте. Давайте по пунктам:
- Специального события, на которое можно подписаться, к сожалению нет.
- Вы можете в урл явно указать те фильтры, которые вы хотите сделать по-молчанию, с возможностью их потом изменить в упр.деше.
В урле они останутся как есть, а вот деши подхватят те изменения, которые вы внесли в упр.деше. Потому после перезагрузки дефолтное значение сохранится.
Пример урла с выставленными фильтрами на дименшн sex и age, name:
http://site.ru/#/ds/ds_54/dashboards?&f.age>=50&f.sex=Мужской&f.name=Болик,Лёлик,Анаболик
К сожалению, вы не сможете их выставить автоматически после перехода на дешборд из коробки.
Однако, вы сможете принудительно выставлять дефолтные фильтры при помощи проекта luxmsbi-web-resources или bi-magic-resources, если еще не знакомы.
Тред, в котором описывается подход к кастомной разработке тут
https://help.luxmsbi.com/-1197#post-10
Вы создадите в проекте файл (реакт-компонент), например DefaultFilterSetter.tsx
В нем пропишете логику, которая сводится к следующему:
Если фильтры в модели сервиса фильтры есть пустой объект (если человек не выставлял фильтры руками , то считается, что общей фильтрации не было, только локальная для каждого дешлета, при условии, что в блоке filters у вас прописаны фильтры на дименшн явно)
- Вы можете создать дешлет, который имеет view_class: “internal” и указать в качестве файла DefaultFilterSetter.js
- указать в JSON editor режиме для данного дешлета параметры x и у в блоке frame равными нулю, так чтобы размеры дешлета не учитывались при расчете отступов и размеров соседей и ваша сетка дешлетов не изменилась.
Возможно, что опция “Скрытый” в блоке Опции дешлета может вам помочь.
Код DefaultFilterSetter.tsx может быть примерно таким
import React, {useEffect} from “react”;
import {KoobFiltersService, useServiceItself} from “bi-internal/services”;
const DefaultFilterSetter = (props) => {
const {cfg} = props;
const koobFiltersService = useServiceItself(KoobFiltersService);
const koobFiltersServiceModel = koobFiltersService.getModel();
useEffect(() => {
if (!koobFiltersServiceModel.loading && !Object.keys(koobFiltersServiceModel.filters).length) {
// Если фильтров нет, то есть если koobFiltersServiceModel.filters = {}
// то ставим дефолтный набор фильтров. Можно читать их из конфига
// например вы в конфиге сделали ключ myFilters и туда поместили фильтры аналогично тем,
// что приведены в объекте, отдаваемом setFilters тут? в блоке дефолта
if (cfg.getRaw().hasOwnProperty('myFilters')) {
koobFiltersService.setFilters(cfg.getRaw().myFilters);
} else {
// Блок дефолта (задаете хардкодом)
koobFiltersService.setFilters({
name: ["=", "Болик", "Лёлик", "Анаболик"],
sex: ["!=", "Мужской"],
age: [">=", 50]
});
}
}
}, []);
return (
<></>
)
}
export default DefaultFilterSetter;
Вот. Можете сбилдить tsx файл проектом и перенести js файл руками в разделе resources вашего датасета, или запустить команду для автоматической сборки и отправки ваших компонентов.
npm run push например
На всякий случай поясню, что если для вас сработает вариант с указанием нулевых размеров, то потом вам будет проблематично править получившийся файл, потому его конфиг, если он будет нужен вы сможете получить в разделе edt-entities в табе dashlets и указанием нужного дешлета.
http://site.ru/#/ds/ds_54/edt-entities