Встала как-то задача по формированию отчета по задачам из Битрикса. Штатными средствами Битрикса быстро уперлись в кривизну доступов (специфическая органиграмма компании требовала, чтобы отчет по задачам директору предоставляло лицо без прав администратора, и находящееся невысоко в самой организационной структуре компании).
Решено было попробовать, на что способен Rest API. Использовать будем вебхуки.
Также оговорюсь, у нас коробочная версия битрикса, хотя на результат это вроде как не влияет.
Настройка Битрикс
Итак, первым делом сделаем вебхук в битриксе. Для этого переходим в Приложения -> Вебхуки -> Добавить вебхук -> Входящий вебхук.
Доступ оставляем только на задачи, название и описание произвольное. В результате битрикс сгенерирует нам ссылку вида: https://YOURBITRIXDOMAIN/rest/****/******/profile
Для данной обработки адрес это YOURBITRIXDOMAIN, а вебхук - rest/****/*****/ без profile в конце.
На этом работа на самом битриксе завершена.
Обработка
Для подключения к битриксу используются стандартные механизмы платформы:
HTTPСоединение, HTTPЗапрос, ЧтениеJSON
Подключение к Битрикс:
Соединение = Новый HTTPСоединение(АдресПортала,,ЛогинПортала, ПарольПортала, ,5, Новый ЗащищенноеСоединениеOpenSSL);
Отправка запроса:
Метод = "tasks.task.list";
Запрос = Новый HTTPЗапрос(Вебхук + Метод + "?" + Параметры);
Где метод tasks.task.list- это метод API битрикса, который возвращает массив задач, каждая из которых содержит массив полей.
Ограничение в 50 задач:
По умолчанию API выдает только 50 элементов, поэтому сначала мы узнаем общее количество элементов в массиве, затем в цикле собираем их все с помощью ключа &start=, который указывает с какой позиции начинать загрузку.
Функция-запрос в битрикс:
Функция ОтправитьЗапрос(Параметры)
ЛогинПортала = Объект.Логин;
ПарольПортала = Объект.Пароль;
АдресПортала = Объект.Адрес;
Вебхук = Объект.Вебхук;
Метод = "tasks.task.list";
Соединение = Новый HTTPСоединение(АдресПортала,,ЛогинПортала, ПарольПортала, ,5, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос(Вебхук + Метод + "?" + Параметры);
Запрос.УстановитьТелоИзСтроки("");
Ответ = Соединение.Получить(Запрос);
Возврат Ответ.ПолучитьТелоКакСтроку();
КонецФункции
Результат вызова функции запихивается в ТЗ и выводится на форму.
Результаты выводятся как есть, без парсинга и прочего. Есть пример для парсинга дат в коде, закомментированный.
Если нужны еще какие-то поля или пояснения - прошу в комментарии.
Специально не сделано никаких привязок к существующим объектам ИБ, и никакого сохранения данных. Предполагалось, что это будет просто отчет по выводу задач за период для оценки KPI каждого сотрудника.
Пример отчета также прилагается.
Тестировалась на платформе 8.3.14.1944, но должна работать на всех