Checking for duplicates in an array or list

Certified Senior Developer

Hi

I want to check for duplicates in Supplier list when I am adding a new supplier. 

I tried using this expresssion:

 

a!textField(
                label: "Supplier Name",
                value: fv!item.description,
                saveInto: fv!item.description,
                validations:
                {
                  if(
                    count(wherecontains(local!suppliers,index(fv!item,fv!index,{})))>1,
                    "Supplier already exists",{}
)
},

But I am getting the error -> Could not display interface. Please check definition and inputs. Interface Definition: Expression evaluation error at function a!forEach [line 39]: Error in a!forEach() expression during iteration 1: Expression evaluation error at function 'wherecontains' [line 52]: Invalid types, can only act on data of the same type (Any Type, Text)

I tried the methods mentioned in earlier posts but not able to fix it yet. Can someone help me?

Thanks

  Discussion posts and replies are publicly visible

Parents Reply
  • 0
    Certified Lead Developer
    in reply to Sandhya

    I whipped up my own version of this real quick and it appears to be working fine.

    a!localVariables(
      
      local!suppliers: {},
      
      a!gridLayout(
        headerCells: {
          a!gridLayoutHeaderCell(label: "Description")
        },
        
        rows: a!forEach(
          local!suppliers,
          a!gridRowLayout(
            contents: {
              a!textField(
                value: fv!item.description,
                saveInto: fv!item.description,
                validations: if(
                  count(
                    wherecontains(
                      tostring(fv!item.description),
                      touniformstring(local!suppliers.description)
                    )
                  ) > 1,
                  "Supplier already exists",
                  ""
                )
              )
            }
          )
        ),
        
        addRowLink: a!dynamicLink(
          label: "Add",
          saveInto: a!save(
            local!suppliers,
            append(
              local!suppliers,
              {
                id: 1,
                description: ""
              }
            )
          )
        )
      )
    )

Children
  • 0
    Certified Senior Developer
    in reply to Mike Schmitt

    Hi Mike,

    That's great!

    But sadly, isn't working for me still. 

    a!localVariables(
      local!QRSuppliers: a!queryEntity(
        entity: cons!BC_SUPPLIER_DSE,
        query: a!query(
          selection: a!querySelection(
            columns: {
              a!queryColumn(field: "supplierId"),
              a!queryColumn(field: "description"),
              a!queryColumn(field: "displayOrder"),
              a!queryColumn(field: "isActive"),
              a!queryColumn(field: "createdDate"),
              a!queryColumn(field: "createdBy"),
              a!queryColumn(field: "modifiedDate"),
              a!queryColumn(field: "modifiedBy"),
              
            }
          ),
          pagingInfo: a!pagingInfo(startIndex: 1, batchSize: - 1)
        ),
        fetchTotalCount: true
      ).data,
      local!deletedSuppliers,
      local!addedSuppliers,
      local!suppliers: local!QRSuppliers,
      a!formLayout(
        label: "Manage Supplier",
        contents: {
          a!gridLayout(
            headerCells: {
              a!gridLayoutHeaderCell(label: "Supplier Name"),
              a!gridLayoutHeaderCell(label: "Active"),
              a!gridLayoutHeaderCell(label: "")
            },
            columnConfigs: {
              a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 3),
              a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 3),
              a!gridLayoutColumnConfig(width: "ICON")
            },
            rows: a!forEach(
              items: local!suppliers,
              expression: a!gridRowLayout(
                contents: {
                  a!textField(
                    label: "Supplier Name",
                    value: fv!item.description,
                    saveInto: fv!item.description,
                    validations: if(
                      count(
                        wherecontains(
                          tostring(fv!item.description),
                          touniformstring(local!suppliers.description)
                        )
                      ) > 1,
                      "Supplier already exists",
                      ""
                    ),
                    required: true

    Where am I making the mistake?

    Thanks

  • +1
    Certified Lead Developer
    in reply to Sandhya

    It's hard to tell without knowing what the value of local!suppliers is, which apparently depends on the result of your initial query.  It looks, though, as if the data rows you're getting back don't contain a ".description" property.  The error message we're seeing here is the standard error message received when you try to take a dot property from a dictionary/CDT for a property it doesn't have.

    To circumvent this, we can try to get the dot property safely by using the property() function, i.e.

    touniformstring(property(local!suppliers, "description", {}))

  • 0
    Certified Senior Developer
    in reply to Mike Schmitt

    At last, It worked. 

    Thank you so much Mike and others for help. 

    Have a good day