supersetDashboard
|
Для работы компонента требуется дополнение Superset. |
supersetDashboard встраивает в экраны приложения дэшборды, настроенные в Apache Superset.
XML-элемент |
|
|---|---|
Java-класс |
|
Основы
Объявите пространство имен superset в XML-дескрипторе экрана:
<view xmlns="http://jmix.io/schema/flowui/view"
xmlns:superset="http://jmix.io/schema/superset/ui"
title="msg://dashboardView.title">
|
Studio автоматически добавляет пространство имен, когда вы добавляете компонент с помощью действия Add Component на верхней панели действий. См. Палитра компонентов. |
Добавьте supersetDashboard в экран и укажите его id, размеры и полученный из Apache Superset идентификатор embeddedId:
<superset:dashboard id="dashboard" width="100%" height="100%"
embeddedId="b6f53731-1da2-4768-b545-fff4fd2659c6"/>
Компонент также можно инжектировать в контроллер и использовать программно:
@ViewComponent
private SupersetDashboard dashboard;
@Subscribe
public void onInit(final InitEvent event) {
dashboard.setEmbeddedId("1aec5c74-f143-4051-818b-fcf9d77c8501");
}
Ограничения наборов данных
Дэшборд в Superset может содержать несколько диаграмм, отображающих данные из различных наборов данных. Компонент SupersetDashboard обеспечивает возможность задавать ограничения для этих наборов данных. Ограничения могут быть определены статически в элементе XML компонента или вычислены динамически при работе приложения.
Для предоставления ограничения вам нужно указать ID набора данных и написать условие на native SQL, которое будет добавлено в выражение WHERE запроса набора данных.
В интерфейсе Superset не очевидно, где найти ID набора данных. Вы можете получить его из параметра datasource_id в URL, отображаемом в адресной строке при открытии набора данных из списка наборов данных.
|
Статичные ограничения
Рассмотрим использование статичных ограничений набора данных в дэшборде Employees' salaries, созданном в разделе Начало работы. Он использует набор данных, загружающий сотрудников, отделы и зарплаты. Предположим, что нужно ограничить нижнюю границу зарплаты, например, до 80 000.
Ограничения определяются в элементах datasetConstraint вложенных в элемент dashboard компонента. Они могут быть добавлены с помощью действия Add в Студии или вручную в XML.
Требуемое определение ограничения будет выглядеть следующим образом:
<superset:dashboard id="dashboard"
width="100%"
height="100%"
embeddedId="940f36ff-6c97-4a35-a4ff-4e4aeee3a9c7">
<superset:datasetConstraints>
<superset:datasetConstraint datasetId="24">
<![CDATA[salary >= 80000]]>
</superset:datasetConstraint>
</superset:datasetConstraints>
</superset:dashboard>
Здесь salary — столбец набора данных.
Провайдер ограничений
Ограничения набора данных могут быть рассчитаны динамически в работающем приложении и переданы в Superset при открытии дэшборда в приложении Jmix. Это позволяет фильтровать данные дэшборда в зависимости от прав доступа текущего пользователя или любых других критериев.
Ограничение набора данных определяется классом DatasetConstraint. Вы можете предоставить список ограничений компоненту SupersetDashboard следующими способами:
-
Создать обработчик
datasetConstraintsProviderв экране и вернуть список ограничений из него. -
Создать Spring-бин, реализующий интерфейс
DatasetConstraintsProvider, и передать его компоненту с помощью методаsetDatasetConstraintsProvider().
Рассмотрим следующее требование: менеджер отдела может видеть информацию о зарплатах только в своем отделе. Ограничение набора данных может учитывать роль уровня строк, назначенную текущему пользователю.
В примере ниже используется первый подход с обработчиком datasetConstraintsProvider в экране, но логика вынесена в обычный Spring-бин:
package com.company.supersetsample.app;
import com.company.supersetsample.entity.Department;
import com.company.supersetsample.entity.User;
import com.company.supersetsample.security.DepartmentConstraintRole;
import io.jmix.core.security.CurrentAuthentication;
import io.jmix.security.SecurityProperties;
import io.jmix.supersetflowui.component.dataconstraint.DatasetConstraint;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class DepartmentDatasetConstraintProvider {
private final CurrentAuthentication currentAuthentication;
private final SecurityProperties securityProperties;
public DepartmentDatasetConstraintProvider(CurrentAuthentication currentAuthentication,
SecurityProperties securityProperties) {
this.currentAuthentication = currentAuthentication;
this.securityProperties = securityProperties;
}
public List<DatasetConstraint> getConstraints() {
Department department = getDepartment();
if (hasDepartmentConstraintRole() && department != null) {
return List.of(new DatasetConstraint(24, "department_name = '" + department.getName() + "'"));
}
return List.of();
}
private boolean hasDepartmentConstraintRole() {
Authentication authentication = currentAuthentication.getAuthentication();
return authentication.getAuthorities().stream()
.anyMatch(grantedAuthority ->
grantedAuthority.getAuthority().equals(
securityProperties.getDefaultRowLevelRolePrefix() + DepartmentConstraintRole.CODE));
}
private Department getDepartment() {
User user = (User) currentAuthentication.getUser();
return user.getDepartment();
}
}
Бин используется в обработчике datasetConstraintsProvider экрана, который может быть сгенерирован из панели инспектора Jmix:
@Autowired
private DepartmentDatasetConstraintProvider departmentDatasetConstraintProvider;
@Install(to = "dashboard", subject = "datasetConstraintsProvider")
private List<DatasetConstraint> dashboardDatasetConstraintsProvider() {
return departmentDatasetConstraintProvider.getConstraints();
}
Атрибуты
Следующие атрибуты относятся к dashboard:
| Название | Описание | Значение по умолчанию | ||
|---|---|---|---|---|
Определяет видимость элементов управления диаграммами.
|
|
|||
Задает идентификатор встроенного дэшборда из Superset. См. Создание дэшборда. Идентификатор необходим для получения гостевого токена и загрузки дэшборда. При изменении идентификатора компонент перезагружает дэшборд; если идентификатор не задан, компонент отображает изображение-заглушку.
|
— |
|||
Определяет, развернута ли панель фильтров. |
|
|||
Определяет видимость панели заголовка.
|
|
Компонент поддерживает следующие общие атрибуты:
Обработчики
Следующий обработчик относится к dashboard:
|
Чтобы сгенерировать заглушку обработчика в Jmix Studio, используйте вкладку Handlers панели инспектора Jmix UI, или команду Generate Handler, доступную на верхней панели контроллера экрана и через меню Code → Generate (Alt+Insert / Cmd+N). |
| Название | Описание |
|---|---|
Динамически предоставляет ограничения наборов данных, когда дэшборд запрашивает гостевой токен. См. Провайдер ограничений. |
Компонент поддерживает следующие общие обработчики:
Элементы
dashboard может содержать элемент datasetConstraints с любым количеством элементов datasetConstraint. Для каждого datasetConstraint требуется атрибут datasetId, а его текстовое содержимое задает SQL-условие. См. Статичные ограничения.