Здравствуйте! Помогите разобраться.
Есть Entity(основная) одним из атрибутов которой является другая Entity(“вложенная”).
Основная создаётся, редактируется с сохраняется через ScreenEdit. В этот же Screen встроен ScreenFragment “вложенной” Entity. Как реализовать сохранение “вложенной” Entity в БД через Screen основной Entity.
Судя по документации. DataContext фрагмента и экрана ScreenEdit
должен быть одним и тем-же и соответственно при сохранении в основоном экране, во фрагменте сущности тоже должны сохраняться. У вас что-то не работает? Мб во фрагменте у сущности нужно добавить provided="true"
Здравствуйте! Да, судя по документации все данные из фрагмента должны сохраняться в БД автоматически при нажатии на кнопку сохранения основного экрана. provided=“true” данная настройка у меня была прописана только в фрагменте, сейчас добавил её в дескриптор экрана и теперь возникает ошибка
этот атрибут я добавляю в инстанс
Так в основной экран эту настройку добавлять не нужно…
Эта настройка означает что вы из основного экрана представляете сущность фрагменту. У вас во фрагменте вообще сущность проставляется? Что там с <data>
?
Если это data
основного экрана. То какую сущность вы передаете фрагменту?
Если есть возможность то скиньте проект или напишите тестовый.
Первые 2 скриншота это ФРАГМЕНТ, дальше идёт Entity в которую включен фрагмент
Проблема именно в том что при сохранении 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>
Спасибо) сейчас основные моменты у себя проверю и дам ответ
Подскажите, у вас в БД в отдельную таблицу сохраняется testEntity2(Создаваемая и редактируемая как фрагмент основного экрана testEntity1 , UUID (например) которой хранится в таблице testEntity1?
Да. testEntity2
в отдельной таблице
Здравствуйте
Подскажите пожалуйста по вашему примеру в контроллере экрана как вы указываете наличие фрагмента?
Возможно у меня не сохраняется из-за использования GrooupBoxLayout
Так я просто в дескрипторе главного экрана указал
Сам класс экрана я никак не редактировал.
Здравствуйте, возможно подскажите:
- Как сделать что бы фрагмент располагался сразу после полей включающего(основного) экрана.
2.Как сделать что бы текстовое поле автоматически увеличивалось в размере с заполнением его текстом, и заполнялось с переносами.
- может быть в vbox все поместить?
- в какую сторону увеличивалось? И кто будет переносы вставлять программа или пользователь?
Переносы автоматические, при достижении определенного (установленного размера)
1 -я задача решилась помещением всего в vbox, спасибо
Может у Jmix есть решение для такой задачи как исчезающее текстового поля, т.e. на экране отображается слово например: Протокол, и если пользователь кликнет по нему то откроется текстовое.
Может у Jmix есть решение для такой задачи как исчезающее текстового поля…
Есть GroupBoxLayout
:
Текст с переносами можно вводить в texArea, а вот автоувеличение и переносы, наверное самому в коде писать.
Окей, спасибо)