Hello Everyone,
I am using below pagingInfo , gridcolumn , and pagingSaveInto in my interface where Approval Date is of datetime type
local!pagingInfo: a!pagingInfo(
startIndex:1,
batchSize: -1,
sort: a!sortInfo(field: "APPORVAL_DATE")
gridColumn(
label: "Approved On",
sortField: "APPORVAL_DATE",
value: fv!row.APPORVAL_DATE
)
pagingSaveInto: local!pagingInfo
If approval date is between 7/1/2021 and 7/12/2021 then
Expected result to be sorted by Date ie. 7/12, 7/11, 7/10, 7/9, 7/8, 7/7 and so on but sorting is not applied to the grid and resulting data is random sequence like 7/11 7/12 7/1 7/2 and so on.
Thank you for suggestions in advance.
Discussion posts and replies are publicly visible
Hi Priyanka Agarwal,
Do you expect the data to be sorted on the interface load? If yes, then you might need to specify the initialSorts parameter of the read-only grid.
The sample code is below:
a!localVariables( local!data: a!forEach( items: enumerate(5) + 1, expression: { id: fv!item, APPORVAL_DATE: now() - fv!item } ), local!pagingInfo: a!pagingInfo( startIndex: 1, batchSize: - 1, sort: a!sortInfo(field: "APPORVAL_DATE") ), { a!gridField( label: "Read-only Grid", labelPosition: "ABOVE", data: local!data, columns: { a!gridColumn( label: "Date", sortField: "APPORVAL_DATE", value: fv!row.APPORVAL_DATE ) }, initialSorts: a!sortInfo(field: "APPORVAL_DATE", ascending: true()), validations: {}, pagingSaveInto: local!pagingInfo ) } )
Hi Selvakumar,
I have tried to give initialSorts for sorting on interface load ans also given secondarySorts to keep sorting with user interaction. But resultant grid data is not sorted as expected.
What is your grid source? Whether it's a record type (or) data retrieved from other rules? Because in the example that I provided, it was working fine. Could you please let me know if I'm missing something?
I am doing an API call which is resulting in list of dictionary and saving this list into a local variable.
Then I suspect the issue is in the datatype of that specific value. For example, in my sample code, I've just cast the DateTime value to a string. As a result, the sorting is not as expected.
a!localVariables( local!data: a!forEach( items: enumerate(5) + 1, expression: { id: fv!item, APPORVAL_DATE: tostring(now() - fv!item) } ), local!pagingInfo: a!pagingInfo( startIndex: 1, batchSize: - 1, sort: a!sortInfo(field: "APPORVAL_DATE") ), { a!gridField( label: "Read-only Grid", labelPosition: "ABOVE", data: local!data, columns: { a!gridColumn( label: "Date", sortField: "APPORVAL_DATE", value: fv!row.APPORVAL_DATE ) }, initialSorts: a!sortInfo(field: "APPORVAL_DATE", ascending: true()), validations: {}, pagingSaveInto: local!pagingInfo ) } )
Can you try casting the API result to a proper datatype?
Sorting in Appian is not done inside Appian, but in the underlying data source. When talking to a SQL DB, this is pretty clear. But when talking to an API, then sorting should be done inside the API. Fetching all data and then sort in Appian is a bad idea.
I totally agree with you, Stefan. Filtering, Sorting & Paging should mostly go with the API end & in cases where it's not possible, we should make use of the Appian record sync approach for improved performance.
Thank you Selvakumar Kumarasamy.
Casting the API result before sorting worked for me.
You are aware that fetching ALL data into Appian will become a serious issue as your data volume increases?
Thank you for this helpful suggestion
It is an POC which I am currently working on. I will be doing filtering and sorting at API end when I will get into dev.