Псевдонимы для источников данных вложенных фреймов.

Часто в ходе разработки появляются различные фреймы, отвечающие за какой-либо конкретный функционал. Для использования в них источников данных необходимо соблюдать соглашение о используемых наименованиях источников в экранах, использующих их. Это затрудняет разработку приложения и гибкость кода. Так же не возможно разрешить конфликтные ситуации при определении xml:

  • Конфликт используемых источников данных: предположим, у нас имеются 2 фрейма ("frame1" и "frame2") использующих в качестве основного источник с наименованием "cardDs". Таки образом невозможно построить экран, использующих оба этих фрейма, но привязанных к разным источникам данных (к примеру к источнику "parentCardDs")
  • Двукратное использование одного и того же фрейма по разным источникам на одном экране. По сути является разновидностью предыдущей ситуации с той лишь разницей, что экран один и тот же.

Предлагаемое решение: псевдонимы источников данных для источников данных. Пример возможного использования:

<window xmlns="http://schemas.haulmont.com/cuba/5.4/window.xsd"
        class="org.example.proj.gui.common.card.CompareFrame"
        messagesPack="org.example.proj.gui.common.card">

    <dsContext>
        <datasource id="cardDs" class="com.haulmont.workflow.core.entity.Card">
            <datasource id="parentCardDs" property="parentCard"/>
        </datasource>
    </dsContext>

    <layout>
        <hbox>
            <iframe id="cardDsFeatureFrame" screen="featureScreen" width="100%"/>
            <iframe id="parentCardDsFeatureFrame" screen="featureScreen" width="100%">
                <dsAlias ds="parentCardDs" alias="cardDs"/>
            </iframe>
        </hbox>
    </layout>
</window>


Да, действительно при использовании из XML нельзя сделать параметризуемые части экранов. Для таких фреймов вы можете завести метод в контроллере фрейма, который будет принимать экземпляр необходимого источника данных, и вызывать его из метода init() основного экрана, передавая нужный источник как параметр.
Мы подумаем о псевдонимах для источников данных, возможно поддержим этот функционал в следующих версиях.