logo Qlik中文手册(持续更新) 我也要发布文档

如何创建您的第一个Enigma.js Mixins


真正的现代分析时代始于经典的QlikView分析解决方案的发布,以及基于它的改变游戏规则的关联引擎。它彻底改变了组织使用直观可视化发现使用数据的方式,从而使商业智能比以往任何时候都多。而且,我们将继续借助下一代分析平台Qlik Sense引领这一潮流。借助关联引擎,强大的增强智能和受管的多云架构,它支持企业任何规模的分析场景。

视频资源 免费试用


本文将会介绍Enigma.js,它是一个可帮助您与Qlik QIX Engine通信的库。其中有一项很酷的功能是,它允许您编写自己的mixins来扩展或覆盖您一直使用的Qlik对象上的方法。这篇文章将教你mixin的基础知识,并向你展示如何实现自己的。


您的第一个Mixin

如果您想查看最终产品,这是完成的存储库:https://github.com/coolinmc6/enigma-mixins-tutorial。如果您想继续,请克隆仓库并检出“开始”分支`git checkout -b start`以便从头开始。

希望您熟悉典型的Enigma配置(https://community.qlik.com/t5/Qlik-Design-Blog/Qlik-Engine-and-Picasso-js/ba-p/1706241),因为这是必须在mixin所在的位置包括在内。对于第一个mixin和我们将要编写的其他mixin,需要创建一个单独的mixin文件,以保持代码干净。然后主要在该mixin文件和?index.js`中工作。

首先,在您的`/ config`目录中创建一个单独的文件,名为`mixins.js`。复制下面的代码,然后开始:

// mixins.js
const docMixin = {
  types: ['Doc'],
  init(args) {},
  extend: {
    myMixin() {
        console.log('myMixin was called - this is all it does');
    },
  }
}

export {
  docMixin,
};

将您的mixin添加到配置文件?app.js`中:

// app.js
import { docMixin } from './mixins';

// CODE

export default enigma.create({ 
  schema, url, mixins: [docMixin] // add docMixin
}).open().then(global => global.openDoc(config.appId));

现在,在index.js文件中,只需执行以下操作即可调用mixin:?app.myMixin()`。 如果您检查控制台,则会看到我们输入的console.log消息; 您刚完成第一次Mixin

注意:Mixin对象应具有类型属性,以指示您正在修改的Qlik对象(例如Doc,GenericObject,GenericBookmark等)。对于第一个Mixin,将修改Doc类。接下来是?init(args)`方法,该方法在初始化mixin时运行一些代码。最后,有两个属性:“ extend”和“ override”。 顾名思义,“ extend”将向Qlik Object添加方法,而“ override”将覆盖现有的Qlik Object方法。本教程将主要侧重于扩展Qlik Objects的功能。


在Mixins中使用Qlik对象

现在,已经用扩展Doc对象的单个方法创建了第一个mixin,然后逐步提高并编写一种获取超立方体数据的方法。这种方法的重点是为我们完成Qlik QIX Engine的所有工作。此方法位于Doc类上,因此在我们的代码中,我们可以像下面这样在“ myMixin()”代码下面编写该方法:

// mixins.js
const docMixin = {
  types: ['Doc'],
  init(args) {},
  extend: {
    myMixin() {
        console.log('myMixin was called - this is all it does');
    },
    mGetData({ object }) {
      return new Promise((res) => {
        this.createSessionObject(object).then((obj) => {
          console.log(obj)
          obj.getLayout().then((layout) => {
            const data = layout.qHyperCube.qDataPages;
            res(data);
          })
        })
      })
    },
  }
}

export {
  docMixin,
};

在index.js文件中,我们将调用该方法并提供一个超立方体。复制以下超多维数据集和代码以调用该方法:

// index.js
const hypercube = {
  qInfo: { qId: 'Sales by Year', qType: 'data'},
  qHyperCubeDef: {
    qDimensions: [
      // { qDef: { qFieldDefs: ['[Country]']} },
      { qDef: { qFieldDefs: ['[Product Group Desc]']} }
    ],
    qMeasures: [
      { qDef: { qDef: 'SUM([Sales Margin Amount])'}, },
    ],
    qInitialDataFetch: [{
      qTop: 0, qLeft: 0, qWidth: 10, qHeight: 1000,
    }],
    qInterColumnSortOrder: [],
    qSuppressZero: true,
    qSuppressMissing: true,
  }
}

// CODE

(async () => {
  const app = await appPromise;
  app.myMixin()
  const data = await app.mGetData({ object: hypercube })
  console.log(data)
})()

在控制台中,您会发现那里还有两个日志。第一个是刚刚创建的会话对象(并且您可能太熟悉了)。 第二个是在JavaScript数组中请求的数据。它仍然处于Qlik格式中,如果您只想查看数据,可能需要进行更多清理,但是请注意,现在可以轻松地为您可能编写的任何超立方体请求数据。现在可以避免不得不一遍又一遍地编写所有代码的步骤,而只需使用我们新的`mGetData()`方法。


关于Qlik

Qlik的愿景是一个数据素养的世界,每个人都可以使用数据来改善决策并解决他们最具挑战性的问题。只有Qlik提供端到端的实时数据集成和分析解决方案,以帮助组织访问所有数据并将其转化为价值。Qlik帮助企业领导数据,以更深入地了解客户行为,重塑业务流程,发现新的收入流以及平衡风险和回报。

想要了解更多有关Qlik的资讯,欢迎咨询在线客服>>