Пробую реализовать фрагмент экрана, во фрагмент нужно опередать значение ссылки и вывести в таблицу значения, соответсвующие этой ссылке.
host screen:
....
<data>
<instance id="productsDc"
class="com.company.appjmix.entity.products.Products">
<fetchPlan extends="_base"/>
<loader/>
</instance>
</data>
....
<layout>
.....
<form id="form" dataContainer="productsDc">
<textField id="nameField" property="name" />
</from>
<fragment id="unitSpec_fragment" screen="UnitsSpecFragment">
<properties>
<property name="products" ref="productsDc"/>
</properties>
</fragment>
.....
</layout>
fragment screen:
<fragment xmlns="http://jmix.io/schema/ui/fragment">
<data>
<instance id="productsDc" class="com.company.appjmix.entity.products.Products"
provided="true">
<fetchPlan extends="_base"/>
</instance>
<collection id="unitsSpecDc" class="com.company.appjmix.entity.units.UnitsSpec" >
<fetchPlan extends="_base"/>
<loader id="unitsSpecDl">
<query>
<![CDATA[ select e from UnitsSpec e where e.ref_product = :refProd ]]>
</query>
</loader>
</collection>
</data>
<layout>
<textField id="nameProducts" caption="Товар"
dataContainer="productsDc" property="name"/>
<table id="table" width="100%" dataContainer="unitsSpecDc">
<columns>
<column id="code"/>
<column id="name"/>
<column id="koef"/>
<column id="active"/>
<column id="ref_units.name"/>
<column id="ref_product.name"/>
</columns>
</table>
</layout>
</fragment>
Код фрагмента:
@UiController("UnitsSpecFragment")
@UiDescriptor("units-spec-fragment.xml")
public class UnitsSpecFragment extends ScreenFragment {
private static final Logger log = LoggerFactory.getLogger(UnitsSpecFragment.class);
@Autowired
private InstanceContainer<Products> productsDc;
@Autowired
private CollectionLoader<UnitsSpec> unitsSpecDl;
public void setProducts(InstanceContainer<Products> products) {
log.info("setProducts in");
/* метод вызывается, но контейнер пуст productsDc, пуст
так же products.getItem() - тоже null
*/
log.info("id Products :{}",productsDc.getItem().getId().toString());
//unitsSpecDl.setParameter("refProd",productsDc.getItem().getId());
unitsSpecDl.load();
}
}
Вопрос: как правильно инициализировать коллекцию productsDc в фрагменте, исходя из переданного параметра из хост-экрана?
Пример в документации как-то не понятен…
В итоге, должно получиться как-то так: во вкладке фрагмент с единицами измерения:
Возможно, есть какой-то рецепт для решения подобных задач по встраиванию в интерфейс подчиненных таблиц.