步骤 3:嵌入控制面板 URL - Amazon QuickSight
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

步骤 3:嵌入控制面板 URL

 适用于:企业版 
   目标受众:Amazon QuickSight 开发者 

在下一节中,您可以了解如何使用 Embedding SDK (JavaScript) 将第 2 步中的控制面板 URL 嵌入到您的网站或应用程序页面中。QuickSight 通过使用该开发工具包,您可以执行以下操作:

  • 将控制面板放在 HTML 页面上。

  • 将参数传递到控制面板。

  • 使用为应用程序自定义的消息处理错误状态。

调用 GenerateEmbedUrlForAnynymousUser API 操作生成可嵌入应用的 URL。该 URL 的有效期为 5 分钟,生成的会话的有效期为 10 个小时。该 API 操作为 URL 提供 auth_code 以启用单点登录会话。

下面显示了 generate-embed-url-for-anynymous-user 的示例响应:

//The URL returned is over 900 characters. For this example, we've shortened the string for //readability and added ellipsis to indicate that it's incomplete. { "Status": "200", "EmbedUrl": "https://quicksightdomain/embed/12345/dashboards/67890..", "RequestId": "7bee030e-f191-45c4-97fe-d9faf0e03713" }

使用嵌入软件开发工具包或将此网址添加到 iframe 中,将此仪表板QuickSight 嵌入到您的网页中。如果您设置了固定的高度和宽度数字(以像素为单位),则 QuickSight 使用这些数字,并且不会在窗口大小调整时更改视觉效果。如果您设置了相对的百分比高度和宽度,则会 QuickSight 提供响应式布局,该布局会随着窗口大小的变化而进行修改。通过使用 Em QuickSight bedding SDK,您还可以控制控制面板中的参数并接收有关页面加载完成和错误的回调。

要托管嵌入式仪表板的域名必须位于允许列表中,即订 Amazon QuickSight 阅的已批准域名列表。这一要求可阻止未经批准的域托管嵌入式控制面板,从而保护您的数据。有关为嵌入式控制面板添加域的更多信息,请参阅 允许在运行时使用 QuickSight API 列出域名

以下示例演示了如何使用生成的 URL。此代码位于您的应用程序服务器上。

SDK 2.0
<!DOCTYPE html> <html> <head> <title>Dashboard Embedding Example</title> <script src="https://unpkg.com/amazon-quicksight-embedding-sdk@2.0.0/dist/quicksight-embedding-js-sdk.min.js"></script> <script type="text/javascript"> const embedDashboard = async() => { const { createEmbeddingContext, } = QuickSightEmbedding; const embeddingContext = await createEmbeddingContext({ onChange: (changeEvent, metadata) => { console.log('Context received a change', changeEvent, metadata); }, }); const frameOptions = { url: '<YOUR_EMBED_URL>', container: '#experience-container', height: "700px", width: "1000px", onChange: (changeEvent, metadata) => { switch (changeEvent.eventName) { case 'FRAME_MOUNTED': { console.log("Do something when the experience frame is mounted."); break; } case 'FRAME_LOADED': { console.log("Do something when the experience frame is loaded."); break; } } }, }; const contentOptions = { parameters: [ { Name: 'country', Values: [ 'United States' ], }, { Name: 'states', Values: [ 'California', 'Washington' ] } ], locale: "en-US", sheetOptions: { initialSheetId: '<YOUR_SHEETID>', singleSheet: false, emitSizeChangedEventOnSheetChange: false, }, toolbarOptions: { export: false, undoRedo: false, reset: false }, attributionOptions: { overlayContent: false, }, onMessage: async (messageEvent, experienceMetadata) => { switch (messageEvent.eventName) { case 'CONTENT_LOADED': { console.log("All visuals are loaded. The title of the document:", messageEvent.message.title); break; } case 'ERROR_OCCURRED': { console.log("Error occurred while rendering the experience. Error code:", messageEvent.message.errorCode); break; } case 'PARAMETERS_CHANGED': { console.log("Parameters changed. Changed parameters:", messageEvent.message.changedParameters); break; } case 'SELECTED_SHEET_CHANGED': { console.log("Selected sheet changed. Selected sheet:", messageEvent.message.selectedSheet); break; } case 'SIZE_CHANGED': { console.log("Size changed. New dimensions:", messageEvent.message); break; } case 'MODAL_OPENED': { window.scrollTo({ top: 0 // iframe top position }); break; } } }, }; const embeddedDashboardExperience = await embeddingContext.embedDashboard(frameOptions, contentOptions); const selectCountryElement = document.getElementById('country'); selectCountryElement.addEventListener('change', (event) => { embeddedDashboardExperience.setParameters([ { Name: 'country', Values: event.target.value } ]); }); }; </script> </head> <body onload="embedDashboard()"> <span> <label for="country">Country</label> <select id="country" name="country"> <option value="United States">United States</option> <option value="Mexico">Mexico</option> <option value="Canada">Canada</option> </select> </span> <div id="experience-container"></div> </body> </html>
SDK 1.0
<!DOCTYPE html> <html> <head> <title>Basic Embed</title> <script src="https://unpkg.com/amazon-quicksight-embedding-sdk@1.0.15/dist/quicksight-embedding-js-sdk.min.js"></script> <script type="text/javascript"> var dashboard function onDashboardLoad(payload) { console.log("Do something when the dashboard is fully loaded."); } function onError(payload) { console.log("Do something when the dashboard fails loading"); } function embedDashboard() { var containerDiv = document.getElementById("embeddingContainer"); var options = { // replace this dummy url with the one generated via embedding API url: "https://us-east-1.quicksight.aws.amazon.com/sn/dashboards/dashboardId?isauthcode=true&identityprovider=quicksight&code=authcode", container: containerDiv, parameters: { country: "United States" }, scrolling: "no", height: "700px", width: "1000px", locale: "en-US", footerPaddingEnabled: true }; dashboard = QuickSightEmbedding.embedDashboard(options); dashboard.on("error", onError); dashboard.on("load", onDashboardLoad); } function onCountryChange(obj) { dashboard.setParameters({country: obj.value}); } </script> </head> <body onload="embedDashboard()"> <span> <label for="country">Country</label> <select id="country" name="country" onchange="onCountryChange(this)"> <option value="United States">United States</option> <option value="Mexico">Mexico</option> <option value="Canada">Canada</option> </select> </span> <div id="embeddingContainer"></div> </body> </html>

要使此示例起作用,请务必使用 Embeddin QuickSight g SDK 将嵌入式仪表板加载到您的网站上 JavaScript。要获取副本,请执行下列操作之一:

  • 从以下网址下载 Amazon QuickSight 嵌入软件开发工具包 GitHub。该存储库由一组 QuickSight 开发人员维护。

  • https://www.npmjs.com/package/ 下载最新的 Em QuickSight bedging SDK 版本amazon-quicksight-embedding-sdk。

  • 如果您使用npm JavaScript 依赖关系,请通过运行以下命令下载并安装它。

    npm install amazon-quicksight-embedding-sdk