I want to disable a column for group of users in the editable grid
Discussion posts and replies are publicly visible
Hi vijayp6380 ,
please check below code. In the first text box, I used isusermemberofgroup function.
a!localVariables( /* * local!employess is provided in this recipe as a way to start with hard-coded * data. However, this data is identical to the data created from the entity-backed * tutorial. Replace the hard-coded data with a query to the employee data store * entity and all of the employee records from the tutorial will appear. * * To replace this data with your own, replace (ctrl+H or cmd+H) all references to * local!employees with your data source, either via rule input or local variable. */ local!employees: { a!map( id: 1, firstName: "John" , lastName: "Smith" , department: "Engineering" , title: "Director" , phoneNumber: "555-123-4567" , startDate: today()-360 ), a!map( id: 2, firstName: "Michael" , lastName: "Johnson" , department: "Finance" , title: "Analyst" , phoneNumber: "555-987-6543" , startDate: today()-360 ), a!map( id: 3, firstName: "Mary", lastName: "Reed" , department: "Engineering" , title: "Software Engineer" , phoneNumber: "555-456-0123" , startDate: today()-240 ), }, a!formLayout( label: "Example: Add,Update, or Remove Employee Data", contents: { a!gridLayout( totalCount: count(local!employees), headerCells: { a!gridLayoutHeaderCell(label: "First Name" ), a!gridLayoutHeaderCell(label: "Last Name" ), a!gridLayoutHeaderCell(label: "Department" ), a!gridLayoutHeaderCell(label: "Title" ), a!gridLayoutHeaderCell(label: "Phone Number" ), a!gridLayoutHeaderCell(label: "Start Date", align: "RIGHT" ), /* For the "Remove" column */ a!gridLayoutHeaderCell(label: "" ) }, /* Only needed when some columns need to be narrow */ columnConfigs: { a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight:3 ), a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight:3 ), a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight:3 ), a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight:3 ), a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight:3 ), a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight:2 ), a!gridLayoutColumnConfig(width: "ICON") }, /* * a!forEach() will take local!employee data and used that data to loop through an * expression that creates each row. * * When modifying the recipe to work with your data, you only need to change: * 1.) the number of fields in each row * 2.) the types of fields for each column (i.e. a!textField() for text data elements) * 3.) the fv!item elements. For example fv!item.firstName would change to fv!item.yourdata */ rows: a!forEach( items: local!employees, expression: a!gridRowLayout( contents: { /* For the First Name Column*/ a!textField( /* Labels are not visible in grid cells but are necessary to meet accessibility requirements */ label: "first name " & fv!index, value: fv!item.firstName, saveInto: fv!item.firstName, required: true, disabled: if( a!isUserMemberOfGroup(username: loggedInUser(),groups: cons!BA_GRP), true, false ) ), /* For the Last Name Column*/ a!textField( label: "last name " & fv!index, value: fv!item.lastName, saveInto: fv!item.lastName, required:true ), /* For the Department Column*/ a!dropdownField( label: "department " & fv!index, placeholder: "-- Select -- ", choiceLabels: { "Corporate", "Engineering", "Finance", "Human Resources", "Professional Services", "Sales" }, choiceValues: { "Corporate", "Engineering", "Finance", "Human Resources", "Professional Services", "Sales" }, value: fv!item.department, saveInto: fv!item.department, required:true ), /* For the Title Column*/ a!textField( label: "title " & fv!index, value: fv!item.title, saveInto: fv!item.title, required:true ), /* For the Phone Number Column*/ a!textField( label: "phone number " & fv!index, placeholder:"555-456-7890", value: fv!item.phoneNumber, saveInto: fv!item.phoneNumber ), /* For the Start Date Column*/ a!dateField( label: "start date " & fv!index, value: fv!item.startDate, saveInto: fv!item.startDate, required:true, align: "RIGHT" ), /* For the Removal Column*/ a!richTextDisplayField( value: a!richTextIcon( icon: "close", altText: "delete " & fv!index, caption: "Remove " & fv!item.firstName & " " & fv!item.lastName, link: a!dynamicLink( value: fv!index, saveInto: { a!save(local!employees, remove(local!employees, save!value)) } ), linkStyle: "STANDALONE", color: "NEGATIVE" ) ) }, id: fv!index ) ), addRowlink: a!dynamicLink( label: "Add Employee", /* * For your use case, set the value to a blank instance of your CDT using * the type constructor, e.g. type!Employee(). Only specify the field * if you want to give it a default value e.g. startDate: today()+1. */ value: { startDate: today() + 1 }, saveInto: { a!save(local!employees, append(local!employees, save!value)) } ), rowHeader: 1 ) }, buttons: a!buttonLayout( primaryButtons: a!buttonWidget( label: "Submit", submit: true ) ) ) )
Use showWhen parameter in Grid header cell and in gridRowLayout's contents, then add condition a!isUserMemberOfGroup( UserName, {Groups})
Example:
a!localVariables( local!items: { { item: "Item 1", qty: 1, unitPrice: 10 }, { item: "Item 2", qty: 2, unitPrice: 20 } }, a!gridLayout( label: "Products", instructions: "Update the item name, quantity, or unit price.", headerCells: { a!gridLayoutHeaderCell(label: "Item", showWhen:a!isUserMemberOfGroup( UserName, {Groups})), a!gridLayoutHeaderCell(label: "Qty"), a!gridLayoutHeaderCell(label: "Unit Price"), a!gridLayoutHeaderCell(label: "Total", align: "RIGHT") }, rows: { a!gridRowLayout( contents: { a!textField( value: local!items[1].item, saveInto: local!items[1].item, showWhen: a!isUserMemberOfGroup( UserName, {Groups}) ), a!integerField( value: local!items[1].qty, saveInto: local!items[1].qty ), a!floatingPointField( value: local!items[1].unitPrice, saveInto: local!items[1].unitPrice ), a!textField( value: a!currency( isoCode: "USD", value: tointeger(local!items[1].qty) * todecimal(local!items[1].unitPrice) ), readOnly: true, align: "RIGHT" ) } ),
}, rowHeader: 1 ))
Thank you