<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>qext-scripts - Qlik Sense - Обучение, учебник, онлайн курс</title>
	<atom:link href="https://qliksense.ivan-shamaev.ru/tag/qext-scripts/feed/" rel="self" type="application/rss+xml" />
	<link>https://qliksense.ivan-shamaev.ru/tag/qext-scripts/</link>
	<description>Qlik Sense на русском языке. Пошаговые уроки для изучения Клик Сенс</description>
	<lastBuildDate>Fri, 11 Feb 2022 20:27:26 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.1</generator>

<image>
	<url>https://qliksense.ivan-shamaev.ru/wp-content/uploads/2018/07/QlikSense_ICON2-150x150.png</url>
	<title>qext-scripts - Qlik Sense - Обучение, учебник, онлайн курс</title>
	<link>https://qliksense.ivan-shamaev.ru/tag/qext-scripts/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>qExt v2.0 &#8211; Extension Development Environment (Qlik Sense)</title>
		<link>https://qliksense.ivan-shamaev.ru/qext-extension-development-environment/</link>
					<comments>https://qliksense.ivan-shamaev.ru/qext-extension-development-environment/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Fri, 11 Feb 2022 19:38:31 +0000</pubDate>
				<category><![CDATA[Уровень 2]]></category>
		<category><![CDATA[Extension Development Environment]]></category>
		<category><![CDATA[qext]]></category>
		<category><![CDATA[qExt v2.0]]></category>
		<category><![CDATA[qext-scripts]]></category>
		<category><![CDATA[Qlik Sense Extension]]></category>
		<category><![CDATA[Qlik Sense Extensions]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=2672</guid>

					<description><![CDATA[<p>qExt v2.0 Tutorial qExt — это инструмент, помогающий автоматизировать создание и развертывание расширений визуализации Qlik Sense. Он может настроить вас на стандартные среды разработки расширений и более простой метод импорта скомпилированного кода на ваш сервер Qlik, чтобы вам не приходилось каждый раз вручную удалять и импортировать расширение. Посмотреть проект на GitHub Qlik<a class="moretag" href="https://qliksense.ivan-shamaev.ru/qext-extension-development-environment/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/qext-extension-development-environment/">qExt v2.0 &#8211; Extension Development Environment (Qlik Sense)</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>qExt v2.0 Tutorial</h1>
<p><span>qExt — это инструмент, помогающий автоматизировать создание и развертывание расширений визуализации Qlik Sense. Он может настроить вас на стандартные среды разработки расширений и более простой метод импорта скомпилированного кода на ваш сервер Qlik, чтобы вам не приходилось каждый раз вручную удалять и импортировать расширение.</span></p>
<p><span>Посмотреть </span><a href="https://github.com/axisgroup/qExt" target="_blank" rel="noopener"><span>проект на GitHub</span></a></p>
<h1>Qlik Sense Extensions &#8211; Расширения Qlik Sense</h1>
<h2>Анатомия Qlik Extension</h2>
<p><span>Расширения Qlik Sense позволяют создавать собственные объекты визуализации и функциональные объекты в приложении Qlik Sense. Расширения обычно используются для расширения возможностей визуализации Qlik для пользователей, использующих приложения Qlik в режиме самообслуживания. Дополнительные сведения об объектах расширения qlik sense можно найти на сайте Qlik </span><a href="https://help.qlik.com/en-US/sense-developer/April2020/Content/Sense_Helpsites/extend-qlik-sense.htm" target="_blank" rel="noopener"><span>здесь .</span></a></p>
<p><span>все файлы расширения должны храниться в одной папке проекта и, как минимум, должны включать </span><a href="https://opensrc.axisgroup.com/qext/qlik-extensions/anatomy.html#qext-file"><span>файл qext</span></a><span> и основной </span><a href="https://opensrc.axisgroup.com/qext/qlik-extensions/anatomy.html#script-file"><span>файл сценария</span></a>.</p>
<h3 id="qext-file"><span>файл qext</span></h3>
<p><span>файл qext в проекте расширения содержит объект json, который определяет метаданные объекта расширения. Имя файла — это уникальное имя, которое Qlik будет использовать для идентификации расширения, и оно должно совпадать с именем файла сценария.</span></p>
<p><span>как минимум, файл qext должен включать свойства имени и типа. (полные свойства qext можно найти </span><a href="https://help.qlik.com/en-US/sense-developer/April2020/Subsystems/Extensions/Content/Sense_Extensions/Overview/qext-file-overview.htm" target="_blank" rel="noopener"><span>здесь</span></a><span> )</span></p>
<p><span>пример файла qext:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">// hello-world.qext
{
    "name": "Hello World",
    "description": "Hello world example",
    "type": "visualization",
    "version": "1.0.0",
    "author": "john bellizzi"
}</pre>
<h3 id="script-file">Script File</h3>
<p><span>файл сценария в проекте расширения — это файл javascript, содержащий всю логику работы вашего расширения. он определяет, как данные поступают в объект, что отображается в объекте, свойства, которые можно установить для объекта, и многое другое. имя файла должно соответствовать вашему файлу qext</span></p>
<p><span>существует множество параметров конфигурации файла скрипта, и большинство из них можно найти в руководстве </span><a href="https://help.qlik.com/en-US/sense-developer/April2020/Subsystems/Extensions/Content/Sense_Extensions/extensions-introduction.htm" target="_blank" rel="noopener"><span>здесь</span></a><span> . базовый сценарий использует функцию определения для загрузки любых необходимых ресурсов и возвращает объект javascript, содержащий функции, которые контролируют данные, проходящие через расширение.</span></p>
<p><span>наиболее распространенным методом, используемым в расширении, является </span><code>paint</code><span>метод, который запускается каждый раз, когда происходит изменение состояния приложения или изменение размера, чтобы мы могли отображать обновления в контейнере объекта расширения. </span></p>
<p><span>Вот пример файла скрипта</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">define(["jquery"], function($) {
    return {
        paint: function($element, layout) {
            var $helloWorld = $(document.createElement("div"))
            $helloWorld.html('Hello World from the extension "SimpleHelloWorld"&lt;br/&gt;')
            $element.append($helloWorld)

            // layout contains the properties and calculated data of our object
            console.log(layout)
        },
    }
})</pre>
<h3>Deployment (Развертывание)</h3>
<p><span>при развертывании расширения на сервере qlik правильным методом является сжатие всего каталога расширения в zip-файл, а затем переход к разделу расширений qmc и импорт заархивированного файла расширения. если расширение с таким именем уже развернуто, его необходимо предварительно удалить с сервера с помощью кнопки удаления в разделе расширений qmc</span></p>
<p><span>в qlik sense desktop проект расширения просто необходимо поместить в папку </span><code>C:\Users\[UserName]\Documents\Qlik\Sense\Extensions\</code><span>. любые изменения в файлах расширения будут отражены в расширении при перезагрузке страницы приложения.</span></p>
<p><span>ознакомьтесь со </span><a href="https://opensrc.axisgroup.com/qext/qlik-extensions/why-qext.html"><span>следующим разделом</span></a><span> , чтобы узнать, как qExt помогает в настройке этих проектов и автоматизации развертывания.</span></p>
<h2>Для чего нужно qExt?</h2>
<p><span>Библиотека qExt была создана по трем основным причинам.</span></p>
<ol>
<li><span>обеспечить лучшую поддержку для компиляции </span><strong><span>javascript следующего поколения</span></strong><span></span></li>
<li><span>упростить процесс </span><strong><span>развертывания</span></strong><span> расширений в средах qlik sense</span></li>
<li><span>сделать инициализацию новых проектов расширений более воспроизводимой с помощью </span><strong><span>стандартных шаблонов кода</span></strong></li>
</ol>
<h3 id="next-gen-javascript"><span>JavaScript следующего поколения</span></h3>
<p><span>скрипт, который вы видели на предыдущей странице (и javascript, который вы увидите во многих расширениях qlik), написан на ванильном javascript, который обычно можно использовать в большинстве современных веб-браузеров. это отличное начало для многих, кто начинает знакомиться с javascript, но многие разработчики хотят использовать более новые версии и возможности javascript, включая импорт модулей, функции стрелок и многое другое.</span></p>
<p><span>существует множество инструментов, помогающих преобразовывать новый код javascript в обратно совместимые форматы. qExt использует babel в координации с webpack для компиляции всего кода в формат, который может использоваться современными браузерами.</span></p>
<h3 id="streamline-deployment"><span>Оптимизация развертывания</span></h3>
<p><span>в последнем разделе упоминался процесс развертывания расширений в наших средах qlik. если вы выполняете серьезную работу по разработке проекта, ручное решение по удалению и повторному импорту кода проекта каждый раз, когда вносятся изменения, вероятно, не подходит. именно поэтому мы встроили интеграцию развертывания в qExt. инструмент может установить прямое соединение с вашим сервером qlik и автоматически удалить старое расширение и развернуть обновленное за считанные секунды с помощью API qrs</span></p>
<h3 id="templates"><span>Шаблоны</span></h3>
<p><span>в примере кода с предыдущей страницы использовался только один из многих методов, доступных в расширениях qlik. обычно при разработке расширений мы используем другие объекты и методы, такие как initialProperties, шаблон, контроллер и другие, чтобы полностью использовать настройки наших расширений. мы обнаружили, что многие из них довольно часто используются в проектах, и вместо того, чтобы переопределять их каждый раз, когда мы создаем новое расширение, мы определили их в шаблонных проектах, которые можно использовать для создания новых проектов расширений из</span></p>
<h1>Введение в qExt Packages (Пакеты qExt)</h1>
<p><span>библиотека qExt на самом деле состоит из двух разных пакетов, которые помогают нам в разработке расширений.</span></p>
<ol>
<li><span>qext-scripts — инструмент, который запускается в нашей среде разработки расширений для компиляции кода и развертывания его в средах qlik sense.</span></li>
<li><span>qext — инструмент cli, который позволяет нам создать новый проект расширения с определенным шаблоном.</span></li>
</ol>
<h2 id="qext-scripts"><span>qext-скрипты</span></h2>
<p><span>если мы оглянемся назад на 3 проблемы, которые qExt решает в </span><a href="https://opensrc.axisgroup.com/qext/qlik-extensions/why-qext.html"><span>разделе почему qExt</span></a><span> , qext-скрипты в основном помогают нам решить первые 2 проблемы. он поддерживает разработку javascript следующего поколения, компилируя наш код в обратно совместимый формат, и упрощает процесс развертывания, автоматически архивируя скомпилированный код и отправляя его в среды, которые нам нужно обновить.</span></p>
<p><span>если у вас уже настроена среда разработки расширений, вы можете легко включить в нее qext-скрипты, установив ее из npm в свой проект расширения.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">$ npm install --save-dev qext-scripts</pre>
<h2 id="qext"><span>qext</span></h2>
<p><span>библиотека qext помогает нам решить третью проблему, которую мы задали в вопросе, почему именно qExt, реализуя шаблоны шаблонного кода. это в первую очередь интерфейс командной строки, который мы можем запускать глобально для создания проекта с указанным шаблоном каталога. он также автоматически установит зависимость qext-scripts</span></p>
<p><span>qext лучше всего устанавливать глобально, чтобы проекты можно было настраивать, откуда бы вы его ни вызывали.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">$ npm install -g qext</pre>
<p>&nbsp;</p>
<h1>Использование</h1>
<h2>Быстрый старт</h2>
<p>прочитайте это, чтобы быстро установить инструменты qext и настроить новый проект</p>
<h3 id="install-qext"><span>Установить QExt</span></h3>
<p><span>установить основной инструмент qext глобально</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">npm install -g qext</pre>
<h3>Создать новое расширение</h3>
<p><span>откройте окно терминала, в котором вы хотите разместить свой проект, и используйте инструмент qext cli для создания и установки нового проекта расширения.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">qext --create-extension my-extension --install
cd my-extension</pre>
<p><em><span>по умолчанию qext установит </span><a href="https://opensrc.axisgroup.com/qext/templates/starter.html"><code>starter</code></a><span>шаблон проекта. другие шаблоны могут быть переданы через флаг шаблона. доступные шаблоны можно найти </span><a href="https://opensrc.axisgroup.com/qext/templates/"><span>здесь</span></a></em></p>
<h3>Build extension (сборка экстеншена)</h3>
<p><span>обновите исходные файлы расширения по мере необходимости, затем запустите</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">npm run build</pre>
<p><span>проект расширения будет скомпилирован и заархивирован в выходной каталог</span></p>
<h3>Просмотр экстеншена</h3>
<p><span>запустите команду qext watch</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">npm run watch</pre>
<p><span>любые изменения, которые вы делаете и сохраняете в своих исходных файлах, будут автоматически перестроены в ваш выходной каталог.</span></p>
<h3>Deploy extension</h3>
<p><span>добавьте следующую конфигурацию развертывания в файл qext.config.json</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">{
    ...,
    "serverDeploy": {
        "host": "hostname",
        "isSecure": true,
        "windowsAuth": true
    }
}</pre>
<p>затем запустите</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">npm run deploy</pre>
<p><span>окно терминала запросит ваши учетные данные. предоставить учетные данные для пользователя с доступом на запись к расширениям qlik sense, и новое расширение будет развернуто на сервере</span></p>
<p><em><span>конфигурация serverDeploy может потребовать другие параметры в зависимости от конфигурации сервера. проверьте </span><a href="https://opensrc.axisgroup.com/qext/configuration/qext-config-json.html"><span>qExt config</span></a><span> для полных настроек конфигурации</span></em></p>
<p><span>в качестве альтернативы вы можете аутентифицироваться с использованием аутентификации заголовка. проверить использование раздела </span><a href="https://opensrc.axisgroup.com/qext/usage/header-auth.html"><span>аутентификации заголовка для получения дополнительной информации</span></a></p>
<h1>Templates (Шаблоны)</h1>
<p><span>Шаблоны позволяют вам устанавливать предварительно определенные каталоги проектов и настройки при использовании инструмента qext cli. имя используемого шаблона может быть передано через </span><code>-t, --template [type]</code><span>флаг. ниже приведены шаблоны, которые вы можете выбрать</span></p>
<ul>
<li><a href="https://opensrc.axisgroup.com/qext/templates/vanilla-base.html"><span>vanilla-base</span></a><span> — самый простой проект, настроенный для проектов, которые будут написаны с использованием vanilla javascript.</span></li>
<li><a href="https://opensrc.axisgroup.com/qext/templates/base.html"><span>base</span></a><span> — базовый каталог проекта, который устанавливает минимальные исходные файлы, которые будут скомпилированы с использованием webpack и babel.</span></li>
<li><a href="https://opensrc.axisgroup.com/qext/templates/starter.html"><span>starter</span></a><span> — начальный шаблон, включая общие методы расширения и файлы конфигурации</span></li>
</ul>
<h2>Vanilla base</h2>
<p><span>базовый шаблон vanilla — это самый простой шаблон, с которого вы можете начать, используя qExt.</span></p>
<h3 id="project-directory"><span>Каталог проекта</span></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">├── src
│ ├── qext-template.qext
│ ├── qext-template.js
├── static
├── package.json
├── qext.config.json</pre>
<h3><span>каталог src</span></h3>
<p><span>исходный каталог имеет 2 исходных файла </span><code>qext-template.qext</code><span>и </span><code>qext-template.js</code><span>. эти файлы следует переименовать в имя расширения, поскольку оно должно храниться в Qlik Sense (имя, которое вы видите при просмотре расширений в QMC).</span></p>
<h3 id="qextconfigjson"><span>qext.config.json</span></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">{
    "extension": "qext-template",
    "output": "./dist",
    "vanilla": {
        "entry": "./src",
        "static": "./static"
    }
}</pre>
<p><span>файл конфигурации qext настроен с именем расширения, установленным на qext-template, и для сборки в ванильном режиме. </span><span>когда проект построен, файлы будут скопированы из исходного кода в выходной каталог как есть</span></p>
<h2>Base</h2>
<p><span>базовый шаблон — это базовый шаблон, используемый для компиляции исходного кода расширения с помощью babel и webpack.</span></p>
<h2 id="project-directory"><span>Каталог проекта</span></h2>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">├── src
│ ├── index.qext
│ ├── index.js
├── static
├── package.json
├── qext.config.json</pre>
<h3 id="src-directory"><span>каталог src</span></h3>
<p><span>исходный каталог имеет 2 исходных файла, </span><code>index.qext</code><span>и</span><code>index.js</code></p>
<h3 id="qextconfigjson"><span>qext.config.json</span></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">{
    "extension": "qext-template",
    "output": "./dist",
    "compile": {
        "entry": "./src/index.js",
        "qext": "./src/index.qext",
        "static": "./static"
    }
}</pre>
<p><span>файл конфигурации qext настроен с именем расширения, установленным на qext-template, и для сборки в режиме компиляции. </span><span>когда проект будет построен, webpack скомпилирует файлы через файл compile.entry и поместит скомпилированные файлы в выходной каталог. </span><span>он также скопирует файл qext в выходной каталог</span></p>
<h2>Starter</h2>
<p><span>начальный шаблон устанавливает каталог вашего проекта с часто используемыми методами расширения</span></p>
<h3 id="project-directory"><span>Каталог проекта</span></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">├── src
│ ├── index.qext
│ ├── index.js
│ ├── style.css
│ ├── methods
│ │ ├── controller.js
│ │ ├── definition.js
│ │ ├── index.js
│ │ ├── initial-properties.js
│ │ ├── paint.js
│ │ ├── resize.js
│ │ ├── template.html
├── static
├── package.json
├── qext.config.json</pre>
<h3 id="qextconfigjson"><span>qext.config.json</span></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">{
    "extension": "qext-template",
    "output": "./dist",
    "compile": {
        "entry": "./src/index.js",
        "qext": "./src/index.qext",
        "static": "./static"
    }
}</pre>
<p><span>файл конфигурации qext настроен с именем расширения, установленным на qext-template, и для сборки в режиме компиляции. </span><span>когда проект будет построен, webpack скомпилирует файлы через файл compile.entry и поместит скомпилированные файлы в выходной каталог. </span><span>он также скопирует файл qext в выходной каталог</span></p>
<h3>src/index.qext</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">{
    "type": "visualization",
    "name": "qExt Template"
}</pre>
<p><span>это метаданные расширения. свойство name должно быть обновлено до имени, которое видит конечный пользователь на панели объектов расширения приложения qlik. файл будет переименован в </span><code>extension</code><span>значение свойства в</span><code>qext.config.json</code></p>
<h3>src/index.js</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">import { initialProperties, template, definition, controller, paint, resize } from "./methods"
import "./style.css"

window.define([], function() {
    return {
        initialProperties,
        template,
        definition,
        controller,
        paint,
        resize,
    }
})</pre>
<h3>src/style.css</h3>
<p><span>это файл css, используемый для определения любых стилей для нашего объекта расширения. обратите внимание, что все классы должны быть предварительно выбраны с именем класса объекта расширения, которое будет в формате</span><extension-name><span>-qv-объект. например, если вы хотите установить цвет фона элемента с классом </span><code>container</code><span>в вашем объекте расширения, а имя вашего расширения — </span><code>my-extension</code><span>, ваш css должен выглядеть так:</span></extension-name></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">.my-extension-qv-object .container {
    background-color: lightblue;
}</pre>
<h3>src/methods/initial-properties.js</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">export default {
    qHyperCubeDef: {
        qDimensions: [],
        qMeasures: [],
        qInitialDataFetch: [],
    },
}</pre>
<p><span>Initial-properties определяет определение свойств объекта при его первом создании пользователем qlik sense. </span><span>шаблон устанавливает свойства с помощью HyperCubeDef, но это можно изменить на другие определения qlik, такие как ListObjectDef, или пользовательские свойства</span></p>
<h3>src/methods/definition.js</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">export default {
    type: "items",
    component: "accordion",
    items: {
        settings: {
            uses: "settings",
        },
    },
}</pre>
<p><span>объект определения определяет конфигурацию панели свойств расширения. это основной способ, с помощью которого пользователь, добавляющий расширение на лист qlik, может настраивать и изменять параметры расширения, включая измерения, показатели, цвета и т. д.</span></p>
<p><span>больше о том, как настроить объект определения, можно найти </span><a href="https://help.qlik.com/en-US/sense-developer/April2020/Subsystems/Extensions/Content/Sense_Extensions/extensions-build-properties-panel.htm" target="_blank" rel="noopener"><span>здесь</span></a></p>
<h3>src/methods/paint.js</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">export default function($element, layout) {
    // ..paint code here
}</pre>
<p><span>функция рисования запускается каждый раз, когда происходит обновление макета нашего объекта расширения. это может быть вызвано изменением состояния выбора приложения qlik sense, а также изменением размера окна. это позволяет «перекрашивать» наше расширение при изменении, чтобы отображаемый вывод отображал самую последнюю версию данных, передаваемых в расширение. </span><code>$element</code><span>содержит ссылку элемента dom на объект расширения, который можно использовать для управления тем, что отображается в dom расширения, а layout содержит рассчитанный макет объекта расширения, включая любые выходные данные гиперкуба и настройки свойств.</span></p>
<h3>src/methods/resize.js</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">export default function($element, layout) {
    // ..resize code here
}</pre>
<p><span>методы изменения размера дают нам более точный контроль над тем, как наше расширение перерисовывается во время различных типов обновлений. в случаях, когда обновления, необходимые для изменения выбора и изменения размера, отличаются, мы можем разделить изменение размера на функцию метода изменения размера. важно отметить, что если возвращается метод изменения размера, в нашем </span><code>src/index.js</code><span>файле краска не будет запускаться при изменении размера окна.</span></p>
<h3>src/methods/template.html</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">&lt;div class="chart-container"&gt;qExt Template&lt;/div&gt;</pre>
<p><span>файл шаблона определяет исходный html, который отображается в нашем расширении. этот html можно увидеть в </span><code>$element</code><span>dom, который передается функциям рисования и изменения размера.</span></p>
<h3>src/methods/controller.js</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">export default [
    "$scope",
    "$element",
    function($scope, $element) {
        // ..controller code here
    },
]</pre>
<p><span>функция контроллера запускается при инициализации расширения. </span><span>это может быть полезно для настройки начальной конфигурации и потоков для расширения, когда оно инициализируется на экране.</span></p>
<h3>src/methods/index.js</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">export { default as initialProperties } from "./initial-properties"
export { default as template } from "./template.html"
export { default as definition } from "./definition"
export { default as controller } from "./controller"
export { default as paint } from "./paint"
export { default as resize } from "./resize"</pre>
<p><span>этот файл экспортирует все модули из </span><code>methods</code><span>каталога</span></p>
<h1>Configuration</h1>
<h2>CLI Flags (<span>Флаги командной строки)</span></h2>
<table style="border-style: solid; border-color: #474747; width: 100%; height: 175px;">
<thead>
<tr style="height: 27px;">
<th style="height: 27px; width: 43.3333%;"><strong>Flag</strong></th>
<th style="height: 27px; width: 35.7333%;"><strong>Description</strong></th>
<th style="height: 27px; width: 10.9333%;"><strong>Required</strong></th>
<th style="height: 27px; width: 9.46667%;"><strong>Default</strong></th>
</tr>
</thead>
<tbody>
<tr style="height: 60px;">
<td style="height: 60px; width: 43.3333%;"><code>-c, --create-extension &lt;name&gt;</code></td>
<td style="height: 60px; width: 35.7333%;">name of extension</td>
<td style="height: 60px; width: 10.9333%;">Yes</td>
<td style="height: 60px; width: 9.46667%;">N/A</td>
</tr>
<tr style="height: 30px;">
<td style="height: 30px; width: 43.3333%;"><code>-t, --template [type]</code></td>
<td style="height: 30px; width: 35.7333%;">name template</td>
<td style="height: 30px; width: 10.9333%;">No</td>
<td style="height: 30px; width: 9.46667%;">starter</td>
</tr>
<tr style="height: 58px;">
<td style="height: 58px; width: 43.3333%;"><code>-i, --install</code></td>
<td style="height: 58px; width: 35.7333%;">if provided, will install qext-scripts</td>
<td style="height: 58px; width: 10.9333%;">No</td>
<td style="height: 58px; width: 9.46667%;">N/A</td>
</tr>
</tbody>
</table>
<h2>qext Config</h2>
<table>
<thead>
<tr>
<th>property</th>
<th>description</th>
<th>type</th>
<th>required</th>
</tr>
</thead>
<tbody>
<tr>
<td>extension</td>
<td>name of extension object</td>
<td>string</td>
<td>yes</td>
</tr>
<tr>
<td>output</td>
<td>directory where output files will be placed</td>
<td>string</td>
<td>yes</td>
</tr>
<tr>
<td>vanilla</td>
<td>configuration of vanilla settings in running in vanilla mode</td>
<td><a href="https://opensrc.axisgroup.com/qext/configuration/qext-config-json.html#vanilla">vanilla</a></td>
<td>yes if compile not defined</td>
</tr>
<tr>
<td>compile</td>
<td>configuration of compile settings in running in compile mode</td>
<td><a href="https://opensrc.axisgroup.com/qext/configuration/qext-config-json.html#compile">compile</a></td>
<td>yes if vanilla not defined</td>
</tr>
<tr>
<td>serverDeploy</td>
<td>configuration of server deployment settings if deploying to server</td>
<td><a href="https://opensrc.axisgroup.com/qext/configuration/qext-config-json.html#serverdeploy">serverDeploy</a></td>
<td>no</td>
</tr>
<tr>
<td>desktopDeploy</td>
<td>configuration of desktop deployment settings if deploying to desktop environment</td>
<td><a href="https://opensrc.axisgroup.com/qext/configuration/qext-config-json.html#desktopdeploy">desktopDeploy</a></td>
<td>no</td>
</tr>
</tbody>
</table>
<h3 id="vanilla">vanilla</h3>
<table>
<thead>
<tr>
<th>property</th>
<th>description</th>
<th>type</th>
<th>required</th>
</tr>
</thead>
<tbody>
<tr>
<td>entry</td>
<td>source directory path to be copied into output</td>
<td>string</td>
<td>yes</td>
</tr>
<tr>
<td>static</td>
<td>static directory path to be copied into output</td>
<td>string</td>
<td>no</td>
</tr>
</tbody>
</table>
<h3 id="compile">compile</h3>
<table>
<thead>
<tr>
<th>property</th>
<th>description</th>
<th>type</th>
<th>required</th>
</tr>
</thead>
<tbody>
<tr>
<td>entry</td>
<td>entry file path to build project from</td>
<td>string</td>
<td>yes</td>
</tr>
<tr>
<td>qext</td>
<td>qext file path to be copied into output directory</td>
<td>string</td>
<td>yes</td>
</tr>
<tr>
<td>static</td>
<td>static directory path to be copied into output</td>
<td>string</td>
<td>no</td>
</tr>
<tr>
<td>webpackComments</td>
<td>set to false to hide webpack compile comments when building</td>
<td>bool</td>
<td>no</td>
</tr>
<tr>
<td>altWebpackConfig</td>
<td>path to alternate webpack.config.js file that should override the default webpack config definition</td>
<td>string</td>
<td>no</td>
</tr>
</tbody>
</table>
<h3 id="serverdeploy">serverDeploy</h3>
<table>
<thead>
<tr>
<th>property</th>
<th>description</th>
<th>type</th>
<th>required</th>
</tr>
</thead>
<tbody>
<tr>
<td>host</td>
<td>host name of qlik server</td>
<td>string</td>
<td>yes</td>
</tr>
<tr>
<td>port</td>
<td>port over which to access qlik server</td>
<td>number</td>
<td>no</td>
</tr>
<tr>
<td>prefix</td>
<td>prefix endpoint where resources are deployed. typically used with header authentication</td>
<td>string</td>
<td>no</td>
</tr>
<tr>
<td>isSecure</td>
<td>whether endpoint should be connected to over ssl</td>
<td>bool</td>
<td>no</td>
</tr>
<tr>
<td>allowSelfSignedSignature</td>
<td>allow connection to qlik server that has a self-signed certificate</td>
<td>bool</td>
<td>no</td>
</tr>
<tr>
<td>hdrAuthUser</td>
<td>name of user as defined in the header authentication virtual proxy</td>
<td>string</td>
<td>no</td>
</tr>
<tr>
<td>hdrAuthHeaderName</td>
<td>name of auth header property as defined in virtual proxy</td>
<td>string</td>
<td>no</td>
</tr>
<tr>
<td>windowsAuth</td>
<td>set to true to use windows authentication to deploy extension</td>
<td>bool</td>
<td>no</td>
</tr>
<tr>
<td>user</td>
<td>username associated with windowsAuth. if defined here, you will not be prompted for credentials in the terminal</td>
<td>string</td>
<td>no</td>
</tr>
<tr>
<td>password</td>
<td>password associated with windowsAuth. if defined here, you will not be prompted for credentials in the terminal</td>
<td>string</td>
<td>no</td>
</tr>
</tbody>
</table>
<h3 id="desktopdeploy">desktopDeploy</h3>
<table>
<thead>
<tr>
<th>property</th>
<th>description</th>
<th>type</th>
<th>required</th>
</tr>
</thead>
<tbody>
<tr>
<td>destination</td>
<td>destination of built extension files.</td>
<td>string</td>
<td>yes</td>
</tr>
</tbody>
</table>
<h1>Использованные источники</h1>
<ol>
<li><a href="https://opensrc.axisgroup.com/qext/" target="_blank" rel="noopener">https://opensrc.axisgroup.com/qext/</a></li>
<li><a href="https://medium.com/@jbellizzi/new-qext-277121a59b93" target="_blank" rel="noopener">https://medium.com/@jbellizzi/new-qext-277121a59b93</a></li>
<li><a href="https://github.com/axisgroup/qExt" target="_blank" rel="noopener">https://github.com/axisgroup/qExt</a></li>
</ol>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/qext-extension-development-environment/">qExt v2.0 &#8211; Extension Development Environment (Qlik Sense)</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/qext-extension-development-environment/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
