Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете внедрять функции Power Automate в приложения и веб-сайты с помощью мини-приложений потоков, открывая пользователям удобный способ автоматизации своих личных и рабочих задач.
Мини-приложения потоков представляют собой элементы iframe, размещаемые в коде документа ведущего приложения. Этот документ ссылается на страницу в конструкторе Power Automate. Мини-приложения позволяют интегрировать определенный функционал Power Automate в стороннее приложение.
Мини-приложения могут быть простыми, например, они могут отображать список шаблонов без какого-либо взаимодействия между ведущим приложением и iframe. Но они могут быть и сложными. Например, они могут создавать облачный поток на основе шаблона, а затем активировать его с использованием двусторонней связи между ведущим и мини-приложением.
Предварительные условия
- Учетная запись Майкрософт либо
- рабочая или учебная учетная запись.
Мини-приложение без проверки подлинности
Чтобы использовать мини-приложение шаблонов без проверки подлинности, внедрите его непосредственно в ведущее приложения с помощью iframe. Пакет JS SDK или маркер доступа не требуются.
Отображение шаблонов для сценариев
Для начала добавьте следующий код, чтобы отобразить шаблоны Power Automate на вашем веб-сайте:
<iframe src="https://flow.microsoft.com/{locale}/widgets/templates/?q={search term}
&pagesize={number of templates}&destination={destination}&category={category}"></iframe>
| Параметр | Описание |
|---|---|
| locale | Четырехбуквенный код языка и региона для представления шаблона. Например, en-us представляет американский английский, а de-de — немецкий. |
| search term | Условие поиска для шаблонов, которые отобразятся в представлении. Например, чтобы отобразить шаблоны для приложения SharePoint, нужно выполнить поиск по условию SharePoint. |
| number of templates | Число шаблонов, которые отобразятся в представлении. |
| destination | Страница, которая открывается, когда пользователь выбирает шаблон. Введите details, чтобы отобразить сведения о шаблоне, или new, чтобы открыть конструктор Power Automate. |
| category | Фильтр для заданной категории шаблонов. |
| parameters.{name} | Дополнительный контекст, передаваемый в поток. |
Если параметр destination имеет значение new, при выборе пользователем шаблона откроется конструктор Power Automate, где можно создать облачный поток. В следующем разделе подробно описано, как использовать мини-приложение.
Передача дополнительных параметров в шаблон потока
Если пользователь находится в определенном контексте веб-сайта или приложения, этот контекст можно передать в поток. Например, пользователь может открыть шаблон При создании элемента, глядя на определенный список в SharePoint. Чтобы передать идентификатор списка как параметр в поток, сделайте следующее:
- Определите параметр в шаблоне потока перед его публикацией. Параметр выглядит так:
@{parameters('parameter_name')}. - Передайте параметр в строку запроса iframe src. Например, добавьте
¶meters.listName={the name of the list}, если у вас есть параметр с именем listName.
Полный пример
Чтобы отобразить первые четыре шаблона SharePoint на немецком языке и предоставить пользователю myCoolList, используйте следующий код:
<iframe src="https://flow.microsoft.com/de-de/widgets/templates/?q=sharepoint%20&pagesize=4&destination=details¶meters.listName=myCoolList"></iframe>
Мини-приложения потоков с аутентификацией
В следующей таблице приведен список мини-приложений Power Automate, в которых можно использовать все возможности с помощью маркера доступа для проверки подлинности пользователей. Для внедрения мини-приложений и предоставления требуемого маркера необходим пакет средств разработки программного обеспечения JavaScript (JS SDK) для Power Automate.
| Тип мини-приложения | Поддерживаемая функция |
|---|---|
| flows | Отображает список потоков на вкладке для личных и общих потоков. Позволяет изменить существующий поток или создать новый на основе шаблона или с нуля. |
| flowCreation | Создает облачный поток на основе идентификатора шаблона, предоставляемого ведущим приложением. |
| runtime | Активирует поток с ручными или гибридными триггерами, предоставленный ведущим приложением. |
| approvalCenter | Внедряет запросы на утверждение и отправленные утверждения. |
| templates | Отображает список шаблонов. Пользователь может выбрать один из них для создания потока. |
Используйте пакет SDK для Flow с проверкой подлинности, чтобы дать пользователям возможность создавать потоки и работать с ними непосредственно на веб-сайте или в приложении, а не в Power Automate. Для работы такого SDK пользователям нужно будет входить с учетной записью Майкрософт или через Azure Active Directory.
Note
Скрыть фирменную символику Power Automate при использовании мини-приложений невозможно.
Архитектура мини-приложений
Мини-приложения Power Automate работают путем внедрения iframe, который ссылается на Power Automate в ведущем приложении. Ведущее приложение предоставляет маркер доступа, необходимый мини-приложению Power Automate. Пакет JS SDK для Power Automate позволяет ведущему приложению инициализировать и контролировать жизненный цикл мини-приложения.

Сведения о пакете JS SDK
Разработчики Power Automate предоставляют пакет JS SDK для упрощения интеграции мини-приложений Flow в сторонние приложения. Пакет JS SDK для Flow можно скачать по общедоступной ссылке в службе Flow. Он позволяет ведущему приложению обрабатывать события из мини-приложения и взаимодействовать с приложением Flow, отправляя в мини-приложение действия. События и действия мини-приложения зависят от его типа.
Инициализация мини-приложения
Перед инициализацией мини-приложения необходимо добавить в ведущее приложение ссылку на пакет JS SDK для Flow.
<script src="https://flow.microsoft.com/Content/msflowsdk-1.1.js"></script>
Создайте экземпляр пакета JS SDK, передав необязательные значения hostName и locale в объект JSON.
var sdk = new MsFlowSdk({
hostName:'https://flow.microsoft.com',
locale:'en-US'
});
| Имя (название) | Обязательно/необязательно | Описание |
|---|---|---|
hostName |
Необязательная | Имя узла Power Automate, например https://flow.microsoft.com |
locale |
Необязательная | Языковой стандарт клиента для мини-приложения (если не передан, по умолчанию используется en-Us) |
После создания экземпляра JS SDK вы можете инициализировать и внедрить мини-приложение Power Automate в родительский элемент в ведущем приложении. Для этого добавьте HTML-тег div:
<div id="flowDiv" class="flowContainer"></div>
Затем инициализируйте мини-приложение Power Automate с помощью метода renderWidget() пакета JS SDK. Укажите тип мини-приложения и соответствующие параметры.
var widget = sdk.renderWidget('<widgettype>', {
container: 'flowDiv',
flowsSettings: {},
templatesSettings: {},
approvalCenterSettings: {},
widgetStyleSettings: {}
});
Ниже приведен пример стиля контейнера, который вы можете изменить в соответствии с размерами ведущего приложения.
<head>
<style>
.flowContainer iframe {
width: 400px;
height: 1000px;
border: none;
overflow: hidden;
}
</style>
</head>
Ниже приведены параметры для renderWidget():
| Параметр | Обязательно/необязательно | Описание |
|---|---|---|
container |
Обязательные | Идентификатор элемента div на ведущей странице, куда будет внедрено мини-приложение. |
environmentId |
Необязательная | Мини-приложениям требуется идентификатор среды. Если он не указан, используется среда по умолчанию. |
flowsSettings |
Необязательная | Объект настроек Power Automate |
templatesSettings |
Необязательная | Объект параметров шаблона |
approvalCenterSettings |
Необязательная | Объект параметров утверждения |
Маркеры доступа
После запуска метода renderWidget() пакет JS SDK инициализирует элемент iframe, который ссылается на URL-адрес мини-приложения Power Automate. Этот URL-адрес содержит все настройки в параметрах строки запроса. Перед инициализацией мини-приложения ведущее приложение должно получить для пользователя маркер доступа Power Automate (JWT-маркер Azure Active Directory с аудиторией https://service.flow.microsoft.com). Мини-приложение инициирует событие GET_ACCESS_TOKEN, чтобы запросить маркер доступа у ведущего приложения. Последнее должно обработать событие и передать маркер мини-приложению:
widget.listen("GET_ACCESS_TOKEN", function(requestParam, widgetDoneCallback) {
widgetDoneCallback(null, {
token: '<accesstokenFromHost>'
});
});
Ведущее приложение отвечает за обслуживание маркера и его передачу с допустимым сроком действия в мини-приложение при получении соответствующего запроса. Если мини-приложение открыто в течение продолжительного времени, ведущее приложение должно проверить срок действия маркера и при необходимости обновить маркер перед его передачей в мини-приложение.
Определение готовности мини-приложения
После успешной инициализации мини-приложение порождает событие для уведомления о своей готовности. Ведущее приложение может ожидать передачи данных события WIDGET_READY и выполнять собственный дополнительный код.
widget.listen("WIDGET_READY", function() {
console.log("The flow widget is now ready.");
// other host code on widget ready
});
Параметры мини-приложения
FlowsSettings
FlowsSettings можно использовать для настройки функциональных возможностей мини-приложения Power Automate.
flowsSettings?: {
createFromBlankTemplateId?: string;
flowsFilter?: string;sc
tab?: string;
};
| Параметр | Обязательно/необязательно | Описание |
|---|---|---|
createFromBlankTemplateId |
Обязательные | Использование GUID шаблона, когда пользователь нажимает кнопку Создать с нуля в мини-приложении Flow. |
flowsFilter |
Необязательная | Мини-приложение Power Automate применяет указанный фильтр при выводе списка потоков. Например, оно может отобразить потоки, ссылающиеся на определенный сайт SharePoint. flowsFilter: "operations/any(operation: operation/sharepoint.site eq 'https://microsoft.sharepoint.com/teams/ProcessSimple' )" |
tab |
Необязательная | Активная вкладка по умолчанию для отображения в мини-приложении Power Automate. Например: tab:'sharedFlows' отображает вкладку рабочей группыtab:'myFlows' отображает вкладку "Мои потоки". |
TemplatesSettings
Этот параметр применяется ко всем мини-приложениям, которые позволяют создавать потоки на основе шаблона, включая мини-приложения Flows, FlowCreation и Templates.
templatesSettings?: {
defaultParams?: any;
destination?: string;
pageSize?: number;
searchTerm?: string;
templateCategory?: string;
useServerSideProvisioning?: boolean;
enableDietDesigner?: boolean;
};
| Параметр | Обязательно/необязательно | Описание: |
|---|---|---|
defaultParams |
Необязательная | Параметры времени разработки, используемые при создании облачного потока на основе шаблона, например: defaultParams: {'parameters.sharepoint.site': 'https://microsoft.sharepoint.com/teams/ProcessSimple', 'parameters.sharepoint.list': 'b3a5baa8-fe94-44ca-a6f0-270d9f821668' } |
destination |
Необязательная | Допустимые значения — "new" или "details". Если задано "details", при создании облачного потока на основе шаблона отображается страница сведений. |
pageSize |
Необязательная | Число отображаемых шаблонов (размер страницы). Размер по умолчанию = 6 |
searchTerm |
Необязательная | Отображение шаблонов, соответствующих условию поиска. |
templateCategory |
Необязательная | Отображение шаблонов в определенной категории |
ApprovalCenterSettings
Применяется к мини-приложениям ApprovalCenter.
approvalCenterSettings?: {
approvalsFilter?: string;
tab?: string;but
showSimpleEmptyPage? boolean;
hideLink?: boolean
};
| Параметр | Обязательно/необязательно | Описание |
|---|---|---|
hideLink |
Необязательная | Если задано значение true, мини-приложение скрывает полученные и отправленные ссылки на утверждение |
approvalsFilter |
Необязательно | Мини-приложение утверждения будет применять указанный фильтр утверждения при выведении списка утверждений, например: approvalsFilter: 'properties/itemlink eq \'https://microsoft.sharepoint.com/teams/ProcessSimple/_layouts/15/listform.aspx?PageType=4&ListId=737e30a6-5bc4-4e9c-bcdc-d34c5c57d938&ID=3&ContentTypeID=0x010010B708969A9C16408696FD23801531C6\'' approvalsFilter: 'properties/itemlinkencoded eq \'{Your base64 encoded item link url} \'' |
tab |
Необязательная | Активная вкладка по умолчанию для отображения в мини-приложении Flow. Допустимые значения: "receivedApprovals" (полученные утверждения), "sentApprovals" (отправленные утверждения) |
showSimpleEmptyPage |
Необязательная | Если утверждения отсутствуют, отображается пустая страница. |
hideInfoPaneCloseButton |
Необязательная | Скрывает на панели сведений кнопку "Закрыть" (например, если она уже есть в ведущем приложении). |
События мини-приложений
Мини-приложения Power Automate поддерживают события, и ведущее приложение может ожидать передачи данных об этих событиях в течение всего жизненного цикла мини-приложения. Мини-приложение Power Automate поддерживает два типа событий: с односторонним уведомлением (например, Widget_Ready) и инициируемые мини-приложением для получения данных от ведущего (Get_Access_Token). Чтобы отслеживать передачу данных от конкретных событий, отправляемых мини-приложением, в ведущем приложении используется метод widget.listen().
Использование
widget.listen("<WIDGET_EVENT>", function() {
console.log("The flow widget raised event");
});
Поддерживаемые события по типам мини-приложений
| Событие мини-приложения | Сведения |
|---|---|
WIDGET_READY |
Мини-приложение загружено. |
WIDGET_RENDERED |
Мини-приложение загружено и завершена отрисовка пользовательского интерфейса. |
GET_ACCESS_TOKEN |
Мини-приложение запрашивает внедрение маркера доступа пользователя. |
GET_STRINGS |
Позволяет узлу переопределять набор строк пользовательского интерфейса, отображаемых в мини-приложении. |
Мини-приложение среды выполнения
| Событие мини-приложения | Сведения | Данные |
|---|---|---|
RUN_FLOW_STARTED |
Активирован запуск потока. | |
RUN_FLOW_COMPLETED |
Поток запущен. | |
RUN_FLOW_DONE_BUTTON_CLICKED |
Пользователь нажал кнопку "Готово" в запущенном потоке. | |
RUN_FLOW_CANCEL_BUTTON_CLICKED |
Пользователь нажал кнопку "Отмена" в запущенном потоке. | |
FLOW_CREATION_SUCCEEDED |
Поток создан. | { flowUrl: string, flowId: string, fromTemplate: string } |
WIDGET_CLOSE |
Возникает, когда ведущее приложение должно закрыть мини-приложение. |
Мини-приложение создания потока
| Событие мини-приложения | Сведения | Данные |
|---|---|---|
FLOW_CREATION_FAILED |
Создать поток не удалось. | |
WIDGET_CLOSE |
Возникает, когда ведущее приложение должно закрыть мини-приложение. | |
TEMPLATE_LOAD_FAILED |
Загрузить шаблон не удалось. | |
FLOW_CREATION_SUCCEEDED |
Поток создан. | { flowUrl: string, flowId: string,fromTemplate?: string } |
Мини-приложение для утверждения
| Событие мини-приложения | Сведения |
|---|---|
RECEIVED_APPROVAL_STATUS_CHANGED |
Изменено состояние полученного утверждения. |
SENT_APPROVAL_STATUS_CHANGED |
Изменено состояние отправленного утверждения. |
Событие GET_STRINGS позволяет вам вводить свой текст для некоторых элементов пользовательского интерфейса, отображаемых в мини-приложении. Возможно изменение следующих строк:
| Ключ строки | Использование в мини-приложении |
|---|---|
FLOW_CREATION_CREATE_BUTTON |
Текст, отображаемый на кнопке создания потока в мини-приложениях создания потока и среды выполнения. |
FLOW_CREATION_CUSTOM_FLOW_NAME |
Начальное значение для имени потока в мини-приложении создания потока. Используется только при включенном параметре allowCustomFlowName. |
FLOW_CREATION_HEADER |
Заголовок, используемый при создании облачного потока в мини-приложениях создания потока и среды выполнения. |
INVOKE_FLOW_HEADER |
Заголовок, используемый при вызове облачного потока в мини-приложении среды выполнения. |
INVOKE_FLOW_RUN_FLOW_BUTTON |
Текст, отображаемый на кнопке вызова или запуска облачного потока в мини-приложении среды выполнения. |
Пример
Вызовите widgetDoneCallback, передав объект JSON с парами "ключ-значение", включающими ключ строки и текст, чтобы переопределить значение по умолчанию.
widget.listen("GET_STRINGS", function(requestParam, widgetDoneCallback) {
widgetDoneCallback(null, {
"FLOW_CREATION_HEADER": "<string override would go here>",
"INVOKE_FLOW_RUN_FLOW_BUTTON": "<string override would go here>"
});
});
Действия мини-приложений
Ведущее приложение использует действия для отправки мини-приложению определенных действий и сообщений. Пакет JS SDK предоставляет метод notify() для отправки мини-приложению сообщения или полезных данных JSON. Каждое действие мини-приложения поддерживает определенную сигнатуру полезных данных.
Использование
widget.notify('<WIDGET_ACTION>', parameterMatchingParameterInterface)
.then(result => console.log(result))
.catch(error => console.log(error))
Пример
Вызовите облачный поток, отправив мини-приложению среды выполнения следующую команду:
widget.notify('triggerFlow', { flowName: flowName, implicitData:implicitData });
Мини-приложение среды выполнения
| Действие мини-приложения | Подробности | Интерфейс параметров |
|---|---|---|
triggerFlow |
Активирует запуск облачного потока. | { flowName: string, implicitData?: string } |
triggerFlowByTemplate |
Активирует запуск облачного потока на основе шаблона. | { templateId: string, implicitData?: string, designTimeParameters?: Record<string, any> } |
getTriggerSchema |
Получает схему триггеров облачного потока. | { flowName: string, } |
closeWidget |
Отменяет все ожидающие действия и активирует событие WIDGET_CLOSE. |
Мини-приложение создания потока
| Действие мини-приложения | Подробности | Интерфейс параметров |
|---|---|---|
createFlowFromTemplate |
Создает облачный поток на основе выбранного определения шаблона. | { templateName: string, designTimeParameters?: Record<string, any> } |
createFlowFromTemplateDefinition |
Создает облачный поток на основе выбранного определения шаблона | { templateDefinition: string } |
closeWidget |
Отменяет все ожидающие действия и активирует событие WIDGET_CLOSE. |
Мини-приложение для утверждения
| Действие мини-приложения | Сведения | Интерфейс параметров |
|---|---|---|
closeInfoPane |
Закрывает панель со сведениями об утверждении. | Н/Д |
Настройка клиентского приложения
Вам потребуется настроить свое клиентское приложение в областях службы Flow (настроить делегированные разрешения). Если приложение Azure Active Directory (AAD), используемое для интеграции мини-приложения, применяет поток авторизации "предоставление кода", необходимо предварительно настроить для него делегированные разрешения, поддерживаемые Power Automate. Делегированные разрешения дают приложению следующие возможности:
- Управление утверждениями
- Чтение утверждений
- Чтение действий
- Управление потоками
- Чтение потоков
Для выбора делегированных разрешений сделайте следующее:
- Перейти к https://portal.azure.com
- Выберите параметр Azure Active Directory.
- Выберите Регистрация приложений в разделе Управление.
- Укажите стороннее приложение для настройки в областях службы Flow.
- Выберите Параметры.

- Выберите Необходимые разрешения в разделе Доступ через API/
- Выберите Добавить.
- Щелкните Выбор API.

- Найдите и выберите Служба Power Automate. Примечание. Чтобы увидеть службу Power Automate, нужно, чтобы хотя бы один пользователь AAD в вашем клиенте вошел на портал Flow (https://flow.microsoft.com)
- Выберите нужные области Flow для приложения, а затем нажмите Сохранить.

Приложение получит маркер службы Flow, который содержит делегированные разрешения в утверждении 'scp' в маркере JWT.
Пример приложения с внедрением мини-приложений потоков
В разделе ресурсов доступен пример одностраничного приложения (SPA) JavaScript, позволяющий вам поэкспериментировать с внедрением мини-приложений потоков на ведущую страницу. Для использования этого примера необходимо зарегистрировать приложение AAD, включив для него поток неявного предоставления разрешения.
Регистрация приложения AAD
- Войдите на портал Azure.
- В левой области навигации выберите Azure Active Directory, а затем выберите Регистрация приложений (предварительная версия) > "Новая регистрация".
- На странице Регистрация приложения введите имя приложения.
- В разделе Поддерживаемые типы учетных записей выберите Учетные записи в любом каталоге организации.
- В разделе URL-адрес перенаправления выберите веб-платформу и задайте значение URL-адреса приложения' в зависимости от веб-сервера. Задайте значение http://localhost:30662/, чтобы запустить пример приложения.
- Выберите Зарегистрировать.
- На странице Обзор приложения зафиксируйте значение идентификатора приложения (клиента).
- Для примера необходимо включить поток неявного предоставления разрешения. В левой области навигации регистрируемого приложения выберите Аутентификация.
- Откройте Дополнительные параметры и в разделе Неявное предоставление установите флажки Токены идентификатора и Маркеры доступа. Токены идентификатора и маркеры доступа являются обязательными, так как в приложении будет выполняться вход пользователей и вызов API Flow.
- Нажмите кнопку Сохранить.
Запуск примера
- Скачайте пример и скопируйте его в локальную папку на вашем устройстве.
- В папке FlowSDKSample откройте файл index.html и в
applicationConfigизменитеclientIDна идентификатор зарегистрированного ранее приложения.
- Пример приложения настроен на использование областей Flow Flows.Read.All и Flow.Manage.All. Чтобы настроить дополнительные области, измените свойство flowScopes в объекте applicationConfig.
- Установите зависимости и запустите пример приложения, выполнив следующие команды:
> npm install > node server.js
- Откройте браузер и введите http://localhost:30662.
- Нажмите кнопку Войти, чтобы пройти в AAD аутентификацию и получить маркер доступа облачного потока.
- Маркер будет указан в текстовом поле Маркер доступа.

- Выберите Загрузить мини-приложение потоков или Загрузить мини-приложение шаблонов, чтобы внедрить соответствующие мини-приложения.

Ссылка для скачивания примера приложения.
Ресурсы
Страницы для тестирования мини-приложения
Узнайте больше об интеграции и параметрах мини-приложений.
- Мини-приложение шаблонов: <https://flow.microsoft.com/test/templateswidget/>
- Мини-приложение создания потока: <https://flow.microsoft.com/test/flowcreationwidget/>
- Мини-приложение среды выполнения: <https://flow.microsoft.com/test/runtimewidget/>
- Мини-приложение центра утверждений: <https://flow.microsoft.com/test/approvalcenterwidget/>
- Мини-приложение потоков: <https://flow.microsoft.com/test/managewidget/>
Языковые стандарты, поддерживаемые мини-приложением
Если инициализируемый языковой стандарт не указан в списке, Flow по умолчанию будет использовать ближайший поддерживаемый языковой стандарт.
| Локаль | Language |
|---|---|
| bg-bg | Болгарский (Болгария) |
| ca-es | Каталанский (Каталанский) |
| cs-cz | Чешский (Чешская республика) |
| da-dk | Датский (Дания) |
| de-de | немецкий (Германия) |
| el-gr | Греческий (Греция) |
| en-Us | английский (США) |
| es-es | Испанский (кастильский) |
| et-ee | Эстонский (Эстония) |
| eu-es | Баскский (Баскский) |
| fi-fi | Финский (Финляндия) |
| fr-fr | французский (Франция) |
| gl-es | Галисийский (Галисия) |
| hi-HU | Венгерский (Венгрия) |
| hi-in | Хинди (Индия) |
| hr-hr | Хорватский (Хорватия) |
| id-Id | Индонезийский (Индонезия) |
| it-It | итальянский (Италия) |
| jp-Jp | Японский (Япония) |
| kk-kz | Казахский (Казахстан) |
| ko-kr | Корейский (Корея) |
| lt-LT | Литовский (Литва) |
| lv-lv | Латышский (Латвия) |
| ms-my | малайский (Малайзия) |
| nb-no | Норвежский (букмол) |
| nl-nl | нидерландский (Нидерланды) |
| pl-pl | Польская (Польша) |
| pt-br | португальский (Бразилия) |
| pt-pt | португальский (Португалия) |
| ro-ro | румынский (Румыния) |
| ru-ru | русский (Россия) |
| sk-sk | Словацкий (Словакия) |
| sl-si | Словенский (Словения) |
| sr-cyrl-rs | Сербский (кириллица, Сербия) |
| sr-latn-rs | Сербский (латиница, Сербия) |
| sv-se | шведский (Швеция) |
| th-th | Тайский (Таиланд) |
| tr-tr | Турецкий (Турция) |
| uk-ua | Украинский (Украина) |
| vi-vn | Вьетнамский (Вьетнам) |
Использование SDK внедрения Power Automate описано в разделе Условия лицензии на программное обеспечение Майкрософт.
Note
Каковы ваши предпочтения в отношении языка документации? Пройдите краткий опрос (обратите внимание, что этот опрос представлен на английском языке).
Опрос займет около семи минут. Личные данные не собираются (заявление о конфиденциальности).