Hi All,
I'm less than two weeks of working with SAIL and I have a paging grid on my interface (which is working as I want to). Very happy about that, thanks mostly to the support I have received from this forum. However, I need to include a different Paging Grid using a different data source into the same interface. In the example code I used for the first Paging Grid (see SAIL code below), I defined the query for the grid data source in the with() function of the interface. What I am now trying to find out is if I can have a second query defined in my with() so I can use for my second grid, and where I might place it (getting errors that I cannot us multiple datasubsets). If not, how might I created a second Paging Grid and also define a query from a CDT as the data source for the second Paging Grid?
Thanks.
---
=load( local!pagingInfo: a!pagingInfo( startIndex: 1, batchSize: 20 ), with( local!datasubset: a!queryEntity( entity: cons!CSHV_LINE_ITEM_CDT, query: a!query( selection: a!querySelection(columns: { a!queryColumn(field: "itemName"), a!queryColumn(field: "amount"), a!queryColumn(field: "qty"), a!queryColumn(field: "total"), }), filter: a!queryFilter( field: "cashAdvnaceId.id", operator: "=", value: ri!CashAdvanceData.id ), pagingInfo: local!pagingInfo ) ), ...
...
Discussion posts and replies are publicly visible
I would recommend having your queries in load() local variables rather than inside with(). When a component inside the with() is interacted with, all of the variables are recalculated, so both of your queries would be re-queried anytime you sort or page. Here is another way to structure your SAIL code to be better performant. load( local!firstQuery, local!secondQuery, local!firstpagingInfo, local!secondPagingInfo, with( local!firstDataSubset: todatasubset(local!firstQuery, local!firstPagingInfo), local!secondDataSubset: todatasubset(local!secondQuery, local!SecondPagingInfo), { /*First Paging Grid*/ a!gridField() /*Second Paging Grid*/ a!gridField()
} ) )
If you want to be more careful about performance, you can page the queries themselves instead of moving paging into the with() block. Something like the following:
=load( local!firstPagingInfo, local!secondPagingInfo, local!firstQuery: rule!query(pagingInfo: local!firstPagingInfo), local!secondQuery: rule!query(pagingInfo: local!secondPagingInfo), { /* first grid */ a!gridField( value: local!firstPagingInfo, saveInto: { local!firstPagingInfo, a!save( local!firstQuery, rule!query(pagingInfo: local!firstPagingInfo) ) } ), /* second grid */ a!gridField( value: local!secondPagingInfo, saveInto: { local!secondPagingInfo, a!save( local!secondQuery, rule!query(pagingInfo: local!secondPagingInfo) ) } ) } )