<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Sergey Belskiy Technical Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/sergey_belskiy_technical_blog/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/sergey_belskiy_technical_blog/feed.xml</link>
    <description>All about cloud technology</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:25:51 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>How to use docker containers with azure services for you solution</title>
      <link>https://docs.microsoft.com/archive/blogs/sergey_belskiy_technical_blog/how-to-use-docker-containers-for-you-solution</link>
      <pubDate>Tue, 26 Jun 2018 19:44:52 GMT</pubDate>
      <dc:creator><![CDATA[Sergii Bielskyi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sergey_belskiy_technical_blog/?p=1665</guid>
      <description><![CDATA[Presentation about how to use azure services to build solution with docker containers is here...]]></description>
      <content:encoded><![CDATA[Presentation about how to use azure services to build solution with docker containers is here - <a href="https://msdnshared.blob.core.windows.net/media/2018/06/ACS.pptx">ACS</a>

Configuration file to deploy group of containers instance you can download here - <a href="https://msdnshared.blob.core.windows.net/media/2018/06/deploy.json_.zip">deploy.json_</a>]]></content:encoded>
    </item>
    <item>
      <title>Case Study How to use Azure Container Registry</title>
      <link>https://docs.microsoft.com/archive/blogs/sergey_belskiy_technical_blog/case-study-how-to-use-azure-container-registry</link>
      <pubDate>Wed, 21 Feb 2018 10:00:22 GMT</pubDate>
      <dc:creator><![CDATA[Sergii Bielskyi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sergey_belskiy_technical_blog/?p=1605</guid>
      <description><![CDATA[Всем привет, начинаем блок видео по тому как работать с Azure сервисами в направлении IoT. Первое...]]></description>
      <content:encoded><![CDATA[Всем привет, начинаем блок видео по тому как работать с Azure сервисами в направлении IoT. Первое видео я показываю как использовать Azure Container Registry.

[embed]https://www.youtube.com/watch?v=gfcZW2S4CdE[/embed]]]></content:encoded>
    </item>
    <item>
      <title>How to use Azure Functions App for playing with SharePoint</title>
      <link>https://docs.microsoft.com/archive/blogs/sergey_belskiy_technical_blog/how-to-use-azure-functions-app-for-playing-with-sharepoint</link>
      <pubDate>Mon, 02 Oct 2017 13:37:08 GMT</pubDate>
      <dc:creator><![CDATA[Sergii Bielskyi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sergey_belskiy_technical_blog/?p=1475</guid>
      <description><![CDATA[Привет всем. Сегодня хочу поделиться с Вами информацией как можно использовать удобную вещь Azure...]]></description>
      <content:encoded><![CDATA[Привет всем. Сегодня хочу поделиться с Вами информацией как можно использовать удобную вещь Azure Function App в разрезе использования с SharePoint. Например, создать возможность работать с данными SharePoint через REST API. Можно сказать, зачем такое издевательство, можно просто поднять Web App и тулить туда все что необходимо, но есть маленькое но. Почитать можно здесь <a href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-compare-logic-apps-ms-flow-webjobs">https://docs.microsoft.com/en-us/azure/azure-functions/functions-compare-logic-apps-ms-flow-webjobs</a>. Самое важное как для меня, это использования ресурсов azure для выполнения и достижения целей, так как мы за это платим и хотим получить максимум. Вот в Azure Functions можно использовать ресурсы только тогда, когда это необходимо Вашему решению, а во время простоя, ничего не использовать.

В моем примере мы рассмотрим как создавать Azure Function App (HTTP trigger), создавать приложения для регистрации и авторизации в SharePoint Online и после подключения выполнять REST API запросы, используя JavaScript. И это все будет создаваться, тестироваться и публиковаться в Azure на макбуке + Visual Studio Code.

Для начала перед запуском всего, нам необходимо создать пул наших функций. Для этого заходим на портал Azure и создаем новый Azure Function App.

<img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-2.41.16-PM-533x1024.png" alt="" width="357" height="686" class="alignnone wp-image-1476" />

Обязательно обращаем внимание на параметр Hosting Plan. Выбираем Consumption Plan. Это дает нам возможность платить гибко и только за используемые ресурсы, а не за время простоя.

Следующим нашим ингридиентом будет регистрация AAD приложения для получения необходимых параметров во время авторизации в нашем SharePoint Online. Для этого заходим в раздел Azure Active Directory в раздел App registrations.

<img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-3.32.24-PM-1024x328.png" alt="" width="704" height="226" class="alignnone wp-image-1485" />

Создаем новое приложение.

<img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-3.35.35-PM.png" alt="" width="327" height="247" class="alignnone wp-image-1487" />

Далее открываем наше созданное приложение и нам необходимо скоппировать два параметра:
<ol>
 	<li><span>Application ID (его можно увидеть сразу в настройках приложения)</span></li>
 	<li>Secret Key (его необходимо создать в разделе Keys)</li>
</ol>
<img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-3.42.28-PM-1024x289.png" alt="" width="603" height="170" class="alignnone wp-image-1496" />

Значения ключа можно будет увидеть и скоппировать после сохранения.

Ну и в завершении необходимо предоставить права нашему решению к ресурсам. Для этого необходимо зайти в раздел разрешений и выбрать нужные права.

<img src="https://msdnshared.blob.core.windows.net/media/2017/10/perm.png" alt="" width="832" height="164" class="alignnone size-full wp-image-1526" />

<img src="https://msdnshared.blob.core.windows.net/media/2017/10/perm1.png" alt="" width="318" height="133" class="alignnone size-full wp-image-1535" />

И обязательно открыть манифест нашего приложения и изменить параметр oauth2AllowImplicitFlow в состояние true.

<img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-4.09.55-PM.png" alt="" width="473" height="160" class="alignnone wp-image-1545" />

Следующим этапом нам необходимо настроить Visual Studio Code для написания нужного скрипта. Для начала нам необходимо расширение для работы с Azure через Visual Studio Code. Для этого нам необходимо установить <a href="https://marketplace.visualstudio.com/items?itemName=bradygaster.azuretoolsforvscode">https://marketplace.visualstudio.com/items?itemName=bradygaster.azuretoolsforvscode</a>

<img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-3.49.26-PM-1024x362.png" alt="" width="602" height="213" class="alignnone wp-image-1505" />

После установки нажимаем команду <span>CTRL-Shift-P и пишем Azure: Login</span>

<img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-3.52.30-PM-1024x152.png" alt="" width="507" height="75" class="alignnone wp-image-1515" />

В предлагаемом сообщении коппируем код и нажимаем Sign In для ввода кода и авторизации Вас на портале Azure для дальнейшего использования ресурсов.

Следующим шагом нам необходимо установить дополнение для возможности создания шаблонных проектов в Visual Studio Code. <a href="https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/azure-functions/functions-run-local.md">https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/azure-functions/functions-run-local.md</a>

Хороший инструмент для работы. Для макбука выполняем команду
<pre>sudo npm install -g azure-functions-core-tools@core --unsafe-perm <span class="pl-c1">true</span></pre>
в терминале. После установки мы можем создавать проект по шаблону. Для этого подготовим папку в которую мы хотим разместить наше решение, открываем эту папку в Visual Studio Code и пишем комаду func init для инициализации и создания необходимых файлов. Далее пишем команду func new и предлагаемых вариантах выбираем язык разработки JavaScript и тип будушего нашего Azure Function.

<img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-4.00.05-PM-1024x253.png" alt="" width="616" height="152" class="alignnone wp-image-1525" />

Следующий шаг это создание собственно кода. Код наш будет использовать дополнительные модули, чтобы облегчить работу:
<div>
<blockquote>
<div style="text-align: left"><span>var</span><span> httpRequest </span><span>=</span><span> require(</span><span>'request'</span><span>); npm install request</span></div>
<div style="text-align: left"><span>var</span><span> adal </span><span>=</span><span> require(</span><span>"adal-node"</span><span>); npm install adal-node</span></div>
<div style="text-align: left"><span>var</span><span> fs </span><span>=</span><span> require(</span><span>"fs"</span><span>); npm install fs</span></div></blockquote>
<div>request модуль необходим для будущих REST запросов к нашему SharePoint. Adal-node необходим для возможности авторизации и получения токена для работы и fs необходим для возможности читания и работы с файлами.</div>
<div>Последнее, что нам необходимо для старта написания нашего скрипта это создание и использование сертификата, который является важным звеном для получения доступа к SharePoint Online. Для этого нам необходимо установить <a href="https://github.com/formio/keycred">https://github.com/formio/keycred</a></div>
<div><span>npm install -g keycred</span>
<span>keycred</span></div>
<div>и выполнить все необходимые команды для генерации сертификата. Для того, чтобы все работало необходимо выполнить три условия:</div>
<div>1. Открыть манифест приложения и отредактировать раздел KeyCredentials.</div>
<div><img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-4.18.35-PM.png" alt="" width="562" height="221" class="alignnone wp-image-1547" /></div>
<div>2. Полученный Private Key скопировать и сохранить в файл с расширением .pem</div>
<div>3. Сохранить Certificate Fingerprint</div>
<div>Теперь пишем скрипт.</div>
<div>
<div>
<blockquote>
<div><span>module.exports </span><span>=</span><span> </span><span>function</span><span>(context, req) {</span></div>
<div><span> </span><span>var</span><span> authorityHostUrl </span><span>=</span><span> </span><span>'https://login.microsoftonline.com'</span><span>;</span></div>
<div><span> </span><span>var</span><span> tenant </span><span>=</span><span> </span><span>'your.onmicrosoft.com'</span><span>;</span></div>
<div><span> </span><span>var</span><span> authorityUrl </span><span>=</span><span> authorityHostUrl </span><span>+</span><span> </span><span>'/'</span><span> </span><span>+</span><span> tenant;</span></div>
<div><span> </span><span>var</span><span> clientId </span><span>=</span><span> </span><span>'-----------------'</span><span>;</span></div>
<div><span> </span><span>var</span><span> clientSecret </span><span>=</span><span> </span><span>'----------------'</span><span>;</span></div>
<div><span> </span><span>var</span><span> resource </span><span>=</span><span> </span><span>'https://your.sharepoint.com'</span><span>;</span></div>
<div><span> </span><span>var</span><span> thumbprint </span><span>=</span><span> </span><span>'----------------'</span><span>;</span></div>
<div><span> </span><span>var</span><span> certificate </span><span>=</span><span> fs.readFileSync(__dirname </span><span>+</span><span> </span><span>'/cert.pem'</span><span>, { encoding : </span><span>'utf8'</span><span>});</span></div>
<div><span> </span><span>var</span><span> authContext </span><span>=</span><span> </span><span>new</span><span> adal.AuthenticationContext(authorityUrl);</span></div>
<div><span> </span></div>
<div><span> authContext.acquireTokenWithClientCertificate(resource, clientId, certificate, thumbprint, </span><span>function</span><span>(err, tokenResponse) {</span></div>
<div><span> </span><span>if</span><span> (err) {</span></div>
<div><span> context.log(</span><span>'well that didn\'t work: '</span><span> </span><span>+</span><span> err.stack);</span></div>
<div><span> context.done();</span></div>
<div><span> </span><span>return</span><span>;</span></div>
<div><span> }</span></div>
<div><span> context.log(tokenResponse);</span></div>
<div><span> </span></div>
<div><span> </span><span>var</span><span> accesstoken </span><span>=</span><span> tokenResponse.accessToken;</span></div>
<div><span> </span><span>var</span><span> options </span><span>=</span><span> { </span></div>
<div><span> method: </span><span>'GET'</span><span>, </span></div>
<div><span> uri: </span><span>"https://your.sharepoint.com/_api/web/title"</span><span>, </span></div>
<div><span> headers: { </span></div>
<div><span> </span><span>'Accept'</span><span>: </span><span>'application/json;odata.metadata=full'</span><span>,</span></div>
<div><span> </span><span>'Authorization'</span><span>: </span><span>'Bearer '</span><span> </span><span>+</span><span> accesstoken</span></div>
<div><span> }</span></div>
<div><span> };</span></div>
<div><span> context.log(options);</span></div>
<div><span> httpRequest(options, </span><span>function</span><span>(error, res, body){</span></div>
<div><span> context.log(error);</span></div>
<div><span> context.log(body);</span></div>
<div><span> context.res </span><span>=</span><span> { body: body </span><span>||</span><span> </span><span>''</span><span> };</span></div>
<div><span> context.done();</span></div>
<div><span> });</span></div>
<div><span> });</span></div>
<div><span>};</span></div></blockquote>
</div>
</div>
<div>Для запуска в режиме отладки необходимо выполнить команду func host start --debug vscode и нажать кнопку включения отладки</div>
<div><img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-4.23.40-PM.png" alt="" width="470" height="93" class="alignnone wp-image-1556" /></div>
<div>В результате мы получим возможность обращаться к нашему SharePoint для получения данных.</div>
<div><img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-4.25.00-PM-1024x441.png" alt="" width="610" height="263" class="alignnone wp-image-1565" /></div>
<div><img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-4.26.31-PM-1024x83.png" alt="" width="606" height="49" class="alignnone wp-image-1566" /></div>
<div>Теперь когда у нас все локально работает, нам надо это опубликовать в нашем azure. Для этого переходим в портал azure в наше ранее созданный Azure Function App в раздел Platform Features и выбираем раздел Deployment Options.</div>
<div><img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-4.29.13-PM-1024x765.png" alt="" width="646" height="482" class="alignnone wp-image-1575" /></div>
<div><img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-4.29.31-PM-1024x650.png" alt="" width="397" height="252" class="alignnone wp-image-1585" /></div>
<div>И настраиваем локальный Git для будущей выгрузки нашего скрипта. В самой Visual Studio Code создаем подключение git remote add origin https://------</div>
<div>и выполняем комаду push для публикации нашего проекта в azure.</div>
<div><img src="https://msdnshared.blob.core.windows.net/media/2017/10/Screen-Shot-2017-10-02-at-4.32.15-PM-1024x457.png" alt="" width="702" height="313" class="alignnone wp-image-1586" /></div>
<div>Вот и все, безопасного вам кодинга.</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>How to automate publishing bundle js to SharePoint Library</title>
      <link>https://docs.microsoft.com/archive/blogs/sergey_belskiy_technical_blog/how-to-automate-publishing-bundle-js-to-sharepoint-library</link>
      <pubDate>Fri, 22 Sep 2017 13:22:26 GMT</pubDate>
      <dc:creator><![CDATA[Sergii Bielskyi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sergey_belskiy_technical_blog/?p=1465</guid>
      <description><![CDATA[Всем привет.

Сегодня хотел бы поделиться одним сценарием, который я выполнил, чтобы облегчить...]]></description>
      <content:encoded><![CDATA[Всем привет.

Сегодня хотел бы поделиться одним сценарием, который я выполнил, чтобы облегчить себе работу. Каждый раз, когда я компилировал себе исходный bundle через команду webpack мне приходилось полученный файл заливать руками в одну библиотеку ресурсов и активов, которую использовали мои решения на SharePoint. Это было очень не удобно и я решил поискать как можно оптимизировать и автоматизировать эту задачу.

Для этого нам необходимо следующее:
<ol>
 	<li>gulp (https://gulpjs.com/) который позволяет создавать задачи для выполнения команд.</li>
 	<li>gulp-spsave (https://www.npmjs.com/package/gulp-spsave) пакет который нам позволяет автоматизировать процесс загрузки данных в нашу бибблиотеку SharePoint.</li>
</ol>
Для начала установим gulp и после gulp-spsave <span>npm install gulp-spsave --save-dev</span>

Далее все легко и просто. Открываем файл gulpfile.js в котором прописываем задачу
<div>
<blockquote>
<div><em>var gulp = require('gulp');</em></div>
<div><em>var spsave = require('gulp-spsave');</em></div>
<div></div>
<div><em>gulp.task('upload-to-sp', function () {</em></div>
<div><em> return gulp.src("./dist/*.js")</em></div>
<div><em> .pipe(spsave({</em></div>
<div><em> siteUrl: "https://sharepoint/",</em></div>
<div><em> folder: "Resources/",</em></div>
<div><em> checkin: true,</em></div>
<div><em> checkinType: 1</em></div>
<div><em> }));</em></div>
<div><em>});</em></div></blockquote>
<div>Мы также можем указать логин и пароль,. Описание параметров можно посмотреть здесь https://www.npmjs.com/package/spsave</div>
<div>Таким образом запускаем команду gulp upload-to-sp и в результате получаем загруженный файл в нужное место SharePoint.</div>
<div></div>
<div><span></span></div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>How to work with async methods in React using SharePoint as data container</title>
      <link>https://docs.microsoft.com/archive/blogs/sergey_belskiy_technical_blog/how-to-work-with-async-methods-in-react-using-sharepoint-as-data-container</link>
      <pubDate>Mon, 18 Sep 2017 08:58:05 GMT</pubDate>
      <dc:creator><![CDATA[Sergii Bielskyi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sergey_belskiy_technical_blog/?p=1455</guid>
      <description><![CDATA[Привет всем.

Сегодня хотел бы поделиться интересным исследованием как можно работать с...]]></description>
      <content:encoded><![CDATA[Привет всем.

Сегодня хотел бы поделиться интересным исследованием как можно работать с ассинхронными методами в React для получения и загрузки данных в контролы из SharePoint списка.

Для этого мы будем использовать <em>office-ui-fabric-react</em> c его компонентами <em>SpinnerLoading, <span>TaxonomyPicker,</span> sp-pnp-js, react-dom, react</em>.

С чего начать, а начнем мы непосредственно с создания необходимого проекта и нужных нам файлов. Я уже об этом рассказывал в предыдущей статье <a href="https://blogs.msdn.microsoft.com/sergey_belskiy_technical_blog/2017/08/10/how-to-develop-for-sharepoint-on-premise-using-sp-pnp-core-js-node-js-and-visual-studio-code-on-mac/">https://blogs.msdn.microsoft.com/sergey_belskiy_technical_blog/2017/08/10/how-to-develop-for-sharepoint-on-premise-using-sp-pnp-core-js-node-js-and-visual-studio-code-on-mac/</a>

Для начала нам необходимо создать метод, которым мы будем забирать данные из SharePoint.
<div>
<blockquote>
<div><em>loadSubscriptionData(){</em></div>
<div><em> setup({</em></div>
<div><em> headers: {</em></div>
<div><em> "Accept": "application/json;odata=verbose",</em></div>
<div><em> }</em></div>
<div><em> });</em></div>
<div><em> let w = new Web("https://sharepoint.com");</em></div>
<div><em> w.lists.getByTitle("List").items.top(5000).select("Title", "ID").get().then((items) =&gt;{</em></div>
<div><em> let Qualifications = [];</em></div>
<div><em> items.map(function(item) { </em></div>
<div><em> Qualifications.push({ </em></div>
<div><em> "label" : item.Title,</em></div>
<div><em> "value" : item.ID.toString()</em></div>
<div><em> });</em></div>
<div><em> });</em></div>
<div><em> this.setState({QualificationData: Qualifications, isLoading: false});</em></div>
<div><em> })</em></div>
<div><em> }</em></div></blockquote>
<div>Далее нам необходимо вызвать этот метод в специальном методе react</div>
<div>
<blockquote>
<div><span> </span><em>componentWillMount(){</em></div>
<div><em> this.loadSubscriptionData();</em></div>
<div><em> }</em></div></blockquote>
<div>Этот метод вызывается перед методом Render и прорисовкой компонентов на странице. Более детально можно ознакомиться с этим методом здесь<a href="https://facebook.github.io/react/docs/react-component.html#componentwillmount"> https://facebook.github.io/react/docs/react-component.html#componentwillmount</a>.</div>
<div></div>
<div>Но все равно у нас нет столько времени ожидания, так как список не успеет подгрузится в ассинхронном методе. Для этого нам на помощь приходит спинер.</div>
<div>
<blockquote>
<div><em>render() {</em></div>
<div><em> return (</em></div>
<div><em>&lt;div&gt;</em></div>
<div><em> { this.state.isLoading &amp;&amp;</em></div>
<div><em> &lt;SpinnerLoading /&gt;</em></div>
<div><em> }</em></div>
<div><em> { !this.state.isLoading &amp;&amp;</em></div>
<div><em> &lt;div&gt;</em></div>
<div><em>&lt;TaxonomyPicker</em></div>
<div><em> name="Qualification"</em></div>
<div><em> displayName="Qualification:"</em></div>
<div><em> defaultOptions={this.state.QualificationData}</em></div>
<div><em> multi={true} </em></div>
<div><em> placeholder="Qualification"</em></div>
<div><em> className = "ms-font-xs ms-fontWeight-regular ms-fontSize-xs"</em></div>
<div><em> onPickerChange = {this.changedQualification.bind(this)}</em></div>
<div><em> /&gt; </em></div>
<div><em> &lt;PrimaryButton</em></div>
<div><em> data-automation-id='dataSubmit'</em></div>
<div><em> text='Create'</em></div>
<div><em> className = "ms-font-xs ms-fontWeight-regular ms-fontSize-xs"</em></div>
<div><em> onClick = {this.addItem}</em></div>
<div><em> /&gt;</em></div>
<div><em> &lt;/div&gt;</em></div>
<div><em> }</em></div>
<div><em> &lt;/div&gt;</em></div>
<div><em> );</em></div>
<div><span><em> }</em>
</span></div></blockquote>
<div>То есть другими словами, пока данные не подгрузятся у нас спинер будет крутиться и пользователь будет ожидать пока появится комбобокс с данными из списка SharePoint.</div>
</div>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>How to develop for SharePoint On Premise using sp-PnP-Core JS, Node JS and Visual Studio Code on Mac</title>
      <link>https://docs.microsoft.com/archive/blogs/sergey_belskiy_technical_blog/how-to-develop-for-sharepoint-on-premise-using-sp-pnp-core-js-node-js-and-visual-studio-code-on-mac</link>
      <pubDate>Thu, 10 Aug 2017 06:04:28 GMT</pubDate>
      <dc:creator><![CDATA[Sergii Bielskyi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sergey_belskiy_technical_blog/?p=1385</guid>
      <description><![CDATA[Привет всем. Все наверное сталкивались и интересовались новой разработкой SharePoint Framework и...]]></description>
      <content:encoded><![CDATA[Привет всем. Все наверное сталкивались и интересовались новой разработкой SharePoint Framework и подходами разработки под SharePoint. Это все хорошо если у Вас есть SharePoint Online или же SharePoint On Premise 2016. Но что же делать если у Вас нет ни того и другого, а Вам все равно хочется быть в тренде и использовать новые технологии и методы разработки под SharePoint. Рассмотрим мой пример, у меня SharePoint On Premise 2013 и Visual Studio Code под Mac. Что делать, как разработать например страницу, которую можно встроить в SharePoint и пользоваться контентом.

Для начала необходимо предустановить необходимые компоненты, которые у Вас может быть не установлены.
<ol>
 	<li><a href="https://nodejs.org/en/download/">Node Js</a></li>
 	<li>Расширения для работы в Visual Studio Code (Запускаем терминал консоль в Mac или же через Visual Studio Code)</li>
</ol>
<ul>
 	<li><span>npm install -g tslint (необходима для анализа и помощи в исправлении ошибок TypeScript)</span></li>
 	<li><span>npm install -g typescript</span></li>
 	<li><span>npm install -g typings (необходимый помощник в определениях типов данных)</span></li>
 	<li><span>npm install -g gulp-cli (инструмент для запуска и управления задач на выполнение)</span></li>
 	<li><span>npm install -g webpack (инструмент для сборки модулей, в основном ориентированных для веб браузеров)</span></li>
</ul>
Это то, что необходимо установить в глобальную директорию для работы. Далее следующим шагом необходимо создать папку для будущего проекта и в ней создать поддиректории
<ul>
 	<li>app</li>
 	<li>app/scripts</li>
 	<li>app/styles</li>
</ul>
Это необходимо для удобной работы с проектов в будущем. Следующим этапом нам необходимо установить gulp в наш проект. Удобный инструмент веб сервер для локальной веб разработки. Перед тем как это сделать, выполним команду <span>npm init для инициализации нашего проекта. Выполнить предлагаемые шаги для описания проекта.</span>
<ul>
 	<li><span>name: Название вашего проекта</span></li>
 	<li><span>version: Оставить по умолчанию</span></li>
 	<li><span>description: Описание вашего проекта</span></li>
 	<li><span>entry point: Оставить по умолчанию</span></li>
 	<li><span>test command: Оставить пустым</span></li>
 	<li><span>git repository: Оставить пустым</span></li>
 	<li><span>keywords: Оставить пустым</span></li>
 	<li><span>author: Указать ваше имя</span></li>
 	<li><span>license: Оставить по умолчанию</span></li>
</ul>
Далее открываем Visual Studio Code и открываем созданную ранее папку нашего проекта и выполняем команды, указанные ниже.
<ul>
 	<li><span>npm install --save-dev gulp-serve</span></li>
 	<li><span>npm install --save-dev gulp</span></li>
 	<li><span>npm install --save-dev jquery</span></li>
 	<li><span>npm install --save-dev typings</span></li>
 	<li><span>npm install --save-dev sp-pnp-js</span></li>
</ul>
Следующим этапом создаем в корне папки вашего проекта файл <span>gulpfile.js, который нам необходимо для описания наших задач на выполнение. Мой пример такой,</span>
<div>
<blockquote>
<div style="text-align: left"><span>var</span><span> gulp </span><span>=</span><span> require(</span><span>'gulp'</span><span>);</span></div>
<div style="text-align: left"><span>var</span><span> serve </span><span>=</span><span> require(</span><span>'gulp-serve'</span><span>);</span></div>
<div style="text-align: left"><span>var</span><span> browserSync </span><span>=</span><span> require(</span><span>"browser-sync"</span><span>).create();</span></div>
<div style="text-align: left"><span>gulp.task(</span><span>'browser-sync'</span><span>, </span><span>function</span><span>() {</span></div>
<div style="text-align: left"><span> browserSync.init({</span></div>
<div style="text-align: left"><span> host: </span><span>'localhost</span><span>,</span></div>
<div style="text-align: left"><span> https: </span><span>true</span><span>,</span></div>
<div style="text-align: left"><span> cors: </span><span>true</span><span>,</span></div>
<div style="text-align: left"><span> port: </span><span>8090</span><span>,</span></div>
<div style="text-align: left"><span> server: </span><span>"app"</span></div>
<div style="text-align: left"><span> });</span></div>
<div style="text-align: left"><span>});</span></div></blockquote>
</div>
<img src="https://msdnshared.blob.core.windows.net/media/2017/08/Screen-Shot-2017-08-09-at-4.48.20-PM-1024x753.png" alt="" width="879" height="646" class="alignnone size-large wp-image-1386" />

То есть для запуска нашего проекта необходимо будет выполнять команду gulp browser-sync.

Далее следующий шаг, это создание файла <span>tsconfig.json или же через комбинацию CMD+Option+P выбрать окружение для проекта TypeScript и этот файл создается автоматически. Он определяет где у проекта корневая папка и описывает все файлы в ней для работы и последующей компиляции проекта.</span>

Внутри этого файла должно быть создано следующее описание
<div>
<blockquote>
<div><span>{</span></div>
<div><span> </span><span>"compilerOptions"</span><span>: {</span></div>
<div><span> </span><span>"target"</span><span>: </span><span>"es6"</span><span>,</span></div>
<div><span> </span><span>"module"</span><span>: </span><span>"commonjs"</span><span>,</span></div>
<div><span> </span><span>"sourceMap"</span><span>: </span><span>true</span></div>
<div><span> }</span></div>
<div><span>}</span></div></blockquote>
<div><img src="https://msdnshared.blob.core.windows.net/media/2017/08/Screen-Shot-2017-08-10-at-8.39.17-AM-1024x652.png" alt="" width="879" height="560" class="alignnone size-large wp-image-1395" /></div>
<div>По настройкам предварительным это все, далее начинаем наполнение нашего проекта. Для начала создадим aspx страницу и поместим ее куда то в библиотеку SharePoint. Это у нас будет основная страница для работы. Для помещения этой страницы в библиотеку SharePoint нет необходимости искать Widnows с SharePoint Designer. Забудем об этом у нас Mac. Нам необходимо просто примапить наш SharePoint через стандартные возможности Mac Finder.</div>
<div><img src="https://msdnshared.blob.core.windows.net/media/2017/08/Screen-Shot-2017-08-10-at-8.43.09-AM-1024x795.png" alt="" width="879" height="682" class="alignnone size-large wp-image-1405" /></div>
<div>В открывшемся окне указать путь к вашему сайту</div>
<div><img src="https://msdnshared.blob.core.windows.net/media/2017/08/Screen-Shot-2017-08-10-at-8.44.06-AM.png" alt="" width="613" height="294" class="alignnone wp-image-1415" /></div>
<div>Далее все очень просто, запускаем Visual Studio Code еще одно окно и выбираем примапленную папку сайта. Находим нужную библиотеку и добавляем файл index.aspx.</div>
<div>
<blockquote>
<div><span>&lt;</span><span>html</span><span>&gt;</span></div>
<div><span> </span></div>
<div><span>&lt;</span><span>head</span><span>&gt;</span></div>
<div><span>&lt;</span><span>title</span><span>&gt;</span><span>SharePoint PnP testing</span><span>&lt;/</span><span>title</span><span>&gt;</span></div>
<div><span>&lt;/</span><span>head</span><span>&gt;</span></div>
<div><span> </span></div>
<div><span>&lt;</span><span>body</span><span>&gt;</span></div>
<div><span>&lt;</span><span>h1</span><span>&gt;</span><span>SharePoint On Premise 2013 PnP testing</span><span>&lt;/</span><span>h1</span><span>&gt;</span></div>
<div><span>&lt;</span><span>div</span><span> </span><span>class</span><span>=</span><span>"example"</span><span>&gt;</span></div>
<div><span>&lt;</span><span>script</span><span> </span><span>type</span><span>=</span><span>"text/javascript"</span><span> </span><span>src</span><span>=</span><span>"https://sharepoint/_layouts/15/SP.RequestExecutor.js"</span><span>&gt;&lt;/</span><span>script</span><span>&gt;</span></div>
<div><span>&lt;</span><span>script</span><span> </span><span>type</span><span>=</span><span>"text/javascript"</span><span> </span><span>src</span><span>=</span><span>"https://localhost:8090/scripts/bundle-app.js"</span><span>&gt;&lt;/</span><span>script</span><span>&gt;</span></div>
<div><span>&lt;</span><span>link</span><span> </span><span>rel</span><span>=</span><span>"stylesheet"</span><span> </span><span>type</span><span>=</span><span>"text/css"</span><span> </span><span>href</span><span>=</span><span>"https://localhost:8090/styles/app.css"</span><span> /&gt;</span></div>
<div><span>&lt;</span><span>div</span><span> </span><span>id</span><span>=</span><span>"pnp-test"</span><span>&gt;&lt;/</span><span>div</span><span>&gt;</span></div>
<div><span>&lt;</span><span>div</span><span> </span><span>id</span><span>=</span><span>"pnp-items"</span><span>&gt;&lt;/</span><span>div</span><span>&gt;</span></div>
<div><span>&lt;/</span><span>div</span><span>&gt;</span></div>
<div><span>&lt;/</span><span>body</span><span>&gt;</span></div>
<div><span> </span></div>
<div><span>&lt;/</span><span>html</span><span>&gt;</span></div></blockquote>
<div>Сохраняем файл и закрываем окно.</div>
<div><img src="https://msdnshared.blob.core.windows.net/media/2017/08/Screen-Shot-2017-08-10-at-8.52.23-AM-1024x486.png" alt="" width="879" height="417" class="alignnone size-large wp-image-1426" /></div>
<div>Далее создаем файл /scripts/app.ts в котором помещаем выполняемый код</div>
<div>
<blockquote>
<div style="text-align: left"><span>import</span><span> </span><span>*</span><span> </span><span>as</span><span> $ </span><span>from</span><span> </span><span>"jquery"</span><span>;</span></div>
<div style="text-align: left"><span>import</span><span> {setup, Web} </span><span>from</span><span> </span><span>"sp-pnp-js"</span><span>;</span></div>
<div style="text-align: left"><span>setup({</span></div>
<div style="text-align: left"><span> headers: {</span></div>
<div style="text-align: left"><span> </span><span>"Accept"</span><span>: </span><span>"application/json;odata=verbose"</span><span>,</span></div>
<div style="text-align: left"><span> }</span></div>
<div style="text-align: left"><span>});</span></div>
<div style="text-align: left"><span>let</span><span> w </span><span>=</span><span> </span><span>new</span><span> Web(</span><span>"https://sharepoint"</span><span>);</span></div>
<div style="text-align: left"><span>w.select(</span><span>"Title"</span><span>).get().then(w </span><span>=&gt;</span><span> {</span></div>
<div style="text-align: left"><span> $(</span><span>"#pnp-test"</span><span>).text(</span><span>"This is the title of the current Web : "</span><span> </span><span>+</span><span> w.Title);</span></div>
<div style="text-align: left"><span>});</span></div>
<div style="text-align: left"><span>w.lists.getByTitle(</span><span>"Resources"</span><span>).items.get().then(items </span><span>=&gt;</span><span> {</span></div>
<div style="text-align: left"><span> $(</span><span>"#pnp-items"</span><span>).text(</span><span>"Task list has : "</span><span> </span><span>+</span><span> items.length.toString());</span></div>
<div style="text-align: left"><span>});</span></div></blockquote>
<div style="text-align: left">Также создаем файл styles/app.css</div>
<div style="text-align: left">
<blockquote>
<div><span>body</span><span> {</span></div>
<div><span>font-family</span><span>: Verdana, Geneva, sans-serif;</span></div>
<div><span>}</span></div>
<div><span> </span></div>
<div><span>.example</span><span> {</span></div>
<div><span>margin</span><span>: </span><span>10px</span><span>;</span></div>
<div><span>}</span></div>
<div><span> </span></div>
<div><span>.example .code</span><span> {</span></div>
<div><span>border</span><span>: </span><span>1px</span><span> solid lightgray;</span></div>
<div><span>padding</span><span>: </span><span>10px</span><span>;</span></div>
<div><span>font-family</span><span>: </span><span>"Lucida Console"</span><span>, Monaco, monospace;</span></div>
<div><span>}</span></div></blockquote>
<div>Ну и напоследок, необходимо выполнить команду для генерации сборки</div>
<blockquote>
<div>webpack ./app/scripts/app.ts ./app/scripts/bundle-app.js</div></blockquote>
<div>Сгенерируется файл bundle-app.js, который будет использоваться на веб странице.</div>
<div>Проверяем, что получилось, запускаем команду gulp browser-sync и переходим на страницу SharePoint.</div>
<div><img src="https://msdnshared.blob.core.windows.net/media/2017/08/Screen-Shot-2017-08-10-at-9.02.37-AM-1024x242.png" alt="" width="879" height="208" class="alignnone size-large wp-image-1435" /></div>
</div>
</div>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>How to work with lists in Word Add-in #Office.js #JavaScript API</title>
      <link>https://docs.microsoft.com/archive/blogs/sergey_belskiy_technical_blog/how-to-work-with-lists-in-word-add-in-office-js-javascript-api</link>
      <pubDate>Fri, 14 Jul 2017 08:20:42 GMT</pubDate>
      <dc:creator><![CDATA[Sergii Bielskyi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sergey_belskiy_technical_blog/?p=1366</guid>
      <description><![CDATA[С выходом новой версии office.js 1.3 появилась возможность использовать списки во время наполнения...]]></description>
      <content:encoded><![CDATA[С выходом новой версии office.js 1.3 появилась возможность использовать списки во время наполнения текстом документы Word. Полный перечень обновлений можно посмотреть <a href="https://dev.office.com/reference/add-ins/requirement-sets/word-api-requirement-sets">здесь</a>

<img src="https://msdnshared.blob.core.windows.net/media/2017/07/Screen-Shot-2017-07-14-at-10.56.25-AM-1024x385.png" alt="" width="743" height="279" class="alignnone  wp-image-1375" />

Следуя документации, чтобы создать список нам необходимо сначала выбрать необходимый параграф, в который мы завернем наг список.

Делается это таким образом:
<div>
<blockquote>
<div><em>Word.run(function (context) {</em></div>
<div>
<div>
<div><em>var body = context.document.body;</em></div>
<div>
<div>
<div><em>var newP = body.insertParagraph('Test creating list', Word.InsertLocation.end);</em></div>
<div>
<div>
<div><em>var list = newP.startNewList();</em></div>
<div>
<div>
<div><span>list.load();</span></div>
<div><em>context.sync();</em></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div><em>})</em></div></blockquote>
</div>
По умолчанию тип Вашего списка будет Bullet. Если Вы хотите использовать привычный порядковый с номерами, Вам необходимо сделать следующее:
<div>
<blockquote>
<div><em>list.setLevelNumbering(0, Word.ListNumbering.None);</em></div></blockquote>
<div>Этот метод заставит изменить тип Вашего списка. Первый параметр обозначает уровень в Вашем списке, второй параметр обозначает формат. Существуют следующие форматы <span>None, Arabic, UpperRoman, LowerRoman, UpperLetter, LowerLetter.</span></div>
</div>
<div>Если Вы хотите изменить тип списка на втором уровне, Вам необходимо выполнить метод</div>
<blockquote>
<div><em>list.setLevelNumbering(1, Word.ListNumbering.<span>Arabic</span>);</em></div></blockquote>
<div>То есть в результате мы получим следующий код</div>
<div>
<blockquote>
<div><em>Word.run(function (context) {</em></div>
<div>
<div><em>var body = context.document.body;</em></div>
<div>
<div><em>var newP = body.insertParagraph('Test creating list', Word.InsertLocation.end);</em></div>
<div>
<div><em>var list = newP.startNewList();</em></div>
<div><em>list.setLevelNumbering(0, Word.ListNumbering.None);</em></div>
<div>
<div><span>list.load();</span></div>
<div><em>newP = body.insertParagraph('Test creating list with sublevels', Word.InsertLocation.end);</em></div>
<div><em>newP.listItem.level = 1;</em></div>
<div><em>list.setLevelNumbering(1, Word.ListNumbering.<span>Arabic</span>);</em></div>
<div><span>list.load();</span></div>
<div><em>context.sync();
</em></div>
</div>
</div>
</div>
</div>
<div><em>})</em></div></blockquote>
<div>Еще важный момент, когда есть необходимость указывать свой формат нижних уровней списка, которые зависят от верхних. Например, Вам необходимо создать пункт 1, в котором будут подпункты 1.1, 1.2 и т.д.</div>
<div>Это делается с помощью метода setLevelNumbering</div>
<div>
<blockquote>
<div><em>list.setLevelNumbering(1, Word.ListNumbering.Arabic, [0, ".", 1]);</em></div></blockquote>
<div></div>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>How to use Angular 2 with SharePoint Framework + PnP</title>
      <link>https://docs.microsoft.com/archive/blogs/sergey_belskiy_technical_blog/how-to-use-angular-2-with-sharepoint-framework-pnp</link>
      <pubDate>Mon, 27 Feb 2017 13:46:28 GMT</pubDate>
      <dc:creator><![CDATA[Sergii Bielskyi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sergey_belskiy_technical_blog/?p=1305</guid>
      <description><![CDATA[Привет всем,

на примере создания компонента Angular 2 автоподстановки, хочу рассказать как его...]]></description>
      <content:encoded><![CDATA[Привет всем,

на примере создания компонента Angular 2 автоподстановки, хочу рассказать как его можно связать с платформой SharePoint Framework.

<img src="https://msdnshared.blob.core.windows.net/media/2017/02/Screen-Shot-2017-02-27-at-3.37.16-PM-1024x224.png" alt="screen-shot-2017-02-27-at-3-37-16-pm" width="879" height="192" class="alignnone size-large wp-image-1315" />

Для этого нам необходимо установить все обновления на SharePoint Framework <a href="https://github.com/SharePoint/sp-dev-docs/wiki/Release-Notes-RC0">https://github.com/SharePoint/sp-dev-docs/wiki/Release-Notes-RC0</a>

Angular 2 <a href="https://material.angular.io/">https://material.angular.io/</a>

Далее создаем проект через yo шаблон и создаем папку app для нашего компонента, в котором создаем три файла

<img src="https://msdnshared.blob.core.windows.net/media/2017/02/Screen-Shot-2017-02-27-at-3.39.39-PM.png" alt="screen-shot-2017-02-27-at-3-39-39-pm" width="989" height="194" class="alignnone size-full wp-image-1325" />

app.component.html (наш шаблон страницы)

<img src="https://msdnshared.blob.core.windows.net/media/2017/02/Screen-Shot-2017-02-27-at-3.41.47-PM.png" alt="screen-shot-2017-02-27-at-3-41-47-pm" width="983" height="347" class="alignnone size-full wp-image-1326" />

app.component.ts (наш компонент)

<img src="https://msdnshared.blob.core.windows.net/media/2017/02/Screen-Shot-2017-02-27-at-3.42.46-PM.png" alt="screen-shot-2017-02-27-at-3-42-46-pm" width="981" height="828" class="alignnone size-full wp-image-1336" />

app.module.ts (наш модуль)

<img src="https://msdnshared.blob.core.windows.net/media/2017/02/Screen-Shot-2017-02-27-at-3.43.35-PM.png" alt="screen-shot-2017-02-27-at-3-43-35-pm" width="986" height="328" class="alignnone size-full wp-image-1345" />

И собственно в самой веб части нам необходимо вызвать эту всю логику

<img src="https://msdnshared.blob.core.windows.net/media/2017/02/Screen-Shot-2017-02-27-at-3.44.40-PM.png" alt="screen-shot-2017-02-27-at-3-44-40-pm" width="973" height="126" class="alignnone size-full wp-image-1355" />

Исходный код можно найти здесь - <a href="https://github.com/sergiibielskyi/SPfxAngular2">https://github.com/sergiibielskyi/SPfxAngular2</a>]]></content:encoded>
    </item>
    <item>
      <title>Утверждение документов SharePoint через Outlook. Office Add-ins</title>
      <link>https://docs.microsoft.com/archive/blogs/sergey_belskiy_technical_blog/%D1%83%D1%82%D0%B2%D0%B5%D1%80%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2-sharepoint-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-outlook-office-add-ins</link>
      <pubDate>Sun, 12 Feb 2017 19:22:38 GMT</pubDate>
      <dc:creator><![CDATA[Sergii Bielskyi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sergey_belskiy_technical_blog/?p=1295</guid>
      <description><![CDATA[Всем привет.

Выкладываю презентацию и пример использования Office Add-ins в которой описано:
1....]]></description>
      <content:encoded><![CDATA[Всем привет.

Выкладываю презентацию и пример использования Office Add-ins в которой описано:
<span>1. Общее понимание работы Office Add-ins и их структура, жизненный цикл разработки</span>
<span>2. Разработка плагинов на платформе Mac используя Visual Studio Code, а также тестирование и отладка</span>
<span>3. Создание веб сервисов авторизации OAuth 2.0</span>
<span>4. Внедрение плагинов и развертывание в Office 365.</span>

<span>Примером будет возможность утверждать документы через outlook, которые приходят через SharePoint рабочие процессы.</span>
<span>Плагин использует</span>
<span>1. SharePoint для размещения документов и отправки на согласование</span>
<span>2. Office Add-in для возможности согласования документов.</span>
<span>3. Azure app services для публикации и хостинга веб сервисов, которые помогают авторизироваться в SharePoint для получения доступа плагина к документам.</span>

Презентацию можно скачать <a href="https://lookaside.fbsbx.com/file/office%20add-ins.pptx?token=AWwF9Wn_xpU5Z_V1tEcTAv1FZK3jB49pye6XuVSO7UcSMLoi18jMZu1SKGqplHNjuMsdke49pbPp2BgdyZzqxDR7P9UqPmvxo6KlN1527SWmuZRtKuDgmJLttuF96Dmt5EkfVS79sbgpoc-JK_KS7fsZrK-UK4WtJ2sy2Ww5FFuWWtWG83FCGQ2WfhcbuRRLAeY">здесь</a>

Исходный код находится <a href="https://github.com/sergiibielskyi/Outlook-Add-ins-Approve-Documents">здесь</a>]]></content:encoded>
    </item>
    <item>
      <title>Подключение к SQL Azure через Visual Studio Code на Mac</title>
      <link>https://docs.microsoft.com/archive/blogs/sergey_belskiy_technical_blog/%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA-sql-azure-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-visual-studio-code-%D0%BD%D0%B0-mac</link>
      <pubDate>Mon, 09 Jan 2017 08:21:01 GMT</pubDate>
      <dc:creator><![CDATA[Sergii Bielskyi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sergey_belskiy_technical_blog/?p=1215</guid>
      <description><![CDATA[Добрый день, всем.

Сегодня хочу поделиться опытом работы с базами данных через Visual Studio Code...]]></description>
      <content:encoded><![CDATA[Добрый день, всем.

Сегодня хочу поделиться опытом работы с базами данных через Visual Studio Code под управлением Mac. То есть как добиться возможности создавать структуру базы данных, управлять контентом и прочие вещи, используя привычный T-SQL.

Для начала вам необходимо установить расширение в ваше приложение Visual Studio Code. Расширение называется mssql.

<img src="https://msdnshared.blob.core.windows.net/media/2017/01/Screen-Shot-2017-01-09-at-10.07.21-AM.png" alt="screen-shot-2017-01-09-at-10-07-21-am" width="265" height="297" class="alignnone  wp-image-1225" />

После установки этого расширения просьба перезагрузить Visual Studio Code. Далее необходимо запустить терминал и выполнить ряд команд.
<pre><code class="lang-bash">  brew update
  brew install openssl
  ln <span class="hljs-_">-s</span> /usr/<span class="hljs-built_in">local</span>/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/<span class="hljs-built_in">local</span>/lib/
  ln <span class="hljs-_">-s</span> /usr/<span class="hljs-built_in">local</span>/opt/openssl/lib/libssl.1.0.0.dylib /usr/<span class="hljs-built_in">local</span>/lib/</code></pre>
После выполнение команд открыть Visual Studio Code и создать один файл Cmd + N.

Далее в строке состояния Visual Studio Code выбрать режим SQL просто нажам на этой иконке или же выполнив команду Cmd + K, M.

<img src="https://msdnshared.blob.core.windows.net/media/2017/01/Screen-Shot-2017-01-09-at-10.12.28-AM.png" alt="screen-shot-2017-01-09-at-10-12-28-am" width="426" height="311" class="alignnone  wp-image-1206" />

<img src="https://msdnshared.blob.core.windows.net/media/2017/01/Screen-Shot-2017-01-09-at-10.12.57-AM.png" alt="screen-shot-2017-01-09-at-10-12-57-am" width="968" height="20" class="alignnone size-full wp-image-1235" />

Далее необходимо нажать комбинацию клавиш Cmd+Shift+P и выбрать команду SQL+Connect

<img src="https://msdnshared.blob.core.windows.net/media/2017/01/Screen-Shot-2017-01-09-at-10.14.37-AM.png" alt="screen-shot-2017-01-09-at-10-14-37-am" width="492" height="161" class="alignnone  wp-image-1245" />

Далее в появившемся следующем окне необходимо выбрать создание нового прифиля для подключения.

<img src="https://msdnshared.blob.core.windows.net/media/2017/01/Screen-Shot-2017-01-09-at-10.15.22-AM.png" alt="screen-shot-2017-01-09-at-10-15-22-am" width="621" height="97" class="alignnone size-full wp-image-1255" />

Следующие шаги, необходимо указать название вашего SQL сервера и логин и пароль

<img src="https://msdnshared.blob.core.windows.net/media/2017/01/Screen-Shot-2017-01-09-at-10.16.34-AM.png" alt="screen-shot-2017-01-09-at-10-16-34-am" width="616" height="76" class="alignnone size-full wp-image-1265" />

Если все правильно было указано, то подключение будет успешным и вы можете выполнять команды прямо в вашу базу данных.

Также при подключении система загрузить вам наборы готовых шаблоном, чтобы облегчить работу.

<img src="https://msdnshared.blob.core.windows.net/media/2017/01/Screen-Shot-2017-01-09-at-10.18.26-AM.png" alt="screen-shot-2017-01-09-at-10-18-26-am" width="492" height="279" class="alignnone size-full wp-image-1275" />

Более детально можно посмотреть здесь - <a href="https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-develop-use-vscode">https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-develop-use-vscode</a>

Всем спасибо.]]></content:encoded>
    </item>
  </channel>
</rss>