Reusable interface in record field, duplicate validation check

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

Parents
  • 0
    Certified Lead Developer

    In the Record->Data Model you can configure common validations for a field. Refer related Document here and here  which uses a!applyValidation for reusable validations for reusable interfaces for record field. Generally for checks like '@' in email or phone number formatting this validation configuration will be helpful. 

    For Duplication check in your usecase I suggest you to create validation logic and configure them in the reusable interface for each field. You can use 'additionalValidations '  attribute of the a!applyValidation() to check duplicates and show validation as configuring/testing them in the Data Model field's Validation can be tricky. Below is an example where date validation is added on the reusable interface for the endDate field. Similarly you can check for duplicate using an expression and show user's validation message. Hope it helps!

     

    a!applyValidations(
     recordField: recordType!Case.field.endDate,
     context: ri!record,
     additionalValidations: {
        if(
         ri!record[recordType!Case.fields.endDate] > today(),
         "",
         "Enter Valid Date"
        )
        }
    )
    


  • 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.

  • 0
    Certified Lead Developer
    in reply to vamsiKrishna

    Yes within the textField->Validations of the field's interface you can query the record type. Pass the value in the queryfilter to checks of duplicates instead of gettting all existing values from record. 

    So Appian will have to query the record for each field.

    Even when we dont use reusable interface, the validations need to have queryRecord for each field which you need to check, so its similar! Appian will query the record by passing in the value of the field and check if duplicate exists - This remains the same with or without reusable interface. 

  • Thanks, 

    Yeah i can check for specific user entered value, that should help.

    but if we don't use reusable interface, we can query once for all in a normal UI, and use that data to check duplicates right?

  • +1
    Certified Lead Developer
    in reply to vamsiKrishna

    As per standard practice, whenever you need to check for duplicate its best to query the data source by passing the value to check duplicates of in the filter instead of querying all data and then checking. If your dataset is very small then querying all then comparing can be fine but with large datasets you should query by passing paging batch size as 1 and filter by the value you want to check duplicate for. Paging batch size 1 ensures query will return just one row for the data value if duplicate is present else it will return null. Using this validation can be configured. 

    Otherwise the query of entire dataset and logic to check for duplicate can slow down your interface, 

Reply
  • +1
    Certified Lead Developer
    in reply to vamsiKrishna

    As per standard practice, whenever you need to check for duplicate its best to query the data source by passing the value to check duplicates of in the filter instead of querying all data and then checking. If your dataset is very small then querying all then comparing can be fine but with large datasets you should query by passing paging batch size as 1 and filter by the value you want to check duplicate for. Paging batch size 1 ensures query will return just one row for the data value if duplicate is present else it will return null. Using this validation can be configured. 

    Otherwise the query of entire dataset and logic to check for duplicate can slow down your interface, 

Children