We know that we can create a datasource in screen XML only from one Entity. What would be the best approach of displaying data in a table when it is coming from several Entities (many tables of a database)?
–Is there any way to create a temporary table programmatically and use it to populate so that it can be used in defining datasource or
–Should I use an Entity and populate with data from different Entities using EntityManager?
–or anything else?
1 Like
The recommended approach is using non-persistent entities.
- Create an entity and set “Not persistent” in the “Entity type” field.
- In controller, load persistent entities somehow (through DataManager or from your custom services), instantiate your non-persistent entities and populate their attributes.
- Create a collectionDatasource for the non-persistent entity, set “Do not refresh” and clear “Allow commit” checkboxes for it.
- Add non-persistent entities to this datasource by invoking addItem() or includeItem().
If the entities are linked in your data model (for example, Order has a reference to Customer), you can display any attribute of Customer in the Orders table by specifying a path to it in the column name:
<table id="ordersTable">
<columns>
<column id="date"/>
<column id="num"/>
<column id="customer.name"/>
<column id="customer.email"/>
</columns>
But keep in mind that you cannot make such columns editable - changes will not be saved.
Thanks.
Yes , second option is also useful in cases.