Hello,
when a record type has a (1,n) relation, Appian supports some aggration for those related records ( 'Create Custom Record Field' --> 'AGGREGATE RELATED RECORD FIELDS').
The avaible aggregation functions seem to be dependend on the data type of the 'AGGREGATE RELATED RECORD FIELDS' - in any case, I'm looking for something like FIRST_OF (LAST_OF) so that I can get the first record field(s) of related data records (which are string based).
Maybe a small example: (Author) <-- (Books) (an author can have many books)
Should be presented in a list
What would be a good way to achieve this?
Thank you in advance
Thomas
Discussion posts and replies are publicly visible
It's not possible to use the a!relatedRecordData() function in a custom record field, but I still think you can likely get what you need. Can you share more information about your use case? If you just need to display this in a grid, you shouldn't need a custom record field. Instead, just add a!relatedRecordData() to your grid data and configure it to only return one itme.
For instance, something like the example here would work, do to the same thing in a grid instead: docs.appian.com/.../fnc_system_relatedrecorddata.html
Thank you for the clarification, when building the expression within the query editor it is just fine. As of now, I cannot get to show the result data (from an expression rule based on a query operating on a record type) in a read-only grid.
I've built one the appian example (Acme Vehicle).
Expression Rule (not yet figured out how to share code)
When pasting this into a read-only grid:
Could not display interface. Please check definition and inputs. Interface Definition: Expression evaluation error at function a!gridField [line 8]: A grid component [label="Read-only Grid"] has an invalid value for "columns". A grid column [label="Vehicleid"] has encountered an error. Expression evaluation error: Vehicle can only be indexed into using square brackets or the index function
Probably this is another issue though - thank you.
It seems like you try to reference some field using dot-notation in your grid. Change that to the square brackets notation used for record data.
I did nothing special, I've just selected the rule from within of that grid the GUI as data source.
a!gridField( label: "Read-only Grid", labelPosition: "ABOVE", data: rule!AA_TestRelatedRecordAggregation(), columns: { a!gridColumn( label: "Vehicleid", sortField: "vehicleid", value: fv!row.vehicleid ), a!gridColumn( label: "Maintenance", sortField: "maintenance", value: fv!row.maintenance ) }, selectable: false, validations: {} )
Well, figured: I'm required to change this manually - I did this and now its working.
Thank you.
Actually what I would recommend is not using an expression rule at all - the query is an example for how the data is returned, but you can directly call the record type as the source of your grid instead (which I think will be easier to configure and change as necessary).
To do this, you can use a!recordData() as the "data" parameter and add your usage of a!relatedRecordData() inside of that function.
Here's more information about this from the grid documentation.
Until now, I was under the impression that assigning data records to a rule expression enhances reusability. I've also found the option on the help page (grid documentation).
Thank you for sharing this best practice - appreciate it.
In general I actually suggest using the grid over using a reusable expression rule because the grid can be more efficient (since it only queries fields that are used in the columns of your grid) and it is easier to configure