Salesforce中Opportunity页面的Lightning组件如何获取Account ID?
解决方案
你可以通过以下步骤获取Opportunity关联的Account ID并传递到Visualforce页面:
步骤1:修改Aura组件代码
先给组件添加force:hasRecordId接口获取当前Opportunity的记录ID,再通过Salesforce原生的force:recordData组件加载Opportunity关联的AccountId字段,无需额外开发Apex接口:
<aura:component implements="force:lightningQuickActionWithoutHeader,force:hasRecordId"> <!-- 存储加载到的Opportunity字段 --> <aura:attribute name="currentOpp" type="Object" /> <!-- 存储关联的Account ID --> <aura:attribute name="accountId" type="String" /> <!-- 加载当前Opportunity的AccountId字段 --> <force:recordData aura:id="oppLoader" recordId="{!v.recordId}" fields="AccountId" targetFields="{!v.currentOpp}" recordUpdated="{!c.handleRecordLoad}" /> Are you sure you want to proceed? <div class="slds-align_absolute-center"> <lightning:button label="No" variant="destructive" onclick="{!c.handleNo}" ></lightning:button> <lightning:button label="Yes" onclick="{!c.handleYes}"></lightning:button> </div> </aura:component>
步骤2:修改控制器代码
记录加载完成后提取AccountId,跳转时作为URL参数传递到Visualforce页面:
({ // Opportunity记录加载完成后触发,提取AccountId存储 handleRecordLoad: function(component, event, helper) { component.set("v.accountId", component.get("v.currentOpp.AccountId")); }, handleNo: function (component, event, helper) { var accountId = component.get("v.accountId"); var urlEvent = $A.get("e.force:navigateToURL"); urlEvent.setParams({ url: "/apex/MyOtherVisualforce?accountId=" + accountId, isredirect: "true" }); urlEvent.fire(); }, handleYes: function (component, event, helper) { var accountId = component.get("v.accountId"); var urlEvent = $A.get("e.force:navigateToURL"); urlEvent.setParams({ url: "/apex/MyVisualforce?accountId=" + accountId, isredirect: "true" }); urlEvent.fire(); } });
后续你在Visualforce的 Apex 控制器中,直接通过ApexPages.currentPage().getParameters().get('accountId')即可获取到传递的Account ID。如果业务场景中存在Opportunity未关联Account的情况,可以在跳转逻辑前增加非空判断做兼容处理。
内容的提问来源于stack exchange,提问作者Hasan Zubairi
相关产品推荐
相关产品推荐

