Skip to content

Commit

Permalink
Добавлены примеры для COM, внешней компоненты и команды системы
Browse files Browse the repository at this point in the history
  • Loading branch information
thvvmas committed Nov 15, 2024
1 parent 9a517e2 commit 56b6c82
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 9 deletions.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
103 changes: 94 additions & 9 deletions docs/УправлениеИнтеграциями.md
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@
Переходим к методам программного интерфейса, которые выполняют вызов к системе-корреспонденту

1. **Файловые обмены (через локальный и сетевой каталог)**:
* *Раздел будет дополнен позже по мере разработки новых функций*
* *Расширенный функционал программного интерфейса не предусмотрен*
2. **Файловые обмены через FTP / SFTP (реализовано в отдельном модуле "пбп_ИнтеграцииFTPSFTP")**:
* ПараметрыСообщенияFTPSFTP - возвращает инициализированную структуру параметров сообщения обмена. Ключи:
- Путь - локальный полный путь файла сообщения;
Expand All @@ -252,9 +252,9 @@
Далее идут методы взаимодействия с SFTP-сервером. Так как в платформе нет встроенных функций общения с SFTP-серверами, обмен с ними был реализован с помощью утилит системы, взаимодействие с которыми выполняется посредством выполнения скриптов командной оболочки.
Для взаимодействия с SFTP на ОС Linux используется одна из установленных утилит:

- curl ;
- sshpass;
- expect.
1) curl - служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL;
2) sshpass - утилита командной строки для автоматической передачи пароля SSH при подключении к удаленному хосту через SSH;
3) expect - инструмент для автоматизации и тестирования в ОС 'nix. Скрипт может запустить командный интерпретатор, прочитать переменные окружения, выполнить набор команд Unix для получения информации, и после этого ввести в интерфейс командной строки необходимую информацию.

Сначала происходит проверка того, какая из утилит установлена (в указанной последовательности).
Если одна из утилит найдена, то через нее выполняется bash-скрипт для установки соединения с SFTP-сервером.
Expand All @@ -280,7 +280,7 @@
а также количество первых записей: если не равно 0, то будет выбрано указанное количество первых строк ("ПЕРВЫЕ <КоличествоПервых>"), и структура истории. Если в переданном интеграционном потоке заполнены параметры входа, то они будут добавлены в запрос как отдельные предопределенные условия;
* ИнициализироватьТаблицуЗначенийИзТаблицыВнешнегоИсточника - возвращает инициализированную таблицу значений из таблицы внешнего источника по метаданным с типизированными колонками. Заполняется по имени внешнего источника, имени таблицы, и строке необходимых полей, заполненных через запятую (если не заполнено, то инициализируются все поля таблицы);
5. **COM**:
* *Раздел будет дополнен позже по мере разработки новых функций*
* *Расширенный функционал программного интерфейса не предусмотрен*
6. **REST API**:
* ПолучитьЗапросТекстомИзСоответствияJSON - конвертирует тело HTTP-запроса из соответствия в строку. На вход подается Структура или Соответствие с телом JSON;
* ПодготовитьТаблицуКодовОтветаHTTP - возвращает таблицу значений стандартных кодов ответа HTTP;
Expand All @@ -289,7 +289,7 @@
7. **SOAP**:
* ОтформатироватьXMLЧерезDOM - форматирует XML запрос в строковом виде для удобного чтения. Если содержимое файла идет одной строкой, то оно будет преобразовано в многострочный файл. В параметрах функции передается исходная строка xml-текста и указатель использования отступов: если истина, то будут сформированы отступы в соответствии с правилами форматирования XML;
8. **Внешняя компонента**:
* *Раздел будет дополнен позже по мере разработки новых функций*
* *Расширенный функционал программного интерфейса не предусмотрен*
9. **Командная строка**:
* *Раздел будет дополнен позже по мере разработки новых функций*
10. **Брокеры сообщений**:
Expand All @@ -309,7 +309,8 @@

#### Локальный или сетевой каталог

*Раздел будет дополнен позже по мере разработки новых функций*
Отдельных методов для выгрузки / загрузки файлов в / из локального или сетевого каталога не реализовано.
Выгрузка в локальный или сетевой каталог ничем не отличается от других типов интеграций. В настройках интеграции необходимо указать каталог выгрузки / загрузки файла и выполнить его чтение и пост-обработку. Результаты и промежуточные логи должны сохраняться в историю интеграции.

#### FTP

Expand Down Expand Up @@ -551,18 +552,102 @@ DRIVER={PostgreSQL Unicode}; Data Source=PostgreSQL35W; SERVER=localhost; PORT=5

#### COM

*Раздел будет дополнен позже по мере разработки новых функций*
Отдельных методов для вызова COM-объектов не реализано, но подсистема сохраняет в себе данные наименования COM-объекта и строку подключения к нему. COM-объекты стоит избегать и использовать в крайних случаях, когда без них не обойтись. Например, для взаимодействия с Active Directory в семействе Windows.
Аналогично другим настройкам интеграций создаем предопределенное значение настройки:
```bsl
Процедура ПредопределенныеЗначенияНастройкиИнтеграции(Таблица)
// Добавление
НоваяНастройка = Таблица.Добавить();
НоваяНастройка.Наименование = "Active directory";
НоваяНастройка.ИдентификаторНастройки = "ActiveDirectory";
НоваяНастройка.СтрокаПодключения = "Provider=""ADsDSOObject""";
НоваяНастройка.ИнтегрируемаяСистема = пбп_ИнтеграцииСлужебный.ИнтегрируемаяСистема("ActiveDirectory");
НоваяНастройка.ТипИнтеграции = Справочники.пбп_ТипыИнтеграций.COM;
НоваяНастройка.ТипАвторизации = Перечисления.пбп_ТипыАвторизации.Базовая;
НоваяНастройка.ИмяОбъекта = "ADODB.Connection";
// КонецДобавления
КонецПроцедуры
```
В интеграционном потоке можно прописать функцию или запрос к COM-объекту.
Выполним обращение к COM-объекту Active Directory:
```bsl
// Объявление и заполнение структуры истории
ИнтеграционныйПоток = пбп_ИнтеграцииСлужебный.ИнтеграционныйПоток("ПолучениеДанныхПользователейИзAD");
РеквизитыПотока = пбп_ОбщегоНазначенияСервер.ЗначенияРеквизитовОбъекта(
ИнтеграционныйПоток, "НастройкаИнтеграции.ИнтегрируемаяСистема, НастройкаИнтеграции, ТочкаВхода");
СтруктураНастроек = пбп_ИнтеграцииСлужебный.ПолучитьСтруктуруНастроекИнтеграции(РеквизитыПотока.НастройкаИнтеграции);
// Подключаемся к объекту
Соединение = Новый COMОбъект(СтруктураНастроек.ИмяОбъекта);
Соединение.Provider = СтруктураНастроек.СтрокаПодключения;
// Устанавливаем параметры аутентификации
Соединение.Properties("User ID").Value = <Домен> + "\" + СтруктураНастроек.Логин;
Соединение.Properties("Password").Value = СтруктураНастроек.Пароль;
Запись = Новый COMОбъект("ADODB.recordset");
// В запросе "(&(objectCategory=person)(objectClass=user)); name, mail, telephoneNumber, displayName; subtree"
ТекстЗапроса = РеквизитыПотока.ТочкаВхода;
Запись.Open(ТекстЗапроса, Соединение, 0, 1);
//...
```

#### REST API

#### SOAP

#### Внешняя компонента

*Раздел будет дополнен позже по мере разработки новых функций*
Хранение данных и реализация вызова аналогична обращению к COM, за исключением того, что внешнюю компоненту можно загрузить в пользовательском интерфейсе в справочнике настройки интеграции через гиперссылку "Подключить внешнюю компоненту из файла":

![image](images/ПодключениеВнешнейКомпонентыИзФайла.png)

#### Командная строка

В настройках интеграции в поле "Исполняемый файл" необходимо заполнить путь к исполняемому файлу, от которого будет выполнена команда в оболочке (для Windows - CMD, для Linux и MacOS терминал BASH). Если это команда системы, зарегистрированная в переменных среды, то путь не указывается. В интеграционных потоках прописывается исполняемая команда, а в табличной части указываются предопределенные аргументы системы.
Попробуем открыть конфигуратор 1С в пакетном режиме. В настройках интеграции необходимо указать путь к исполняемому файлу 1С, если путь к ней не зарегистрирован в переменных среды. Если зарегистрирована, то указываем там "1cv8". Далее заполним интеграционный поток следующим образом:

![image](images/ЗапускКонфигуратораВПакетномРежиме.png)

Так же сюда можно добавить параметры аутентификации пользователя и прочие параметры запуска.
Код реализации вызова будет выглядеть так:
```bsl
// Объявление и заполнение структуры истории
ИнтеграционныйПоток = пбп_ИнтеграцииСлужебный.ИнтеграционныйПоток("ЗапускКонфигуратораВПакетномРежиме");
// В строке подключения - путь к исполняемому файлу
РеквизитыПотока = пбп_ОбщегоНазначенияСервер.ЗначенияРеквизитовОбъекта(
ИнтеграционныйПоток, "НастройкаИнтеграции.ИнтегрируемаяСистема, НастройкаИнтеграции.СтрокаПодключения, ТочкаВхода");
СтрокаАтрибутов = "";
// Получаем атрибуты из табличной части в структуре
АтрибутыИЗначения = Справочники.пбп_ИнтеграционныеПотоки.ПолучитьСтруктуруПараметровВхода(ИнтеграционныйПоток, Истина);
Для Каждого КлючИЗначение Из АтрибутыИЗначения Цикл
// Разделить для обозначения команды в строке может отличаться, например: "/", "-", "--"
Разделитель = ?(ПустаяСтрока(СтрокаАтрибутов), "/", " /");
// Разделитель между именем атрибута и его значением может отличаться в зависимости от исполняемого файла / утилиты
СтрокаАтрибутов = СтрокаАтрибутов + Разделитель + КлючИЗначение.Ключ + " """ + КлючИЗначение.Значение + """";
КонецЦикла;
ИтоговаяКоманда = СтрШаблон("%1 %2 %3", РеквизитыПотока.НастройкаИнтеграцииСтрокаПодключения, РеквизитыПотока.ТочкаВхода, СтрокаАтрибутов);
// Для вызова используем аналоги методов БСП для проверки безопасного запуска
ПараметрыЗапускаКоманды = пбп_ФайловаяСистемаПереадресация.ПараметрыЗапускаПрограммы();
ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина;
НачалоВызова = ТекущаяДатаСеанса();
Результат = пбп_ФайловаяСистемаПереадресация.ЗапуститьПрограмму(ИтоговаяКоманда, ПараметрыЗапускаКоманды);
СтруктураИстории.ДлительностьВызова = ТекущаяДатаСеанса() - НачалоВызова;
```

### Брокеры сообщений

*Раздел будет дополнен позже по мере разработки новых функций*

0 comments on commit 56b6c82

Please sign in to comment.