How to restrict the end user to enter the duplicate emails or mobile?

Certified Associate Developer

Hi all,

I am working on a project, I want to restrict the end user to enter the duplicate email ids or mobile numbers. I mean, end user cannot enter the email or mobile number if it's already exist in the Database.

It should show an error message if user entered existed email id on the interface.

Solutions would be highly appreciated.

Thank you in advance!

  Discussion posts and replies are publicly visible

Parents
  • Do you want to see if this user has already entered the same phone number / email or any user? If it's only for this user, it's probably easiest to query on loading the form to return all of this user's existing emails / phone numbers. Then, you could do a comparison in a validation to check if the user has already entered this value or not.

    If you're looking to see if this phone number / email is unique across all of your data, you should likely query after the user has entered the data to check and see if there are any rows in the database with that exact email / phone number.

  • 0
    Certified Associate Developer
    in reply to Peter Lewis

    Hi, thanks for replying.

    Yes! I am looking for the second, which means, email or mobile number that must be unique across the application. How can apply it to the interface... at the time of entering... it should show an error message. 

Reply Children
  • Every input field has a "validations" attribute. You can invoke a rule here, and in that rule you can use the value entered by the user to search the existing values in your database table. If you find a corresponding value you can return an appropriate message, else return null. 

  • Here's an example of how you could set it up for a phone number:

    a!localVariables(
      local!phoneNumber,
      
      /* Determines how many existing records */
      /* have the same phone number */
      local!phoneNumberMatching: if(
        a!isNullOrEmpty(local!phoneNumber),
        0,
        
        /* Run a query with a filter by phone number. */
        /* This could also use a!queryEntity() */
        a!queryRecordType(
          recordType: recordType!Employee
          fields: {
            recordType!Employee.fields.name,
            recordType!Employee.fields.phoneNumber
          },
          pagingInfo: a!pagingInfo(
            startIndex: 1,
            batchSize: 1
          ),
          filters: a!queryFilter(
            field: recordType!Employee.fields.phoneNumber
            operator: "=",
            value: local!phoneNumber
          )
        ).totalCount
      ),
      
      /* Checks that the there are no matches */
      local!phoneNumberIsValid: and(
        a!isNotNullOrEmpty(local!phoneNumber),
        local!phoneNumberMatching = 0
      ),
      a!formLayout(
        label: "Form",
        contents: {
          a!textField(
            label: "Text",
            labelPosition: "ABOVE",
            saveInto: local!phoneNumber,
            value: local!phoneNumber,
            refreshAfter: "UNFOCUS",
            validations: {
              if(
              local!phoneNumberIsValid,
                null,
                "This phone number has already been taken, please enter a different phone number"
              ),
            }
          )
        },
        buttons: a!buttonLayout(
          primaryButtons: {
            a!buttonWidget(
              label: "Submit",
              submit: true,
              style: "PRIMARY",
              loadingIndicator: true,
            )
          },
        )
      )
    )

    Keep in mind that validations for phone numbers can get fairly tricky - often different users will include dashes, parentheses, dots, etc to separate the values of the phone number, so you may either want additional validations to account for those cases or use some kind of cleaning to make sure that you're only comparing the numbers.

  • 0
    Certified Associate Developer
    in reply to Peter Lewis

    Thanks a lot. That's working fine. :)