我最近一直致力于将power bi嵌入到salesforce LWC中,如下所述:https://github.com/PowerBiDevCamp/SalesforceAppOwnsDataEmbedding.非常酷的东西,但特定的用例可能不是重点。我在Lightning Web组件上遇到了一些渲染问题。这就是:
import { LightningElement, api, wire } from 'lwc';
import getEmbeddingDataForReport from '@salesforce/apex/PowerBiEmbedManager.getEmbeddingDataForReport';
import powerbijs from '@salesforce/resourceUrl/powerbijs';
import { loadScript } from 'lightning/platformResourceLoader';
export default class PowerBiReport extends LightningElement {
@api WorkspaceId = '';
@api ReportId = '';
@api recordId;
@wire(getEmbeddingDataForReport,{
WorkspaceId: "$WorkspaceId",
ReportId: "$ReportId"
}) report;
renderedCallback() {
Promise.all([ loadScript(this, powerbijs ) ]).then(() => {
if(this.report.data){
if(this.report.data.embedUrl && this.report.data.embedToken){
const reportContainer = this.template.querySelector('[data-id="embed-container"');
const reportId = this.report.data.reportId;
const embedUrl = this.report.data.embedUrl;
const token = this.report.data.embedToken;
var visualConfig = {
accessToken: token,
embedUrl: embedUrl,
id: reportId,
pageName: 'ReportSection',
tokenType: 1,
type: 'visual',
visualName: '1837fab00804802016c6',
settings: {
panes: {
filters: { expanded: false, visible: true },
pageNavigation: { visible: false}
}
}
}
// Embed the report and display it within the div container.
var report = powerbi.embed(reportContainer, visualConfig);
}
else {
console.log('no embedUrl or embedToken');
}
}
else{
console.log('no report.data yet');
}
});
}
}
现在这工作正常,正如预期的那样。getEmbeddingDataForReport返回所有必要的数据(嵌入url,token等),我已经正确地嵌入和显示了图表(大部分)。我在 lightning 记录页面上有 lightning 网络组件。但问题是。当页面加载时,我偶尔会收到一条错误消息:
在偶尔得到这个错误弹出,我做了一些挖掘,并注意到,我总是得到它,如果我点击'编辑页面'拉出来的 lightning 页面的LWC是嵌入式。打开控制台时,我看到此错误消息重复了大约4或5次:“Uncaught(in promise)DOMException:无法在“Window”上执行“postMessage”:#无法克隆。”
在一些随机的地方登录后,我注意到如果我注解掉powerbi.embed使用配置和选定的htmlid嵌入实际报告的行,我不会得到这个错误。所以,这一行可能有问题:
var report = powerbi.embed(reportContainer, visualConfig);
或者这一行:
const reportContainer = this.template.querySelector('[data-id="embed-container"');
我真的很困惑。我完全不知道为什么会发生这种事。我在网上读到了一些东西,指出这个错误通常与在不支持LWC的上下文中嵌入LWC有关,解决方案是将LWC Package 在Aura组件中;然而,我不认为这适用于这里,因为LWC嵌入在一个 lightning 记录页面中,该页面显然支持LWC。所以,这里发生了一些事情,与我指出的两行中的一行有关......有什么想法吗?救命啊!!
1条答案
按热度按时间z2acfund1#
您是否尝试过“light dom”(https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.create_light_dom)或启用Lightning Web Security(请小心,它是整个组织的开关,而不仅仅是单个组件):https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.security_lwsec_intro。
如果你的用户还没有启用Setup -〉Debug Mode,你可能会得到更好的错误消息。