Содержание:
2. Элемент «Процесс Интеграции» и схема процесса интеграции в конфигурации системы 1С: Шина
3. Настройки приложения и панели управления 1С
4. Подключение к 1С: Шина по протоколу AMQP и проверка работы
Внешние информационные системы могут подключаться к 1С: Шине через протокол AMQP. В данном примере рассмотрим, каким образом внешняя система может подключаться к каналам 1С: Шины и отправлять в них сообщения.
Далее рассматривается пример настройки обмена данными между приложением на платформе Node.js и 1С: Шиной. Подключение к очереди 1С: Шины и отправка в неё сообщений будет осуществляться программно на языке JavaScript.
1. Проект в 1С: Шина
Для начала, нужно создать проект с описанием схемы интеграции и опубликовать его на сервере 1С: Шины, создав приложение. Для этого:
1. Переходим на панель управления сервера;
2. Кликаем «Приложения» и «Новое приложение», как показано ниже:
Новое приложение
3. Проверяем, что б было следующее заполнение:
Проверяем заполнение
4. Задаём имя проекта — ОбменAMQP и нажимаем «Tab». Система сама заполнит остальные поля и включит режим разработки для создаваемого приложения, как на скриншоте ниже:
Задаём имя проекта
5. Выбираем тип СУБД и кликаем по «Создать»:
Выбираем тип СУБД
6. Новое приложение появится в списке и поменяет статус на «Работает»:
2. Элемент «Процесс Интеграции» и схема процесса интеграции в конфигурации системы 1С: Шина
Теперь нужно открыть приложение в среде разработки и добавить в него элемент проекта — процесс интеграции, для этого:
1. Кликаем «Разработать...» в конце строки:
Разработать
2. Система откроет новую вкладку браузера для среды разработки и запросит пароль. Вводим администраторский пароль и кликаем «Войти»:
Войти
3. Появится рабочая область и откроется проект:
Рабочая область
4. Добавляем новый элемент проекта — «Процесс Интеграции». Для этого в представлении «НАВИГАТОР ПРОЕКТА» нажимаем «Основной», затем выбираем «Новый» и «Элемент проекта»:
Элемент проекта
5. Выбираем вид добавляемого элемента проекта:
Выбираем вид добавляемого элемента проекта
6. Задаём имя создаваемого элемента — «ОбменТиповой» — и нажимаем «Ввод»:
Задаём имя создаваемого элемента
7. Система создаст в проекте новую интеграцию и откроет редактор:
Новая интеграция
Теперь создаём схему по интеграционному процессу, которая объясняет взаимодействие информационных систем. Схема интеграции будет выглядеть следующим образом, как представлено на скриншоте с примером ниже:
Схема интеграции
Эта схема включает в себя одну группу участников: «Приложения». В эту группу позже, после публикации проекта, будет добавлена одна информационная система, написанная на языке JavaScript.
Для участника из группы, связанной с узлом вида «Канал1СНазначение» и «Канал1СИсточник», в 1С: Шина создаются две индивидуальные очереди: для отправки и получения. Приложение подключается к очередям по протоколу AMQP. После того как сообщение отправлено приложением, оно попадает в узел «Канал1СНазначение», где, дойдя до узла «ФайлНазначение», записывается в файл.
Чтобы создать схему интеграции, выполняем следующее:
1. Добавляем на схему группу участников. Для этого выбираем «ГруппаУчастников» и кликаем в верхней части схемы, чтобы разместить там группу:
ГруппаУчастников
2. Выделяем группу и в представлении «СВОЙСТВА» задаём её имя:
СВОЙСТВА
3. Добавляем на схему узел «Канал1СИсточник» и задаём имя:
Канал1СИсточник
4. Добавляем на схему узел «ФайлНазначение»:
ФайлНазначение
5. Аналогично добавляем на схему узлы «Канал1СНазначение» и «ФайлИсточник» и задаём первому имя:
«Канал1СНазначение» и «ФайлИсточник»
6. Связываем группу участников «Приложение» с узлами «ИзПриложения» и «ВПриложение» элементом «Связь»:
Связь
7. Следующим шагом соединяем маршрутом узел «ИзПриложения» с узлом «ФайлНазначение», а также «ФайлИсточник» с узлом «ВПриложение»:
Соединяем маршрутом узел
8. Для узла «ФайлИсточник» зададим свойства: Каталог и Имя файла:
Узел «ФайлИсточник»
9. Для узла «ФайлНазначение» зададим также свойства: Каталог и Имя файла:
Узел «ФайлНазначение»
10. В поле «Существующий файл» кликаем на выпадающий список и выбираем «Дописывать»:
Дописывать
11. После того как проект готов, его следует опубликовать на сервере таким образом:
Проект готов
Публикуем на сервер
12. Открываем готовое приложение:
Открываем готовое приложение
13. Для аутентификации выбираем и вводим учётку администратора:
Вводим учётку администратора
14. Появится приложение, которое содержит перечень процессов интеграции:
3. Настройки приложения и панели управления 1С
Создадим участников процесса по интеграции и добавим их в соответствующие группы:
1. Открываем приложение;
2. Кликаем «Инфосистемы» и «Добавить систему»:
Добавить систему
3. Задаём код системы — «П1» и наименование — «Приложение», кликаем «Добавить»:
Задаём код системы
4. В справочнике: Информационные системы появится созданный участник:
Созданный участник
5. Теперь нужно получить ключ, для этого, нажимаем на информационную систему, а затем на «Выдать ключ API»:
Выдать ключ API
6. Копируем и сохраняем «Идентификатор ключа» и «Секрет клиента»:
«Идентификатор ключа» и «Секрет клиента»
7. Переходим на вкладку «Процессы» и кликаем на «Основной::ОбменТиповой»:
Основной::ОбменТиповой
8. На схеме выбираем группу «Приложения», а затем «Состав группы»:
Состав группы
9. Появится список информационных систем, входящих в группу «Приложения». Сейчас в группе нет ни одной информационной системы. Ставим «галочку» у информационной системы «Приложение» и нажмите «Добавить в группу»:
Добавить в группу
Состав группы Приложения
10. Закрываем окно «Состав группы Приложения».
4. Подключение к 1С: Шина по протоколу AMQP и проверка работы
Сохраним название приложения, идентификатор ключа и секрет клиента. Помимо этого, сохраним в переменные хост и порт, на котором работает сервер 1С: Шины, а также протокол передачи данных, для этого, нужен следующий программный код 1С:
let application = НАЗВАНИЕ_ПРИЛОЖЕНИЯ;
let id_key = ИДЕНТИФИКАТОР_КЛЮЧА;
let client_secret = СЕКРЕТ_КЛИЕНТА;
let hostname = ИМЯ_ХОСТА;
let port = ПОРТ; // Впишите имя порта
let protocol = ПРОТОКОЛ; // Впишите протокол
Замечание: Название приложения можно найти в URL-адресе самого приложения так:
Найти Название приложения
Теперь нужно аутентифицировать информационную систему и получить токен, после чего с полученным токеном обратиться к серверу 1С: Шины и подключиться к очереди, в которую приложение будет отправлять сообщения, для этого, напишем следующее:
// Отправка запроса к серверу на получение токена
let request = require('request');
let cookie_jar = request.jar();
let requestic = request.defaults({ jar: cookie_jar });
const base64data = Buffer.from("${id_key}:${client_secret}', 'utf8').toString("base64');
requestic.post({
url: ${protocol}://${hostname}:${port}/auth/oidc/token",
headers: {
"Content-Type": "application/x-www-form-urlencoded", "Authorization": "Basic " + base64data
},
body: 'grant_type=client_credentials', json: false
}, authenticationHandler);
// Обработка результатов аутентификации, получение имени очереди для подключения function authenticationHandler(_err, _httpResponse, body) {
const jbody = JSON.parse(body);
const id_token = jbody.id_token;
request1c.get({
url: `${protocol}://${hostname}:${port}/applications/${application}/sys/esb/runtime/channels`,
headers: {
'Authorization': 'Bearer' + id_token
},
body: '',
json: false,
},
function (_err, httpResponse, body) {
const parsed_body = JSON.parse(body)
const sender = parsed_body.items[0].destination
const receiver = parsed_body.items[1].destination
connectQueue(id_token, sender, receiver)
}
}
}
После этих действий, подключимся к очереди, настраиваем обработчики входящих сообщений, а также напишем код для отправки сообщений (здесь на отправление каждые десять секунд):
// Подключение к очереди
function connectQueue(id_token, senderDestination, receiverDestination) {
const amqpuri = require('amqpuri');
// формирование URI для подключения к очереди
const uri = amqpuri.format({
hostname: hostname,
port: 6698,
vhost: "/applications/${application)",
username: id_token,
password: id_token,
frameMax: 1000000,
channelMax: 7000,
heartbeat: 600e,
locale: 'en_EN'
});
let AMQPClient = require('amqple').client;
const activeMQPolicy = require("amqple").Policy;
let queueclient = new AMQPClient(activeMQPolicy.ActiveMQ); // Uses PolicyBase default policy
// Данную строку следует раскомментировать, если возникнут ошибки, связанные со spread
// Promise = require('bluebird')
// Переменная-счетчик
let count=0;
// Создание соединения с очередями сообщений
queueClient.connect(uri, { 'saslMechanism': 'PLAIN' }).then(function () {
return Promise.all([
queueClient.createReceiver(receiverDestination),
queueClient.createSender (senderDestination)
]);
})
// Обработка полученных сообщений
.spread(function (receiver, sender) {
receiver.on('message', function (message) {
console.log('Message received: ', message.body.toString('utf8'));
});
receiver.on('errorReceived', function (err) {
console.log('errorReceived:', err);
});
receiver.on('error', function (error) {
console.log('Error: ', error);
});
// Отправка сообщений с интервалом в 10 секунд
setInterval(() => {
count++
let request = {
body: new Buffer.from(`Сooбшение номер: ${сount} \n`),
header: { durable: true }
};
sender.send(request);
}, 10000);
}
)
.error(function (err) {
console.log("Error: ", err);
});
}
Чтобы запустить скрипт, предварительно необходимо установить программную платформу «Node.js».
Запускаем процесс интеграции, для этого переходим на страницу приложения и на карточке процесса интеграции нажимаем на иконку запуска, как показано в примере далее:
Запускаем процесс интеграции
Теперь мы можем отправить сообщение в 1С: Шину. Скачиваем архив с проектом и извлекаем его.
Открываем файл «application.js», чтобы его открыть, можно задействовать текстовый редактор, либо интегрированную среду разработки. Вписываем значения переменных, как показано на примере кода:
let application = 'APPLICATION_NAME'; // Bпишите имя приложения
let id_key = 'ID_KEY'; // Впишите идентификатор ключа
let client_secret = 'CLIENT_SECRET'; // впишите секрет клиента
let hostname = 'HOST_NAME'; // впишите имя Xоста
let port = 'PORT'; // впишите имя порта
let protocol = 'PROTOCOL'; // впишите протокол
Сохраняем.
После этого, открываем командную строку и переходим в папку, в которой содержатся файлы «package.json» и «application.js»:
cd amqp
Затем установим все необходимые библиотеки, которые будут использоваться для запуска скрипта «application.js». Чтобы их установить, выполняем в командной строке:
npm install
И запускаем скрипт:
node application.js
Открываем приложение 1С: Шина, счётчик сообщений увеличился, как показано в примере:
Счетчик сообщений
Кликаем на карточку процесса интеграции и переходим во вкладку «Каналы». Два сообщения, которые были отправлены из скрипта в канал «ИзПриложения», были доставлены к получателю:
Каналы
Чтобы это проверить, открываем файл «СообщенияИзШины.txt», там будет:
Сообщение номер: 1
Сообщение номер: 2
Теперь отправим сообщение в наше приложение. Создаём файл с сообщением, назовём его «СообщениеВШину.txt», после чего следует перенести его в папку, которая указана в свойствах узла «ФайлИсточник». В карточке процесса интеграции, во вкладке каналы отобразится, что одно сообщение попало в канал «ВПриложение» и доставлено получателю:
Сообщение попало в канал «ВПриложение»
Обращаемся к командной строке, в которой запущен скрипт, кликаем «Ввод», видим полученное сообщение:
PS C:\Users\amqp\ node applicastion.js
Message received : Сообщение, отправленное в приложение
Специалист компании ООО "Кодерлайн"
Андрей Прыкин