Сохранение в БД фрагмента

Здравствуйте! Помогите разобраться.
Есть Entity(основная) одним из атрибутов которой является другая Entity(“вложенная”).
Основная создаётся, редактируется с сохраняется через ScreenEdit. В этот же Screen встроен ScreenFragment “вложенной” Entity. Как реализовать сохранение “вложенной” Entity в БД через Screen основной Entity.

Судя по документации. DataContext фрагмента и экрана ScreenEdit должен быть одним и тем-же и соответственно при сохранении в основоном экране, во фрагменте сущности тоже должны сохраняться. У вас что-то не работает? Мб во фрагменте у сущности нужно добавить provided="true"

Здравствуйте! Да, судя по документации все данные из фрагмента должны сохраняться в БД автоматически при нажатии на кнопку сохранения основного экрана. provided=“true” данная настройка у меня была прописана только в фрагменте, сейчас добавил её в дескриптор экрана и теперь возникает ошибка
Снимок

этот атрибут я добавляю в инстанс
Снимок1

Так в основной экран эту настройку добавлять не нужно…
Эта настройка означает что вы из основного экрана представляете сущность фрагменту. У вас во фрагменте вообще сущность проставляется? Что там с <data>?

Если это data основного экрана. То какую сущность вы передаете фрагменту?

Если есть возможность то скиньте проект или напишите тестовый.

Снимок6
Снимок1
Первые 2 скриншота это ФРАГМЕНТ, дальше идёт Entity в которую включен фрагмент
Снимок2
Снимок3
Снимок4
Снимок7

Проблема именно в том что при сохранении ApplicationUser( основной entity), в БД не сохраняется экземпляр AppTest( эта entity является атрибутом у основной ApplicationUser)

Идея в том что User может создавать документ(заявку., с атрибутами User и дата создания) так же в этом документе можно выбирать разные “наборы вложенных полей”(определенные как самостоятельная Entity), фрагменты судя по описанию Jmix подходят идеально для решения этой задачи. Видимо я что-то упускаю, раз на экран фрагмента открывается и редактируются поля но эти изменения не сохраняются в БД

Как я вижу в основном экране загрузчик appTestDl связан с сущностью ApplicationUser, а у AppTest загрузчик без id. Во фрагменте вы пишите что appTestDl связан с сущностью AppTest. Не состыковка получается.

Мне кажется в основном экране нужно использовать InstancePropertyContainer, а во фрагменте убрать упоминание загрузчика.
То есть что-то типа:
В основном экране

<instance id="applicationUserDc" class="...ApplicationUser">
    <instance id="appTestDc" class="...AppTest" property="<Как переменная в классе названа>"/>
    <loader id="applicationUserDl"/>
     ...
</instance>

И во фрагменте без загрузчика
<instance id="appTestDc" class="...AppTest" provided="true"/>

Вот простой пример в котором у меня все работает(Изменения во фрагменте сохраняются).

    <data>
        <instance id="testEntity1Dc"
                  class="com.company.jmix.test.entity.TestEntity1">
            <instance id="testEntity2Dc" property="testEntity2"/>
            <fetchPlan extends="_base">
                <property name="testEntity2" fetchPlan="_base"/>
            </fetchPlan>
            <loader/>
        </instance>
    </data>
    ....
    <layout spacing="true" expand="editActions">
        <form id="form" dataContainer="testEntity1Dc">
            <column width="350px">
                <textField id="nameField" property="name"/>
                <entityPicker id="testEntity2Field" property="testEntity2">
                    <actions>
                        <action id="entityLookup" type="entity_lookup"/>
                        <action id="entityClear" type="entity_clear"/>
                    </actions>
                </entityPicker>
            </column>
        </form>
        <fragment id="testEntity2Fragment" screen="jt_TestEntity2Fragment"/>
        <hbox id="editActions" spacing="true">
            <button id="commitAndCloseBtn" action="windowCommitAndClose"/>
            <button id="closeBtn" action="windowClose"/>
        </hbox>
    </layout>
<fragment xmlns="http://jmix.io/schema/ui/fragment">
    <data>
        <instance id="testEntity2Dc"
                  class="com.company.jmix.test.entity.TestEntity2" provided="true">
            <fetchPlan extends="_base"/>
        </instance>
    </data>
    <layout>
        <form id="form" dataContainer="testEntity2Dc">
            <column width="350px">
                <textField id="nameField" property="name"/>
                <entityPicker id="testEntity3Field" property="testEntity3">
                    <actions>
                        <action id="entityLookup" type="entity_lookup"/>
                        <action id="entityClear" type="entity_clear"/>
                    </actions>
                </entityPicker>
            </column>
        </form>
    </layout>
</fragment>
2 симпатии

Спасибо) сейчас основные моменты у себя проверю и дам ответ

Подскажите, у вас в БД в отдельную таблицу сохраняется testEntity2(Создаваемая и редактируемая как фрагмент основного экрана testEntity1 , UUID (например) которой хранится в таблице testEntity1?

Да. testEntity2 в отдельной таблице

image

1 симпатия

Здравствуйте
Подскажите пожалуйста по вашему примеру в контроллере экрана как вы указываете наличие фрагмента?
Возможно у меня не сохраняется из-за использования GrooupBoxLayout

Так я просто в дескрипторе главного экрана указал

Сам класс экрана я никак не редактировал.

Здравствуйте, возможно подскажите:

  1. Как сделать что бы фрагмент располагался сразу после полей включающего(основного) экрана.
    2.Как сделать что бы текстовое поле автоматически увеличивалось в размере с заполнением его текстом, и заполнялось с переносами.
    Снимок1
  1. может быть в vbox все поместить?
  2. в какую сторону увеличивалось? И кто будет переносы вставлять программа или пользователь?

Переносы автоматические, при достижении определенного (установленного размера)

1 -я задача решилась помещением всего в vbox, спасибо

Может у Jmix есть решение для такой задачи как исчезающее текстового поля, т.e. на экране отображается слово например: Протокол, и если пользователь кликнет по нему то откроется текстовое.
Протокол 1
протокол 2

Может у Jmix есть решение для такой задачи как исчезающее текстового поля…

Есть GroupBoxLayout:

1 симпатия

Текст с переносами можно вводить в texArea, а вот автоувеличение и переносы, наверное самому в коде писать.

Окей, спасибо)