如何创建带多参数化实例的Qlik Sense应用 实现多环境代码共享
Qlik 多环境共享核心逻辑最佳实践
方案1:入口应用+核心逻辑应用拆分(完全匹配你的需求)
该方案完全符合你提出的「3个入口应用调用1个核心应用」的预期,后续修改业务逻辑仅需更新核心应用,无需调整3个入口应用:
第一步:开发核心逻辑应用
把所有环境相关参数全部定义为可覆盖的变量,所有硬编码的环境配置(数据库地址、库名、账号密码等)全部替换为变量引用,示例脚本如下:// 核心应用顶部变量定义,入口应用传入的参数会覆盖默认值 LET vEnv = '$(vEnv)' = '' ? 'dev' : '$(vEnv)'; LET vDBHost = '$(vDBHost)' = '' ? 'dev-db.internal' : '$(vDBHost)'; LET vDBName = '$(vDBName)' = '' ? 'dev_biz_db' : '$(vDBName)'; LET vDBUser = '$(vDBUser)' = '' ? 'dev_readonly' : '$(vDBUser)'; LET vDBPwd = '$(vDBPwd)' = '' ? 'dev_default_pwd' : '$(vDBPwd)'; // 下方编写所有核心业务逻辑、数据加载、模型构建代码,全程引用上面的变量,不要出现任何硬编码的环境配置第二步:开发3个入口应用
根据你使用的Qlik版本选择对应实现方式:若使用Qlik Sense Enterprise/SaaS版本:
每个入口应用仅需编写环境变量赋值代码,再调用核心应用即可,以run_dev为例:// run_dev 应用全部脚本 LET vEnv = 'dev'; LET vDBHost = 'dev-db.internal'; LET vDBName = 'dev_biz_db'; LET vDBUser = 'dev_readonly'; LET vDBPwd = 'your_dev_password'; // 调用核心逻辑应用执行,替换为你自己的核心应用ID CALL App('12345678-1234-1234-1234-1234567890ab');run_test、run_prod仅需修改变量值即可,其余代码完全一致。若使用QlikView或Qlik Sense桌面单机版:
先把核心应用的所有业务脚本导出为core_biz_logic.qvs文件,存放在所有入口应用都能访问的共享路径下,每个入口应用编写如下代码即可,以run_dev为例:// run_dev 应用全部脚本 LET vEnv = 'dev'; LET vDBHost = 'dev-db.internal'; LET vDBName = 'dev_biz_db'; LET vDBUser = 'dev_readonly'; LET vDBPwd = 'your_dev_password'; // 导入核心逻辑脚本执行,替换为你自己的qvs文件路径 $(Include='lib://SharedScripts/core_biz_logic.qvs');
方案2:单应用自动识别环境(无需拆分多个应用)
如果不想维护4个应用,也可以直接在单个应用内实现自动识别环境,完全不需要手动修改代码:
通过获取当前应用的存储路径、所属工作空间、当前登录用户信息自动匹配环境参数,示例脚本如下:
// 获取当前应用的存储路径 LET vAppPath = DocumentPath(); // 按路径自动匹配环境 IF Index(vAppPath, 'Production') > 0 OR Index(vAppPath, '生产空间') > 0 THEN LET vEnv = 'prod'; LET vDBHost = 'prod-db.internal'; LET vDBName = 'prod_biz_db'; LET vDBUser = 'prod_readonly'; LET vDBPwd = 'your_prod_password'; ELSEIF Index(vAppPath, 'Test') > 0 OR Index(vAppPath, '测试空间') > 0 THEN LET vEnv = 'test'; LET vDBHost = 'test-db.internal'; LET vDBName = 'test_biz_db'; LET vDBUser = 'test_readonly'; LET vDBPwd = 'your_test_password'; ELSE // 默认匹配开发环境 LET vEnv = 'dev'; LET vDBHost = 'dev-db.internal'; LET vDBName = 'dev_biz_db'; LET vDBUser = 'dev_readonly'; LET vDBPwd = 'your_dev_password'; ENDIF // 下方编写核心业务逻辑即可
优化建议
- 敏感参数如数据库密码不要硬编码在脚本中,使用Qlik内置的库连接加密存储、自定义属性功能存储敏感值,避免配置泄露。
- 可以在应用首页添加环境标识,表达式设置为
='当前运行环境:'&vEnv,运行后可直观确认当前环境,避免误操作。
内容的提问来源于stack exchange,提问作者Darren Oakey
相关产品推荐
相关产品推荐

