Как прокидывать значения в XML дескриптор экрана?

Добрый день.

На скриншоте выделены два параметра, значения которых хотелось бы задавать где то за пределами XML.
image

  1. Есть желание исключать из фильтров все поля вроде createdBy… На данный момент данная строка копируется по всем фильтрам. Как её определить один раз в константе и переиспользовать?

  2. Это вопрос для понимания возможностей и философии JMIX.
    К примеру, я хочу завести кнопку Скрыть/Показать по нажатию на которую я хочу скрывать/показывать таблицу.
    Могу ли я в контроллере завести булево поле, ответственное за отображение таблицы
    image.
    В XML дескрипторе каким либо способом привязать visible=" << tableIsVisible >> (значение из контроллера)"
    Далее по нажатию на кнопку менять значение поля tableIsVisible true/false и ожидать, что это повлияет на видимость таблицы?
    Здесь я провожу аналогию с UI фрэймворками вроде Angular и VueJS.

Или здесь единственно правильный путь: инжектирование таблицы в контроллер и явное задание свойства vidible при нажатии кнопки?

  1. Мы в проектах обычно заводим абстрактный базовый экран (И базовую сущность по аналогии StandardEntity из cuba) который наследуются от StandardLookup, так большинство экранов выглядят одинаково. И все наши экраны в проектах уже наследуются от этого базового экрана. Вы можете сделать так же. Создать базовый экран
    BaseLookup<T> extends StandardLookup<T>
    и добавить дескриптор base-browser-screen.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<window xmlns="http://jmix.io/schema/ui/window"
        focusComponent="table">
    <data readOnly="true">
        <collection id="tableDc">
            <loader id="tableDl"/>
        </collection>
    </data>
    <layout expand="table" spacing="true">
        <filter id="filter" dataLoader="tableDl">
            <properties include=".*" exclude="..."/>
        </filter>
      ...

И во всех своих дескрипторах прописывать
extends="<path>/base-browser-screen.xml"
Таким образом во всех экранах будет сохраняться одна логика.

Еще как вариант. у фильтра есть метод addPropertiesFilterPredicate. Туда можно передать FilterPropertiesInspector в который передается excludeProperties пример в FilterLoader#loadProperties

  1. Здесь только инжектирование таблицы в контроллер.
1 симпатия

Спасибо. А имея такой базовый экран, как Вы указываете специфичные для конечного экрана данные? (запрос query, список колонов таблице? )
image

В конечном экране прописываю компоненты с теми же id и вписываю в них нужные параметры.
К примеру query
В базовом экране все так-же как и в сообщении что я написал выше
в Конечном экране:

    <data>
        <collection id="tableDc">
            <loader id="tableDl">
                <query><your query></query>
             </loader>
        </collection>
    </data>

Подробнее в документации

1 симпатия

Огромное спасибо!