Dashboard parameters

Доброго дня.
К сожалению в документации не описано как использовать параметры дэшборда, поэтому предполагаю, что каким-то образом можно передать общий параметр дэшборда в параметры виджета. Как это должно работать?
Есть ли API для изменения параметров дашборда

Здравствуйте,

Общие параметры дашборда автоматически передаются во фрейм виджета и могут быть получены с помощью аннотации @WindowParam, параметры виджетов могут переопределять параметры дашборда. При использовании дашборда как компонента экрана через XML дескриптор можно переопределить параметры через вложенный тэг в XML (пример в документации).

1 симпатия

Спасибо, Евгений.
Тогда видимо, не предусмотрена такая передача параметра, если в качестве виджета используется отчет. Параметр в него не передается.

Если вы имеете ввиду чарт виджет, то в данный момент туда пробрасываются только параметры виджета

1 симпатия

Да, он самый.
Можно добавить такую возможность? Завести issue на гитхаб?

Евгений, есть мысль сделать на форме входные параметры, которые использовать, как некий фильтр данных для виджетов. Можете поделиться примером программной установки параметров для дашборда (желательно с типом ENTITY). У меня это вызвало трудности, поскольку параметры являются персистентными сущностями и вносить в них изменения при изменении фильтра как-то неправильно.

Опишите пожалуйста пример, в каком случае вам нужно будет программно менять параметры виджета?

  1. На экран добавляю LookupField, кнопку и Dashboard.
  2. Выбираю в поле, предположим, страну.
  3. Жму кнопку, изменяю(?) параметр Dashboard на значение выбранное в LookupField, обновляю Dashboard.

Ожидаемый результат: могу посмотреть виджеты в разрезе стран.

Как вариант, можно передавать новые параметры перед обновлением через метод setXmlParameters(List<Parameter> parameters);.

Передачу параметров из дашборда в виджеты мы поправим в следующем обновлении (тикет на гитхаб)

Обновление дашборда с параметрами сделаем в одном из следующих обновлений (тикет на гитхаб)

1 симпатия

Их не обязательно комитить, правильно я понимаю?

Это не персистентные сущности, из комитить не нужно

1 симпатия

Евгений, попробовал. Получился следующий сэмпл:

    public void setCountryParam() {
        Country country = countryField.getValue();
        if (country == null)
            country = dataManager.load(Country.class).id(UUID.fromString("9ed1076e-7712-bfb7-659e-ff952b07580c")).one();
        final Parameter parameter = metadata.create(Parameter.class);
        parameter.setAlias("countriesParam");
        parameter.setName("Countries");
        final EntityParameterValue parameterValue = new EntityParameterValue("wedb$Country", country.getId().toString(), View.MINIMAL);
        final ListEntitiesParameterValue listEntitiesParameterValue = new ListEntitiesParameterValue(Collections.singletonList(parameterValue));
        parameter.setParameterValue(listEntitiesParameterValue);
        mainDash.setXmlParameters(Collections.singletonList(parameter));

        mainDash.refresh();
    }

Так вот при вызове в первый раз в виджет нормально прилетает параметр экрана. При последующих вызовах прилетает по-прежнему первый.

@WidgetParam
@WindowParam
public List<Country> countriesParam;

Может подскажите где ошибся?

Какую версию аддона и платформы вы используете в своем проекте?

Платформа - 7.0.5.
Аддон - 3.0-SNAPSHOT

Я попробую воспроизвести это поведение локально у себя и отпишусь по результату.

1 симпатия

Михаил, мне удалось воспроизвести эту проблему и она будет поправлена в следующей сборке (github.com/cuba-platform/dashboard-addon/issues/15)

На мой взгляд в вашем примере если нужно обновитть несколько виджетов вместо всего дашборда, лучше создать свой класс UI события (https://doc.cuba-platform.com/manual-7.0/events.html), которое будет отправляться по кнопке и будет перехватываться вашим виджетом и обновлять только один виджет.

Евгений, добрый день.
К сожалению в вашем посте сломаны ссылки.

А мне именно весь дашбоард и нужно обновить, передав параметры фильтра в каждый из виджетов. Я что-то делаю не так принципиально?

Евгений, можно попросить изменить поведение этих параметров. Сейчас параметры установленные в свойствах дешборда в приоритете. Хочется, чтобы параметры, установленные с помощью этого метода переопределяли те, которые определены декларативно для дешборда.

Здравствуйте @sergeevms,

Мы это поправили в тикете https://github.com/cuba-platform/dashboard-addon/issues/17.
В следующей сборке все должно работать.

1 симпатия

Евгений, добрый день.
Сейчас получается, что виджеты дашборда у меня обновляются дважды: первый раз при его инициализации, второй - когда передаю в него параметры (в onBeforeShow родительского экрана). Можно ли отключить первое “автоматическое” обновление?

Здравствуйте @sergeevms,

Вы можете попробовать проставить нужные параметры в дашборд в onInit(InitEvent event) методе родительского экрана через setXmlParameters(List<Parameter> parameters) метод. Затем дашборд будет автоматически загружен один раз с переданными парметрами.