Lightning Datatable中PermissionSet.Name字段查询后无法显示问题
问题解决:LWC数据表格无法显示PermissionSet.Name字段
问题核心:Lightning Datatable不支持直接通过嵌套字段(如PermissionSet.Name)渲染内容,必须将嵌套数据转换为扁平结构。
解决步骤:
1. 修改JS文件,转换数据结构
在wire回调中,将返回的PermissionSet.Name提取为单独的平级字段:
import {LightningElement, wire, api} from 'lwc'; import getPermissionSets from '@salesforce/apex/UserDataTableController.getPermissionSets'; const columns = [ { label: '权限集名称', fieldName: 'permissionSetName' // 修改为平级字段名 } ]; export default class GetPermSetDisplay extends LightningElement { data; columns = columns; @api recordId; @wire(getPermissionSets, {recordId: '$recordId'}) permissions(result) { if (result.data) { // 转换嵌套数据为扁平结构 this.data = result.data.map(item => ({ ...item, permissionSetName: item.PermissionSet?.Name || '' // 提取PermissionSet.Name到新字段 })); this.error = undefined; } else if (result.error) { this.error = result.error; this.data = undefined; } } }
2. 验证Apex查询(已正确无需修改)
你的Apex控制器中已经正确查询了PermissionSet.Name,数据能正常返回,无需调整:
@AuraEnabled(cacheable=true) public static List<PermissionSetAssignment> getPermissionSets(String recordId){ return [SELECT Id, PermissionSetId, PermissionSet.Name, PermissionSet.ProfileId, PermissionSet.Profile.Name, AssigneeId, Assignee.Name FROM PermissionSetAssignment WHERE AssigneeId = :recordId]; }
3. HTML文件保持不变
原HTML代码无需修改,datatable会自动使用转换后的平级字段渲染内容。
原理说明
Lightning Datatable的fieldName属性仅支持直接访问对象的一级属性,无法解析嵌套对象的链式访问(如PermissionSet.Name)。通过map方法将嵌套字段提取为平级属性后,就能正常显示内容。
内容的提问来源于stack exchange,提问作者ForrestFairway
相关产品推荐
相关产品推荐

