I have to validate a editable grid for the following scenario -
I have two fields in the grid 1. Role 2. Location
use case - if the user select combination of same role and location as a duplicate then it should thrown an validation error like combination of role and location already exits.
example - if the user select role as developer and location as india and again he adding a new row and selecting the same role and same location it should throw an error
any one suggest some idea
Discussion posts and replies are publicly visible
Please try this.
a!localVariables( local!data, a!gridLayout( headerCells: { a!gridLayoutHeaderCell(label: "Role"), a!gridLayoutHeaderCell(label: "Location") }, addRowLink: a!dynamicLink( label: "Add", saveInto: { a!save( local!data, append(local!data, { role: "", loc: "" }) ) } ), rows: a!forEach( items: local!data, expression: a!gridRowLayout( contents: { a!dropdownField( choiceLabels: { "Dev", "Tester" }, choiceValues: { "Dev", "Tester" }, placeholder: "---", value: fv!item.role, saveInto: fv!item.role, validations: if( count( intersection( wherecontains( tostring(fv!item.role), a!flatten(local!data.role) ), wherecontains( tostring(fv!item.loc), a!flatten(local!data.loc) ) ) ) > 1, "combination of role and location already exits", "" ) ), a!dropdownField( choiceLabels: { "India", "USA", "AUS" }, choiceValues: { "India", "USA", "AUS" }, placeholder: "---", value: fv!item.loc, saveInto: fv!item.loc, validations: if( count( intersection( wherecontains( tostring(fv!item.role), a!flatten(local!data.role) ), wherecontains( tostring(fv!item.loc), a!flatten(local!data.loc) ) ) ) > 1, "combination of role and location already exits", "" ) ) } ) ) ) )
You can add the below piece of code as validation on both the dropdowns - Role and location.
if( and( or( count( wherecontains(fv!item.role, local!array.role) ) > 1, count( wherecontains(fv!item.Location, local!array.Location) ) > 1 ), wherecontains(fv!item.role, local!array.role) = wherecontains(fv!item.Location, local!array.Location) ), "Combination of role and location should be unique.", {} )
Thanks its worked
Thanks
I have much easier way.
a!localVariables( local!array: { { role: null, Location: null } }, a!gridLayout( headerCells: { a!gridLayoutHeaderCell(label: "Role"), a!gridLayoutHeaderCell(label: "Location") }, rows: a!forEach( items: local!array, expression: a!gridRowLayout( contents: { a!dropdownFieldByIndex( choiceLabels: { "Abc", "Def", "Ghi" }, validations: if( count(wherecontains(fv!item, local!array)) > 1, "Combination of role and location should be unique.", {} ), value: fv!item.role, saveInto: local!array[fv!index].role, placeholder: "-" ), a!dropdownFieldByIndex( choiceLabels: { "L1", "L2", "L3" }, validations: if( count(wherecontains(fv!item, local!array)) > 1, "Combination of role and location should be unique.", {} ), value: fv!item.Location, saveInto: local!array[fv!index].Location, placeholder: "-" ) } ) ), addRowLink: a!dynamicLink( label: "Add", value: append(local!array, { role: null, Location: null }), saveInto: local!array ), ) )
Oh yes. We do not need multiple whereContains(). Nice catch Ujjwal!