After a short experiment this AM, I see even more that at least a “bootstrap” migration from Classic → Flow should be provided and would not be terrible to implement. For example, here is a dead-simple CRUD type screen, the type that there are dozens of in most large applications. (Descriptor only).
CLASSIC:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<window xmlns="http://jmix.io/schema/ui/window" xmlns:dynattr="http://jmix.io/schema/dynattr/ui"
caption="msg://editorCaption"
focusComponent="form"
>
<data>
<instance id="physicianTypeDc"
class="com.medflex.medflexj.entity.physician.PhysicianType"
fetchPlan="_local">
<loader/>
</instance>
</data>
<dialogMode height="600"
width="800"/>
<layout expand="editActions" spacing="true">
<form id="form" dataContainer="physicianTypeDc">
<column width="250px">
<textField id="nameField" property="name"/>
<checkBox id="isPrescribingField" caption="msg://isPrescribingField.caption"
dataContainer="physicianTypeDc" property="isPrescribing"/>
</column>
</form>
<hbox id="editActions" spacing="true">
<button action="windowCommitAndClose"/>
<button action="windowClose"/>
</hbox>
</layout>
<facets>
<dataLoadCoordinator auto="true"/>
<dynattr:dynamicAttributes/>
</facets>
</window>
FLOW:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<view xmlns="http://jmix.io/schema/flowui/view"
title="msg://physicianTypeDetailView.title"
focusComponent="form">
<data>
<instance id="physicianTypeDc"
class="com.medflex.mfflow.entity.physician.PhysicianType">
<fetchPlan extends="_base"/>
<loader/>
</instance>
</data>
<facets>
<dataLoadCoordinator auto="true"/>
</facets>
<actions>
<action id="saveAction" type="detail_saveClose"/>
<action id="closeAction" type="detail_close"/>
</actions>
<layout>
<formLayout id="form" dataContainer="physicianTypeDc">
<textField id="nameField" property="name"/>
<textField id="legacyCodeField" property="legacyCode"/>
<checkbox id="isPrescribingField" property="isPrescribing"/>
</formLayout>
<hbox id="detailActions">
<button id="saveAndCloseBtn" action="saveAction"/>
<button id="closeBtn" action="closeAction"/>
</hbox>
</layout>
</view>
This isn’t much more than a search-and-replace type of affair, with some reordering of the elements.
A more complex screen isn’t much different. There are some differences such as dateField
becoming datePicker
and certain attributes being renamed such as optionsContainer
becoming itemsContainer
and caption
becoming label
and so on.
This is not difficult and would enable much more easy transition from Classic → Flow for users with large applications.