Публикации¶
Публикация объектов позволяет использовать их вне "Первой Формы", внешними системами. При публикации создаются ссылки (Url), по которым можно обратиться к объектам напрямую. В настоящее время в "Первой Форме" можно публиковать SQL View и смарт-пакеты (пакеты действий).
SQL View динамически создают наборы данных в соответствии с определенным SQL-запросом в момент его выполнения. При этом обработка данных, хранящихся в системе "Первая Форма", выполняется непосредственно на SQL Server. Результаты вычислений могут быть сохранены в XML-файле. В дальнейшем эти данные могут использоваться следующими способами:
-
Данные могут быть загружены в Excel для дальнейшей обработки. Например, использование SQL View позволяет выгрузить в Excel большие и сложно структурированные объемы данных гораздо быстрее, чем с помощью встроенных механизмов экспорта данных из категорий "Первой Формы" в Excel;
-
Данные могут быть выгружены во внешние системы, в том числе с применением XSLT преобразований.
Пакеты действий могут использоваться при интеграции с внешними системами для выполнения POST и GET запросов к "Первой Форме", а также при расширении возможностей самой "Первой Формы" — например, для вывода дополнительной (расчетной) информации на карточку задачи, для изменения параметров задач по кнопке из портального блока и т.п.
ℹ️ При публикации пакетов действий используется смарт-действие "HTTP ответ". Обратите внимание на необходимость очистки тела ответа от лишних символов.
По умолчанию в списке отображаются все опубликованные объекты. С помощью отбора по статусу можно отобразить список только активных или только неактивных публикаций. Активной публикацией считается опубликованный и доступный для использования из внешних систем объект.
| Параметр | Описание |
|---|---|
| ID | Уникальный номер опубликованного объекта, присваивается системой автоматически и не редактируется. Список отсортирован по ID по убыванию по умолчанию — новые публикации отображаются вверху. Кликните по заголовку колонки для изменения порядка сортировки |
| Тип публикации | Возможные варианты: -Sql-view -Пакет действий |
| Публикация | Клик по строке откроет окно редактирования конфигурации публикации. |
В окне редактирования доступны ссылки (Url), по которым можно обратиться к объекту | Описание | Описание публикации (текстовое) | | --- | --- | | Разрешен анонимный доступ | Строки публикаций, для которых установлено разрешение анонимного доступа, автоматически выделяются красным цветом | | Виден всем | Публикация доступна для всех пользователей системы | | Группы доступа | Список групп, которым разрешен доступ к публикации |
В случае возникновения ошибки доступа (401 error) при переходе в публикацию, если в API присутствует параметр URL ?auth=true, будет совершена переадресация на страницу авторизации в системе для ввода логина и пароля. В 257 версии страница логина указывается в ключе "AuthTokenLoginUrl" appsettings.json
Создание публикации¶
Для создания публикации нажмите на кнопку Добавить публикацию, после чего откроется форма создания. Обязательные поля отмечены символом *.
Редактирование публикации¶
Для перехода к форме редактирования публикации нажмите на ней в общем списке. Конфигурация публикации определяет название и активность объекта, а также параметры запросов (Post или Get).
| Параметр | Описание |
|---|---|
| Описание | Описание объекта в свободной форме. Желательно, чтобы описание отображало смысл объекта |
| Алиас* | Уникальное название объекта (задается в свободной форме) |
| Тип публикации* | Возможные значения: -Sql-view -Пакет действий (По умолчанию) |
| Тип запроса* | Для SQL View доступен только метод GET, для пакетов действий — методы GET, HEAD, POST, PUT и DELETE. Метод HEAD работает аналогично GET, но сервер возвращает только заголовки ответа, такие как Content-Type или Content-Length, без самого тела |
| Тип содержимого | Настройка доступна только для запросов с типом Post. Возможные значения: -application/json -application/xml -application/x-www-form-urlencoded -multipart/form-data -plain text -text/xml |
| Параметры запроса | Передаваемые параметры необходимо задать в таблице. См. ниже |
| URL | Формируются автоматически на основании конфигураций публикации и объекта доступа. Для SQL View формируются два URL для форматов csv и xml |
| Активность публикации | При включенном флажке объект считается опубликованным и доступным для использования из внешних систем. При обращении к объекту с отключенной активностью публикации возвращается ошибка 403 |
| Объект | Имя сохраненного SQL View в базе данных или название общего смарт-пакета с включенным флажком "Для публикаций". Обратите внимание на особенности публикуемых смарт-пакетов |
| XSLT схема | (только для SQL View) |
Указывается, если для запроса SQL View нужно определить схему для XSLT-преобразований. См. ниже
Параметры запроса¶
Для добавления параметра запроса нажмите кнопку Добавить параметр, для редактирования уже существующего параметра достаточно нажать на нужную строку в таблице.
| Столбец | Значение |
|---|---|
| Тип параметра | Для методов Get, Put и Delete используется тип QueryString, а для метода Post — QueryString и RequestBody (параметр RequestBody может содержать любые входящие и исходящие параметры) |
| Ключ параметра | Имя параметра |
| Валидация параметра | Возможные варианты: -Строка -Число с плавающей точкой -Целое число -Дата |
| Обязательность параметра | Если флажок включен, то параметр обязателен. Если в запрос не передан какой-то из обязательных параметров, то в качестве результата запроса возвращается bad request |
| Формат | Формат даты в виде строки вида dd.MM.yyyy. См. здесь Параметр задается только если в колонке "Валидация параметра" выбрано значение "Дата" |
| Массив | Возможные варианты: -Нет -Строка с разделителем. В этом случае в качестве параметра должна передаваться строка вида item1#item2#item3, где # — символ-разделитель (задается в параметре "Разделитель массива") -Массив JSON. В этом случае в качестве параметра должна передаваться строка вида ["item1", "item2", "item3"] |
| Разделитель массива | Символ разделителя в массиве (например, запятая). |
ℹ️ В SQL View параметры не используются
Параметр задается только если в колонке "Массив" выбрано значение "Строка с разделителем" Обратите внимание: в смарт-скриптах (LUA) в публикациях типа POST параметр находится в EVENTPARAMS.
Пример:
PARAMS = UTILS:json_decode(EVENTPARAMS["PublishedObjectParameters");] --json входящих параметров
str = PARAMS["requestBody"\"data"]
Особенности публикуемых смарт-пакетов¶
ℹ️ В опубликованном пакете действий последним должно быть смарт-действие "HTTP ответ" (см. Список возможных смарт-действий)
В смарт-выражения, которые создаются в этом смарт-пакете, передается параметр \@eventParam0. Он содержит строку в формате JSON со всеми параметрами запроса.
Обращаться к значениям этих параметров можно через функцию JSON_VALUE:
JSON_VALUE(\@eventParam0, \'\$.queryString.paramName\')
Формирование тела ответа и кода ответа с помощью скрипта
Если в рамках публикации выполняется сложный высоконагруженный скрипт, который должен возвращать не только сам результат, но и признак успешности выполнения, используйте в публикуемом пакете два смарт-действия:
-
сначала "Выполнить sql скрипт" (раздел "Прочее") — в нем можно сформировать выражение формата JSON, которое будет содержать и тело ответа, и код ответа
-
затем "HTTP-ответ", в котором можно обратиться к результату предыдущего действия и получить подготовленные тело ответа и код ответа.
Таким образом, скрипт не придется выполнять дважды.
XSLT-схема¶
Схема XSLT используется для преобразования данных в определенный XML формат, соответствующий потребностям какой-либо внешней системы.
Например, представление SQL View может содержать данные для отображения на сайте компании в каталоге товаров. Те же данные могут использоваться и для внутренней аналитики в Excel, и для выгрузки в учетную систему. В этом случае удобно для SQL View создать один или несколько шаблонов для преобразования данных в соответствующие форматы.
Правила формирования схемы XSLT можно посмотреть здесь.
Если схема настроена, то при выгрузке XML производится трансформация по этому шаблону.
ℹ️ Одно и то же представление SQL View может быть добавлено в список опубликованных несколько раз, и для каждой такой записи может быть настроен свой шаблон XSLT. Благодаря этому одни и те же данные, полученные из "Первой Формы", могут выгружаться в разных форматах для использования в разных внешних системах.
Объект доступа¶
Конфигурация объекта доступа определяет права доступа к объекту. Доступ выдается на уровне групп или с помощью смарт-выражения.
| Параметр | Описание |
|---|---|
| Описание | Название объекта (в свободной форме) |
| Разрешить анонимный доступ | Если настройка активна, опубликованный объект будет доступен без авторизации. |
| Виден всем | Если настройка активна, опубликованный объект будет доступен всем пользователям |
| Право просмотра | Доступ к объекту на уровне групп. |
ℹ️ Анонимные публикации должны предоставлять только ту информацию, которая не содержит коммерческой тайны ℹ️ Недопустимо использовать анонимные публикации для вызова действий в бизнес-процессах ℹ️ Если вы разрешаете анонимный доступ к объекту публикации, проверьте, внесены ли необходимые изменения в файл web.config (в частности, должна быть секция location для path="app/v1.2/api/publications" )
Чтобы добавить группу, участники которой получат право просматривать отчет, в блоке Право просмотра выберите нужную группу из выпадающего списка.
ℹ️ Если указаны и группы, и смарт-выражение, то итоговый список доступа формируется как пересечение этих множеств (логическое И).
| Параметр | Описание |
|---|---|
| Специальное право | Доступ к объекту ограничивается специальным правом, которое выдается на группу |
| По смарт-выражению | Смарт-выражение должно возвращать массив ID пользователей. При редактировании смарт-выражения доступен контекст — JSON параметров опубликованного объекта. |
ℹ️ Если указаны и группы, и смарт-выражение, то итоговый список доступа формируется как пересечение этих множеств (логическое И).
По окончании настройки нажмите кнопку Сохранить.
Использование SQL View для работы в Excel¶
Для работы с динамической таблицей, формируемой в соответствии с представлением SQL View, используется приложение Excel. Чтобы загрузить данные, выполните импорт из файла XML.
Для Excel 2016¶
1. Скопируйте ссылку на XML-файл в опубликованном SQL View
2. В файле Excel на закладке "Данные" выберите пункт "Из других источников" -> "Из импорта данных XML".
3. В открывшемся окне в поле "Имя файла" укажите строку вида
https://\<сервер_1Формы>/app/v1.2/api/publications/data/sqlView1?contentType=xml
где sqlView1 — алиас опубликованного SQL View.
Затем нажмите кнопку Открыть.
4. Выберите начальную ячейку, в которую будут импортированы данные, и нажмите кнопку ОК.
После этого данные из представления SQLView будут загружены.
ℹ️ Для работы с SQL View пользователь должен быть авторизован в Internet Explorer
Для более ранних версий Excel¶
1. Скопируйте ссылку на XML-файл в опубликованном SQL View
2. В файле Excel на закладке "Данные" выберите пункт "Из Интернета"
3. В открывшемся окне в поле "Адрес" вставьте сохраненный адрес ссылки на опубликованный SQL и нажмите ввод.
Ссылка имеет вид:
https://\<сервер_1Формы>/app/v1.2/api/publications/data/sqlView1?contentType=xml
где sqlView1 — алиас опубликованного SQL View.
Откроется содержимое XML-файла. Щелкните на значок для таблиц, которые нужно импортировать. Соответствующие блоки XML-файла будут выделены цветом. Затем нажмите кнопку "Импорт".
4. В открывшемся окне подтвердите согласие на создание схемы на основе данных из XML-источника.
5. Выберите начальную ячейку, в которую будут импортированы данные, и нажмите кнопку "ОК".
После этого данные из представления SQLView будут загружены.
Basic Authentication в публикациях¶
В системе реализована поддержка Basic Authentication для API публикаций. Данный механизм позволяет выполнять аутентификацию с использованием логина и пароля без генерации токенов авторизации.
ℹ️ Basic Authentication — это метод аутентификации, при котором клиент передает логин и пароль в заголовке HTTP-запроса. Учетные данные уникальны для каждого контура и не используются токены, параметры запроса или дополнительные заголовки
Процесс аутентификации¶
1. Для работы Basic Authentication должны быть выполнены два условия: API /app/v1.2/api/publications/{publicationType}/{publicationAlias} должен быть помечен специальным атрибутом, и путь должен соответствовать шаблону, указанному в настройках.
2. Настройка разрешенных путей осуществляется с помощью ключа AuthBasicAllowedPaths в конфигурационном файле appsettings.json. Параметр поддерживает регулярные выражения, разделенные символами ";" или ",". По умолчанию Basic Authentication отключен даже для API с установленным атрибутом до тех пор, пока не будут заданы соответствующие шаблоны путей.
Примеры¶
- Разрешить Basic Authentication для всех путей (разрешенных атрибутом):
"AuthBasicAllowedPaths": ".*"
- Разрешить Basic Authentication для одного конкретного пути:
"AuthBasicAllowedPaths": "/app/v1\\.2/api/publications/action/get-sales"
ℹ️ Не забывайте экранировать значимые символы регулярных выражений
- Разрешить Basic Authentication для двух соответствующих шаблонам путей:
"AuthBasicAllowedPaths": ".*api/publications/action/first-.*;.*api/publications/action/second-.*"
3. Приоритет всегда отдается токенной аутентификации. Обработчик Basic Authentication активируется только в случае, если токенная аутентификация не смогла верифицировать пользователя.
4. При первом обращении к API с включенной Basic Authentication возвращается заголовок WWW-Authenticate: Basic realm="{some-realm}", после чего браузер предлагает ввести учетные данные.
5. Каждый запрос с использованием Basic Authentication эквивалентен входу через стандартную форму аутентификации: проверяются логин и пароль в провайдере аутентификации, учитываются ограничения на количество неуспешных попыток входа по IP и логину — задается в опции общих насроек приложения Максимальное число попыток логина до блокировки, выполняется логирование всех попыток входа и обновляется время последней активности пользователя.
Ограничения безопасности¶
Для Basic Authentication не работает двухфакторная аутентификация. Если у пользователя включена двухфакторная аутентификация, запрос с Basic Authentication завершится с ошибкой 401 Unauthorized.
Для Basic Authentication отключена проверка капчи. Опции максимального количества попыток входа до требования капчи в общих насройках приложения (Максимальное число попыток логина пользователя до капчи и Максимальное число попыток логина с IP до капчи) не применяются к данному методу аутентификации.
ℹ️ Basic Authentication считается рискованным с точки зрения безопасности и разрешается только в исключительных случаях после индивидуального рассмотрения каждого кейса. Не рекомендуется использовать данный метод в высоконагруженных сценариях
Предпочтительно применять учетные данные пользователей с паролями, хранящимися в базе данных, поскольку аутентификация AD-пользователей требует запросов к Active Directory с потенциальными рисками блокировки учетных записей и увеличения времени отклика.
Описание работы с публикациями в прежнем интерфейсе администрирования Полезные ссылки
Конфигурирование аутентификации по токенам