LWC Lightning Tree Grid Wire调用报错[Object Object]求助
Salesforce社区页面LWC Lightning Tree Grid无数据展示排查
在Salesforce社区的Account记录页中,尝试用Lightning Tree Grid LWC组件展示与当前记录拥有相同上级Account的账户层级数据,需显示Name、Branch Location(对应ShippingAddress)、Branch Type(对应Branch_Type__c)字段,但组件无任何数据展示,Wire方法调用返回错误,data为undefined,error显示为[object Object]。以下是相关代码及控制台输出,需排查问题原因:
控制器代码(Apex)
public with sharing class AccountHeirarchySelector { //获取与当前记录拥有相同上级的所有账户 @AuraEnabled(cacheable=true) public static List<Account> findHierarchyData(String recordId){ String parentId= getParentId(recordId); List<Account> accList = new List<Account>(); if (parentId!=null) accList = [select id, name, ParentId,Branch_Type__c,ShippingAddress from Account where ParentId=:parentId]; System.debug('-------accList------------'+accList); return accList; } //获取当前记录的上级账户ID public static String getParentId(String recordId ){ List<Account> parentIdFromAcc= [select ParentId from Account where id=:recordId LIMIT 1]; System.debug('-------parentIdFromAcc------------'+parentIdFromAcc); System.debug('-------parentIdFromAcc[0].ParentId------------'+parentIdFromAcc[0].ParentId); return parentIdFromAcc[0].ParentId; } }
LWC JavaScript代码
import { LightningElement,wire,api,track } from 'lwc'; import findHierarchyData from '@salesforce/apex/AccountHeirarchySelector.findHierarchyData'; const COLS= [ {label : 'Account Name 1', fieldName : 'Name'}, {label : 'Branch Location 1', fieldName : 'ShippingAddress'}, {label : 'Branch Type 1', fieldName : 'Branch_Type__c'} ] export default class branchAccountTreeGridView extends LightningElement { @track accountsLoaded = false; @api recordId; @track gridData = []; gridColumns = COLS; @wire(findHierarchyData, { recordId: '$recordId'}) wiredAccounts({ data, error }) { console.log('after method call') console.log('----------fetched rec id ? -------:'+this.recordId); console.log('----------data ? --------------------' + data); console.log('----------error ? --------------------' + error); if (data) { this.accountsLoaded = true; //处理记录数据 console.log('-------found data -------------'+this.recordId); console.log('dataaaaaaaaaaaaa' + data); var strData = JSON.parse( JSON.stringify( data ) ); strData.map((row, index) => { if (row['Name']) { row._children = row['Name']; //定义子行 delete row.Cases; } }); this.myData = strData; } else if(error){ console.log('Stringified error ---- ' + JSON.parse(JSON.stringify(error))); } } }
LWC元数据文件(meta.xml)
<?xml version="1.0" encoding="UTF-8"?> <LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="accountHeirarchy"> <apiVersion>55.0</apiVersion> <isExposed>true</isExposed> <targets> <target>lightning__RecordPage</target> <target>lightning__AppPage</target> <target>lightning__HomePage</target> <target>lightningCommunity__Page</target> <target>lightningCommunity__Default</target> <target>lightning__RecordAction</target> </targets> <targetConfigs> <targetConfig targets="lightning__RecordPage"> <objects> <object>Account</object> </objects> </targetConfig> <targetConfig targets="lightningCommunity__Default"> <property name="recordId" type="String" label="Record Id" description="Pass the page's record id to the component variable" /> </targetConfig> </targetConfigs> </LightningComponentBundle>
LWC HTML模板
<template> <template if:true={accountsLoaded}> <lightning-tree-grid columns={gridColumns} data={gridData} key-field="Id"> </lightning-tree-grid> </template> </template>
浏览器控制台输出
branchAccountTreeGridView.js:1 ----------fetched rec id ? -------:0010w000010FnfWAAS branchAccountTreeGridView.js:1 ----------data ? --------------------undefined branchAccountTreeGridView.js:1 ----------error ? --------------------[object Object] branchAccountTreeGridView.js:1 Stringified error ---- [object Object]
问题排查与修复方案
1. 修复错误信息打印
当前错误打印代码无法展示具体错误详情,修改JS中的错误处理逻辑,输出完整错误信息:
else if(error){ console.log('完整错误信息: ', JSON.stringify(error)); }
2. 修复Apex空指针异常
getParentId方法未处理查询结果为空的情况,若recordId无效会抛出异常,增加空值判断:
public static String getParentId(String recordId ){ List<Account> parentIdFromAcc= [select ParentId from Account where id=:recordId LIMIT 1]; if(parentIdFromAcc == null || parentIdFromAcc.isEmpty()){ return null; } System.debug('-------parentIdFromAcc------------'+parentIdFromAcc); System.debug('-------parentIdFromAcc[0].ParentId------------'+parentIdFromAcc[0].ParentId); return parentIdFromAcc[0].ParentId; }
3. 修复LWC数据绑定错误
JS中处理后的数据赋值给了this.myData,但HTML模板绑定的是gridData,导致数据无法渲染,修改赋值逻辑:
this.gridData = strData;
4. 修正Tree Grid数据格式
Lightning Tree Grid要求_children字段为子节点数组,当前将Name赋值给_children不符合格式要求。若仅需展示同层级账户,可去掉_children处理逻辑;若需树形结构,需重新构建符合要求的数据格式。
5. 验证社区RecordId传递
确认社区页面组件配置中,已将页面的recordId正确绑定到组件的recordId属性。
内容的提问来源于stack exchange,提问作者Binu George
相关产品推荐
相关产品推荐

