You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:15:35