PowerBi 中的 Forge Viewer 卸载和加载模型

Forge Viewer in PowerBi unload and load models

我已经提取了我需要的所有文档 URN,目前将它们放在我已导入 PowerBi 的 excel sheet 中。所以基本上我能够创建一个带有切片器的列表,将每个文件组织到 PowerBi 列表中的特定部分。

例如:

我目前正在使用我发现的放置 Forge Viewer into PowerBi 的教程。并且在这个 URN 中是硬编码的。现在我要么尝试在查看器中构建一个 Forge 树,要么只使用我在 PowerBi 中的列表,这是可能的。我已经让查看器从教程开始工作,并且我正在使用 2-legged 身份验证。

我接下来的步骤如下:

为了卸载文档,我在 visual.ts 文件中创建了这段代码。

         this.forge_viewer.unloadDocumentNode = function (manifestNode){
         //if model is in memory, just unload it.

         let model = this.impl.findModel(manifestNode, true);
         if (model){
             this.impl.unloadModel(model);
             return true;
         }
     }

如果我不知道如何从我在 PowerBi 中的列表中加载另一个文件,我不确定如何测试它以查看它是否有效。所以我的问题是,这在卸载模型时是否正确?如果我在 PowerBi 中选择不同的 URN,如何让教程中的代码知道?

提前致谢

现在,loadDocumentNode 还将负责卸载当前模型,因此您可以直接使用新文档调用它。例如在下面的代码中,launchViewer 加载第一个模型。然后loadModel1加载模型1,loadModel2加载模型2。

 var viewer;

 function launchViewer(urn, vid) {
    var options = {
    env: 'AutodeskProduction',
    getAccessToken: getForgeToken
  };

 Autodesk.Viewing.Initializer(options, () => {
   viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('forgeViewer'));
   viewer.start();
   var documentId = 'urn:' + urn;
   Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, 
  onDocumentLoadFailure);
 }); 
}

function getForgeToken(callback) {
 fetch('/api/forge/oauth/token').then(res => {
   res.json().then(data => {
    callback(data.access_token, data.expires_in);
  });
});
}

function onDocumentLoadSuccess(doc) {
  var viewables = (viewableId ? doc.getRoot().findByGuid(viewableId) : 
    doc.getRoot().getDefaultGeometry());
   viewer.loadDocumentNode(doc, viewables).then(i => {
  });
}

function onDocumentLoadFailure(viewerErrorCode) {
 console.error('onDocumentLoadFailure() - errorCode:' + viewerErrorCode);
}

 function loadModel1(){
     Autodesk.Viewing.Document.load('urn:<model1 urn>', onDocumentLoadSuccess, 
   onDocumentLoadFailure);
}

 function loadModel2(){
         Autodesk.Viewing.Document.load('urn:<model2 urn>', onDocumentLoadSuccess, 
   onDocumentLoadFailure);
}