You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在网站嵌入Qlik App/Sheet及获取应用工作表列表

问题解答

问题1:获取指定Qlik应用的工作表列表

目前Qlik Cloud没有直接返回工作表列表的REST API,可通过以下两种可靠方式实现:

方式1:使用Enigma.js连接Qlik引擎API

之前的Socket连接错误大概率是认证或端点配置问题,按以下步骤修正:

  1. 用已获取的OAuth Bearer Token,向Qlik Tenant请求引擎会话令牌:
    POST https://<QLIK-TENANT>/api/v1/engine/session
    Headers:
      Authorization: Bearer <YOUR-OAUTH-TOKEN>
      web-integration-id: <YOUR-WEB-INTEGRATION-ID>
    
  2. 用返回的sessionId和Tenant的WebSocket端点初始化Enigma.js连接,获取工作表:
    const enigma = require('enigma.js');
    const schema = require('enigma.js/schemas/12.612.0.json');
    
    const config = {
      schema,
      url: `wss://<QLIK-TENANT>/app/<APP-ID>?QlikSessionId=<SESSION-ID>`,
      createSocket: (url) => new WebSocket(url),
    };
    
    (async () => {
      const session = enigma.create(config);
      const global = await session.open();
      const app = await global.openDoc('<APP-ID>');
      const sheets = await app.getSheets();
      console.log(sheets);
      await session.close();
    })();
    
  3. 注意:WebSocket连接必须携带会话令牌和web-integration-id,同时确保CSP配置允许WebSocket连接。

方式2:使用Qlik Cloud GraphQL API

通过GraphQL查询直接获取应用工作表,无需连接引擎:

query GetAppSheets($appId: ID!) {
  app(id: $appId) {
    sheets {
      items {
        id
        name
        description
      }
    }
  }
}

请求时携带OAuth Bearer Token和web-integration-id,端点为https://<QLIK-TENANT>/api/v1/graphql。


问题2:正确嵌入Qlik Sheet/App的简便方案

方案1:IFrame嵌入 + JWT认证(简化配置)

若不想依赖复杂SDK,可直接用IFrame结合JWT实现匿名访问:

  1. 确保QMC中已完成Identity Provider配置(Issuer、Key ID、公钥),这是JWT认证的基础。
  2. 后端生成符合Qlik要求的JWT令牌,包含sub(用户标识)、iss(与QMC配置一致的Issuer)、kid(Key ID)等声明,并用私钥签名。
  3. 构造IFrame URL并嵌入:
    <iframe 
      src="https://<QLIK-TENANT>/sense/app/<APP-ID>/sheet/<SHEET-ID>?qlik-web-integration-id=<YOUR-WEB-INTEGRATION-ID>&qlik-jwt=<YOUR-GENERATED-JWT>"
      width="100%" 
      height="800px"
      frameborder="0"
    ></iframe>
    
  4. 注意:JWT需设置合理过期时间,且CSP的frame-ancestors需包含你的网站域名。

方案2:Qlik Embed SDK(简化嵌入逻辑)

Qlik Embed SDK封装了认证和渲染逻辑,比手动处理更简洁:

  1. 引入SDK:
    <script src="https://cdn.jsdelivr.net/npm/@qlik/embed@latest/dist/qlik-embed.min.js"></script>
    
  2. 初始化并嵌入Sheet/App:
    const embed = window.qlikEmbed.init({
      host: '<QLIK-TENANT>',
      webIntegrationId: '<YOUR-WEB-INTEGRATION-ID>',
      authType: 'jwt',
      jwt: '<YOUR-GENERATED-JWT>',
    });
    
    embed.render('<APP-ID>/sheet/<SHEET-ID>', {
      element: document.getElementById('embed-container'),
      width: '100%',
      height: '800px',
    });
    
    若之前遇到Qlik-Embed的限制,可检查JWT声明是否符合要求,或升级到最新版本SDK。

Socket连接错误排查

之前Enigma.js的Socket连接错误,常见原因:

  • WebSocket URL未携带QlikSessionId或web-integration-id参数
  • CSP配置未允许WebSocket连接(需将wss://<QLIK-TENANT>添加到connect-src指令)
  • OAuth令牌权限不足(需包含app:read、engine:read等权限)

内容的提问来源于stack exchange,提问作者HarisH Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:57:28