javascript 在Salesforce中呈现Lightning Web组件时出现错误消息

watbbzwu  于 2023-05-05  发布在  Java
关注(0)|答案(1)|浏览(182)

我最近一直致力于将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。所以,这里发生了一些事情,与我指出的两行中的一行有关......有什么想法吗?救命啊!!

z2acfund

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,你可能会得到更好的错误消息。

相关问题