Hi Team,
I am trying the new feature in record type, creating reusable interface for a record field.
https://docs.appian.com/suite/help/25.2/reference-records.html#reference-record-field-interfaces
i need to do duplicate validation for the fields, created by using re-usable interfaces for a record field.
Below is the interface definition of the created interface automatically by Appian, for the record field.
a!textField( label: 'recordType!{b1ecf478-0b29-4be8-a0f1-edc36a6d606a}SG IPL Match.fields.{4b2ebeae-9196-4a13-8d48-44abf5b765ae}username.properties.{displayName}displayName', labelPosition: "ABOVE", showWhen: fn!true(), value: ri!record['recordType!{b1ecf478-0b29-4be8-a0f1-edc36a6d606a}SG IPL Match.fields.{4b2ebeae-9196-4a13-8d48-44abf5b765ae}username'], saveInto: ri!record['recordType!{b1ecf478-0b29-4be8-a0f1-edc36a6d606a}SG IPL Match.fields.{4b2ebeae-9196-4a13-8d48-44abf5b765ae}username'], align: "LEFT" )
Now how to validate if username provided by user is not a duplicate one?
How to validate for multiple fields?
How to validate for related records for a specific country, for example, in states record, for state name field. i should check for duplicates for a particular country only.
Discussion posts and replies are publicly visible
Configure validation directly on the record field: Record Type -> Field -> Validations with a!queryRecordType() duplicate check expression.This automatically applies to all reusable interfaces via a!applyValidations() function without modifying individual interface codehttps://docs.appian.com/suite/help/25.3/fnc_system_a_applyValidations.htmlThis documentation will solve your all questions.https://docs.appian.com/suite/help/25.3/build-best-data-fabric.html#reusable-record-field-validations
To do the duplicate check, i have to query the record to get existing values. So Appian will have to query the record for each field.
Did you consider to add a form or section level validation?
You can also do this in field-level validation as mentioned above. Check the syntax below and replace it with your record type appropriately.
if( a!queryRecordType( recordType: cons!YOUR_RECORD_TYPE, filters: { a!queryFilter( field: 'recordType!YourRecordType.fields.username', operator: "=", value: rv!record['recordType!YourRecordType.fields.username'] ), a!queryFilter( field: 'recordType!YourRecordType.fields.id', operator: "<>", value: rv!record['recordType!YourRecordType.fields.id'] ) }, pagingInfo: a!pagingInfo(1, 1) ).totalCount > 0, "Username already exists", null )
interesting approach
Thanks Shubham Aware
I think this should help
even if i need to do for every field, this won't impact performance much right?
it will query for each field and each time user enters a value right?
It depends on how many number fields if you have.If you want to check for multiple fields recommend call in interface directly on load of interface and use that for all validations.
Appian is querying each time user interacts with the field, so for each field it will querying each time time user updates something, which is not performant way right?
If you are using in interface and want data to load only once on initialization, it is recommended to use refresh variables with appropriate parameters. This ensures the data is not refreshed again on user interaction, even if the variable is referenced elsewhere in the interface. However, if you use this logic inside record field validation, be aware that it may impact performance, since the expression will be evaluated for every field.