Редактирование дочерних записей, CUBA 7

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

Возникла следующая проблема при реализации довольно типовой задачи. Имеем форму редактирования некой сущности, а на форме таблица с дочерними записями. Необходимо дать возможность пользователю редактировать дочерние записи, но изменения должны попасть в БД только после сохранения основного документа. В CUBA версии 6 всё довольно просто реализовывалось и работало из коробки, а в 7-ой почему-то никак не выходит нормально реализовать.

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

Датасеты прописаны примерно следующим образом:

    <instance id="mainDc"
              class="my.class.MainDoc"
              view="maindoc-view-full">
        <loader/>
        <collection id="childDocsDc" property="childDocs" />
    </instance>

Таблица с дочерними записями так:

    <table id="childDocsTable" dataContainer="childDocsDc">
        <actions>
            <action id="create" type="create"/>
            <action id="edit" type="edit"/>
            <action id="remove" type="remove"/>
        </actions>
        <buttonsPanel alwaysVisible="true">
            <button id="childDocsTableCreateBtn" action="childDocsTable.create"/>
            <button id="childDocsTableEditBtn" action="childDocsTable.edit"/>
            <button id="childDocsTableRemoveBtn" action="childDocsTable.remove"/>
        </buttonsPanel>
        <columns>
            ...
        </columns>
    </table>

Для всех сущностей задано “мягкое” удаление.

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

Если вы никак не переопределяете действия в таблице, то тут все определяется типом связи: композиция (требуемое вами поведение) или ассоциация.

2 Симпатий

Действительно, я ошибся с типом связи. Спасибо!

Здравствуйте ещё раз!

Снова возникла аналогичная проблема, только задача на этот раз заключается в том, чтобы редактировать дочерние записи при связи many-to-many. Сама связь была создана в режиме конструктора в CUBA IntelliJ Plugin и полностью (я надеюсь) соответствует тому, что описано в документации “Direct Many-to-Many Association”: https://www.cuba-platform.com/guides/data-modelling-many-to-many-association

Однако, при удалении записи из дочерней таблицы на форме редактирования основной сущности, удаляется и сама дочерняя запись, даже до сохранения основной записи. Например, связь many-to-many мы делаем между таблицами A и B с помощью промежуточной таблицы AB. Имеем одну запись в таблице A, одну в B и одну связующую в AB. При открытии формы редактирования A мы видим в дочерней таблице одну запись B. В таблице на кнопки настроены действия “add” и “remove”. По нажатию на “remove” удаляется запись в таблице B, но связующая запись в AB остаётся нетронутой, хотя всё должно происходить ровно наоборот.

Пытался играться с ассоциациями/композициями, с on_delete_cascade и со всем прочим, но результата не добился. Могли бы Вы подсказать, в какую сторону копать?

Полагаю, что вам достаточно будет использовать стандартное действие exlude вместо remove.

2 Симпатий

Да, всё именно так, как Вы сказали. Спасибо ещё раз!