Содержание урока по Qlik Sense

Введение в Qlik Sense API. Руководство для разработчика

Engine JSON API

Qlik Engine JSON API представляет собой протокол WebSocket, который использует JSON для передачи информации между Qlik Sense Engine и клиентами. Qlik Engine JSON API состоит из набора объектов , представляющих приложения, списки и так далее. Эти объекты организованы в иерархическую структуру. Когда вы отправляете запросы в API, вы выполняете действия над этими объектами.

Qlik Engine JSON API может быть использован для:

  • создания приложений и загрузки данных
  • создания историй (data stories)
  • получение системной информации

Типичные ситуации, в которых вы бы использовали JSON API Qlik Engine:

  • создание специализированного клиента в качестве
  • автономного или веб-приложения
  • автоматизация повторяющихся или сложных
  • обновлений или изменений в приложениях

Extension API

API расширения (Extension API) состоит из методов и свойств, используемых для создания пользовательских расширений визуализации (custom visualization extensions).

Backend API

Backend API состоит из нескольких методов и используется для связи с ассоциативным механизмом Qlik. Он предоставляет вспомогательные функции для вызовов ассоциативного механизма Qlik и доступ к данным ассоциативного механизма Qlik. Вкратце, Backend API – это оболочка для выбранных методов Qlik Engine JSON API, но с той разницей, что Backend API знает о контексте, то есть текущем соединении WebSocket и приложении Qlik Sense.

Capability APIs

API-интерфейсы Capability представляют собой набор API-интерфейсов JavaScript, которые позволяют легко встраивать контент Qlik Sense в веб-страницу. С помощью всего лишь нескольких строк кода можно создать визуализацию, использующую библиотеку визуализации Qlik Sense.

API-интерфейсы Capability зависят от AngularJS и RequireJS, поэтому вам необходимо принять это во внимание при интеграции API-возможностей Capability в существующий проект, в котором также используются эти библиотеки.

Термин «API-интерфейс Capability» был введен в Qlik Sense 2.1. Некоторые из API-интерфейсов Capability были доступны до этой версии, опубликованной под названием Mashup API.

Capability API Namespace
Root API qlik
App API qlik.app
Bookmark API qlik.app.bookmark
Field API qlik.app.field
Selection API qlik.app.selectionState
Variable API qlik.app.variable
Visualization API qlik.app.visualization
Global API qlik.global
Navigation API qlik.navigation
Table API qlik.table
Theme API qlik.theme

Root API

Root API является внешним интерфейсом Qlik Sense и доступен в виде пространства имен qlik. Он предоставляет методы открытия приложений, получения ссылки на текущее приложение, установки определенного языка и регистрации обратных вызовов для обработки ошибок. Корневой API также содержит методы для перечисления доступных приложений и расширений, а также для регистрации расширений (extensions), которые вы создаете на лету (используя API визуализации – Visualization API).

App API

Метод qlik.openApp является точкой входа в API приложения и возвращает объекты JavaScript приложения с методами для работы с приложением Qlik Sense, к которому вы подключены.

Bookmark API

Bookmark API содержит методы для работы с закладками в приложении Qlik Sense, к которому вы подключены.

Field API

Метод qlik.app.field является точкой входа в Field API. Он возвращает объект QField с методами и свойствами, которые можно использовать для управления полем.

Global API

Метод qlik.global является точкой входа в Global API. Возвращает объект JavaScript с глобальными методами.

Navigation API

Navigation API (API навигации) позволяет вам перемещаться в приложении Qlik Sense и предназначен для использования в виджетах и ​​расширениях визуализации, и не будет работать в сценариях Mashup.

Selection API

Selection API является внешним интерфейсом для изменения выборки по модели данных Qlik Sense (фильтрация данных) и позволяет разработчикам работать с ассоциативной моделью.

Table API

Table API (API таблиц) позволяет разработчикам работать с табличными данными, возвращаемыми из ассоциативного механизма Qlik, не имея глубоких знаний о внутренних конструкциях, таких как, например, Гиперкуб (Hypercube).

Theme API

Theme API – это внешний интерфейс для тем Qlik Sense. Он позволяет настраивать визуализации, включая расширения и виджеты, вне Qlik Sense.

Variable API

Variable API – это внешний интерфейс для управления переменными Qlik Sense.

Visualization API

Visualization API (API визуализации) – это внешний интерфейс для визуализаций Qlik Sense. Вы можете создавать новые визуализации на лету на основе объекта сессии. Эти визуализации не сохраняются в приложении. Вы также можете получить уже существующие визуализации из приложения, используя Visualization API.

Custom Component API

API для создания пользовательских компонентов (собственных компонентов).

Пользовательские компоненты содержат следующие элементы:

  • Файл определения (QEXT).
  • Основной файл JavaScript.
  • Дополнительные ресурсы, такие как библиотеки JavaScript, изображения и шрифты.

Пользовательские компоненты – это в основном директивы AngularJS. Цель файла JavaScript – вернуть подпись директивы AngularJS.

App Integration API

Используется для embedded аналитика, позволяет генерировать ссылки url для встраивания в iframe.

Single Integration API

Single Integration API позволяет создавать URL-адреса, который возвращает полную HTML-страницу, содержащую, например, встроенную визуализацию Qlik Sense . Этот URL-адрес можно встроить в веб-страницу, например, включив его в iframe.

qlik-visual web component

Qlik-Visual Web Component – это определение пользовательского элемента <qlik-visual>, которое использует API визуализации и представляет его как веб-компонент. Он позволяет создавать и изменять визуализации на лету, не используя клиент Qlik Sense.

Qlik Visual поддерживает:

  • Отображение существующей визуализации (путем определения видимости элемента) на веб-странице.
  • Создание визуализаций на лету с использованием существующего приложения путем внедрения их в веб-страницу.
  • Динамически изменяющие свойства и атрибуты визуализаций.

enigma.js

Библиотека enigma.js помогает вам общаться с ассоциативным механизмом Qlik в Qlik Sense и Qlik Sense Desktop. Вы можете использовать его для создания своего собственного клиента или для создания собственного сервиса Node.js. Примерами использования могут быть создание ваших собственных аналитических инструментов на основе браузера, серверных служб или сценариев командной строки.

Библиотека enigma.js может использоваться в качестве SDK или для выполнения операций CRUD (то есть создания, чтения, обновления и удаления) в приложениях и в сущностях приложений.

enigma.js – это библиотека, предназначенная исключительно для Engine API (websocket)Экспорт изображений / PDF-файлов – это API-интерфейсы REST в Qlik Sense для других служб (отчеты), которые предоставляются через интерфейс capability API:

Официальная документация Enigma.JS: https://github.com/qlik-oss/enigma.js

enigma-go

Библиотека enigma-go помогает вам общаться с ассоциативным механизмом Qlik в Qlik Sense и Qlik Sense Desktop. Примерами использования могут быть создание ваших собственных аналитических инструментов, серверных служб или других инструментов, взаимодействующих с ассоциативным механизмом Qlik. Библиотека enigma-go может использоваться в качестве SDK или для выполнения операций CRUD (то есть создания, чтения, обновления и удаления) в приложениях и в сущностях приложений.

leonardo-ui

leonardo-ui – это библиотека с открытым исходным кодом, которая используется в Qlik Sense и предоставляет множество графических компонентов пользовательского интерфейса. Разметка этих компонентов может использоваться в расширениях, гибридных приложениях и виджетах. Библиотека поддерживается и поддерживается Qlik. leonardo-ui можно использовать как с Qlik Sense, так и с Qlik Sense Desktop.

picasso.js

Библиотека диаграмм picasso.js оптимизирована для создания пользовательских, интерактивных и мощных визуализаций для платформы Qlik Sense Analytics.

nebula.js

nebula.js – это библиотека с открытым исходным кодом, разработанная на GitHub. nebula.js – это набор библиотек и API-интерфейсов JavaScript, не зависящих от продукта и инфраструктуры, который помогает разработчикам интегрировать визуализации и гибридные приложения поверх ассоциативного механизма Qlik в Qlik Sense Desktop , Qlik Sense Enterprise для Windows и SaaS-версиях Qlik Sense . Он предлагает разработчикам альтернативу capability APIs, которые исторически использовались для создания гибридных приложений.

Чтобы использовать nebula.js , вы должны быть знакомы с JavaScript, promises, websockets и библиотеками с открытым исходным кодом. Вам понадобится Node.js и доступ к ассоциативному движку Qlik . Также будет полезно знание таких концепций Qlik, как generic objects и гиперкубы.

Qlik Explorer для разработчиков

Qlik Explorer для разработчиков – это инструмент, созданный для упрощения процесса интеграции функциональности Qlik Sense в другие среды.

Qlik Explorer для разработчиков обеспечивает быстрый доступ к соответствующей информации из вашей среды Qlik Sense, что, например, позволяет легко интегрировать визуализации Qlik Sense в существующий веб-сайт.

Автоматическое обновление
Qlik Explorer для разработчиков автоматически обновляется при появлении новой версии.

Как подключить Qlik Explorer к Qlik Sense Desktop Hub

В настройках вбиваете http://localhost:4848/

После подключения отобразится список приложений со свойствами и методами. Profit 😉

Engine API Explorer в браузере

http://localhost:4848/dev-hub/engine-api-explorer

Скачать (DOCX, 661KB)

Подключение к API Qlik Engine

todo

Подключение к Qlik Sense API с помощью PowerShell

https://community.qlik.com/t5/Qlik-Sense-Integration/How-to-export-an-app-to-a-folder-using-API-and-Powershell/td-p/1608192

Qlik Sense python API client for QPS and QRS interfaces

https://developer.qlik.com/garden/570e73c36c8c33c066a0f11c

Пример подключения Python 3 к Qlik Sense Engine API

Для подключения и работы необходимо установить библиотеки:

pip3 install asyncio
pip3 install websocket-client
pip3 install requests_ntlm
pip3 install requests
pip3 install json

Дальше приведен скрипт подключения Python 3 к Qlik Sense Desktop:

from websocket import create_connection

import json

ws = create_connection("ws://localhost:4848/app/")

data=json.dumps({
    'jsonrpc': '2.0',
    'id': 2,
    'method': 'GetActiveDoc',
    'handle': 1,
    'params': ['C:\\Users\\User\\Documents\\Qlik\\Sense\\Apps\\Анализ продаж - простое приложение.qvf']
})

print("Sending req...")
ws.send(data)

print("Receiving...")
result = ws.recv()

print("Received '%s'" % result)

qclosed = ws.close()
print("Closed '%s'" % qclosed)

Результат работы скрипта:

>>> 
 RESTART: D:/QlikProject/Подключаемся к Qlik Sense из Python.py 
Sending req...
Receiving...
Received '{"jsonrpc":"2.0","method":"OnConnected","params":{"qSessionState":"SESSION_CREATED"}}'
Closed 'None'

Пример скрипта Python 3 для получения списка документов с hub Qlik Sense Desktop

from websocket import create_connection

import json

ws = create_connection("ws://localhost:4848/app/")

ws.send(json.dumps({
  "handle": -1,
  "method": "GetDocList",
  "params": [],
  "outKey": -1,
  "id": 1
}))

result = ws.recv()

while result:
    result=ws.recv()
    y = json.loads(result)
    print(y)

ws.close()

Список классов, свойств и методов https://betahelp.qlik.com/en-US/sense-developer/June2019/apis/EngineAPI/index.html

Подключаемся к Qlik Sense Engine API с помощью Node.JS

Рассматривается пример подключения к Qlik Sense Desktop

const WebSocket = require('ws');

const ws = new WebSocket('ws://localhost:4848/app/engineData');

var request = {
    "handle": -1,
    "method": "GetDocList",
    "params": {},
    "outKey": -1,
    "id": 2
}

ws.onopen = function(event){
    ws.send(JSON.stringify(request));
    
    ws.onmessage = function (event) {
        var response = JSON.parse(event.data);

        if(response.method != ' OnConnected'){
            
            var obj = response.result;
            str = JSON.stringify(obj, null, 4);
            console.log(str);

        }
   }
}

Получаем перечень приложений Qlik Sense Desktop с помощью Enigma JS

const enigma = require('enigma.js');
const WebSocket = require('ws');
const schema = require('enigma.js/schemas/12.20.0.json');

// create a new session:
const session = enigma.create({
  schema,
  url: 'ws://localhost:4848/app/engineData',
  createSocket: url => new WebSocket(url),
});

// bind traffic events to log what is sent and received on the socket:
session.on('traffic:sent', data => console.log('sent:', data));
session.on('traffic:received', data => console.log('received:', data));

// open the socket and eventually receive the QIX global API, and then close
// the session:
session.open()
    .then(function(global) {
        global.getDocList().then(function(docList) {
            for (i = 0; i < docList.length; i++) {
                var AppName = docList[i].qDocName;
                console.log('App list:',JSON.stringify(AppName));
            }

            session.close();
        })
    });

Получаем свойства документа Qlik Sense с помощью запроса Enigma.JS через QS API Engine

const enigma = require('enigma.js');
const WebSocket = require('ws');
const schema = require('enigma.js/schemas/12.20.0.json');

// create a new session:
const session = enigma.create({
  schema,
  url: 'ws://localhost:4848/app/engineData',
  createSocket: url => new WebSocket(url),
});

// bind traffic events to log what is sent and received on the socket:
session.on('traffic:sent', data => console.log('sent:', data));
session.on('traffic:received', data => console.log('received:', data));

// open the socket and eventually receive the QIX global API, and then close
// the session:
session.open()
    .then(function(global) {
        global.getDocList().then(docs=>{
            global.openDoc("Анализ продаж - простое приложение.qvf").then(doc=>{
                doc.getAppProperties().then(appProp => {
                    console.log(doc)
                    console.log(appProp)
                })
            })
        })
    })

Пример получения списка полей в Qlik Sense API Engine, с помощью Enigma.JS

Пример актуален для Qlik Sense Desktop

const enigma = require('enigma.js');
const WebSocket = require('ws');
const schema = require('enigma.js/schemas/12.20.0.json');

// Создаем новую сессию:
const session = enigma.create({
  schema,
  url: 'ws://localhost:4848/app/engineData',
  createSocket: url => new WebSocket(url),
});

// Привязываем traffic events к log (что отправлено и что получено socket)
session.on('traffic:sent', data => console.log('sent:', data));
session.on('traffic:received', data => console.log('received:', data));

var config = { 
    schema: schema,
    docId: "Анализ продаж - простое приложение.qvf"
}

// Открываем сессию
session.open()
    .then(function(global) {

        global.openDoc(config.docId).then(function(doc){
            //Создаем SessionObject для FieldList
            doc.createSessionObject( {
                qFieldListDef: {
                    qShowSystem: false,
                    qShowHidden: false,
                    qShowSrcTables: true,
                    qShowSemantic: true,
                    qShowDerivedFields: true
                }, 
                qInfo: {
                    qId: "FieldList",
                    qType: "FieldList"
                }
            } ).then( function(list) {
                return list.getLayout();
                } ).then( function(listLayout) {
                    return listLayout.qFieldList.qItems;
                    } ).then( function(fieldItems) {
                        console.log(fieldItems)
                        } );
        })
    });

Пример javascript скрипта выгрузки / экспорта данных из QS, используя Enigma.JS

В результате выполнения JS-скрипта Вы получите qURL:

qUrl:”/Exports/1b2f8662-570b-4f77-b37b-94a4a347fe91\FileName(6bb5e11a-427a-4e77-ac30-e49abf602c87).xlsx”

Код запроса exportData Enigma.JS Qlik Sense Table API:

const enigma = require('enigma.js');
const WebSocket = require('ws');
const schema = require('enigma.js/schemas/12.20.0.json');

// Создаем новую сессию:
const session = enigma.create({
  schema,
  url: 'ws://localhost:4848/app/engineData',
  createSocket: url => new WebSocket(url),
});

// Привязываем traffic events к log (что отправлено и что получено socket)
session.on('traffic:sent', data => console.log('sent:', data));
session.on('traffic:received', data => console.log('received:', data));

var config = { 
    schema: schema,
    docId: "Анализ продаж - простое приложение.qvf"
}

var exportOptions = {
    "qFileType": "OOXML",
    "qPath": "/qHyperCubeDef",
    "qFileName": "FileName",
    "qExportState": 1
}

// Открываем сессию
session.open()
    .then((global) => {
        console.log('We are connected!')
        global.openDoc(config.docId)
        .then(doc => {
            doc.getObject('XPbGUe')
            .then((api) => {
                api.exportData(exportOptions)
                .then((reply) => {
                    console.log(reply);
                });
            });
        });
    });

Пример javascript скрипта выгрузки / экспорта данных из Qlik Sense Enterprise, используя Enigma.JS

Данные выгружаем из прямой таблицы, в поле TargetFieldSelect выбираем значение NeededValueToSelect.

const enigma = require('enigma.js');
const WebSocket = require('ws');
const path = require('path');
const fs = require('fs');
const fetch = require('node-fetch');

const schema = require('enigma.js/schemas/12.20.0.json');
const { Console } = require('console');

// Your Sense Enterprise installation hostname:
const engineHost = 'qlik.company.com';

// Make sure the port below is accessible from the machine where this example
// is executed. If you changed the QIX Engine port in your installation, change this:
const enginePort = 4747;

// 'engineData' is a special "app id" that indicates you only want to use the global
// QIX interface or session apps, change this to an existing app guid if you intend
// to open that app:
const appId = 'engineData';

// The Sense Enterprise-configured user directory for the user you want to identify
// as:
const userDirectory = 'QLIKDEV';

// The user to use when creating the session:
const userId = 'username';

// Path to a local folder containing the Sense Enterprise exported certificates:
const certificatesPath = './';

// Helper function to read the contents of the certificate files:
const readCert = (filename) => fs.readFileSync(path.resolve(__dirname, certificatesPath, filename));

const session = enigma.create({
  schema,
  url: `wss://${engineHost}:${enginePort}/app/${appId}`,
  // Notice the non-standard second parameter here, this is how you pass in
  // additional configuration to the 'ws' npm library, if you use a different
  // library you may configure this differently:
  createSocket: (url) => new WebSocket(url, {
    ca: [readCert('root.pem')],
    key: readCert('client_key.pem'),
    cert: readCert('client.pem'),
    headers: {
      'X-Qlik-User': `UserDirectory=${encodeURIComponent(userDirectory)}; UserId=${encodeURIComponent(userId)}`,
    },
  }),
});


// Открываем сессию
session.open()
    .then((global) => {
        global.openDoc('03h5ed8-5gdfb-40a5-b733-41fc4beb718e')
        .then(doc => {
            doc.getField("TargetFieldSelect")
            .then((appField) => {
              appField.select('NeededValueToSelect',false,0)
              .then((selectResult) => {
                console.log(selectResult);

                doc.getObject('jwAJbyL')
                .then((objectTable) => {
                  objectTable.getHyperCubeData("/qHyperCubeDef", [{ qTop: 0, qWidth: 10, qLeft: 0, qHeight: 1000 }])
                  .then(function (data) {
                    let dataSTR = JSON.stringify(data[0].qMatrix);
                    fs.writeFileSync('DataOutput.json', dataSTR);

                    session.close();
                  })
                })   

                
              })
            })
            
        })
              
                


    });

_____

Описание архитектуры Qlik Engine API

Структура объектов

Схемка сделана “на глаз”, но вероятно так и работает.

API Component Overview

MindMap API Integration

Схема по-умолчанию для процесса authenticate (default flowchart)

 

YouTube Enigma.JS Qlik Sense API Development

Youtube Другие видео по Qlik Sense API

Полезные ссылки по Enigma.JS и Qlik Sense API

_____

5 1 голос
Рейтинг статьи

Подписаться
Уведомление о
guest
0 комментариев
Встроенная Обратная Связь
Просмотр всех комментариев
0
Оставьте, пожалуйста, комментарий!x