Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Как добирать данные по объекту из внешних источников по API
Обогащение данных по контрагенту из разных источников
Представьте у нас есть база контрагентов и мы хотим обогащать данные по контрагенту.
К примеру, есть различные внешние источники и мы можем собирать из них разные данные по контрагенту и выводить все это в единой карточке контрагента.
При этом не требуются какие-то дополнительные действие оператора - он просто заносит ключевые данные по конктрагенту, а система при сохранении проверяет - есть ли у нас все необходимые данные для сбора информации, и если есть, то запускает АПИ запрос к внешней системе.
Процесс с точки зрения пользователя
Возьмем к примеру сбор информации с checko.ru - для этого в простом случае нужно иметь ИНН и тип организации.
Как только пользователь внес ИНН + тип организации, система обращается по API к Checko.ru и сохраняет целиком JSON данные по контрагенту у себя.
При этом на карточке появляется интеравтивное дерево с JSON данными от данного источника.
Как это релизовать?
1. В SaveItem формы в конце процедуры
if(len(@pinn)>0 and @pcontragentTypeID>0 and isnull(@checkoInfo, '') = '') begin
-- если нет инфы, то по апи запрашиваем ее с checko.ru
-- SELECT 2
select 'apirequest' type, 'checkContragent' code, 'clientID' p1_name, cast(@clientID as nvarchar) p1_value
end
Мы проверяем - если есть ИНН и тип и мы еще ранее не получали информации от checko, то делаем API запрос.
2. В Исходящем API методе делаем запрос данных к внешней системе и сохрянаем по clientID информацию.
Подготовка запроса (request процедура):
CREATE PROCEDURE [dbo].[api_checkContragent_request]
@parameters ExtendedDictionaryParameter READONLY,
@username nvarchar(32) -- текущий пользователь.
AS
BEGIN
declare @key nvarchar(max) = dbo.as_setting('checkoToken', '')
declare @clientID int = (select try_cast(value2 as int) from @parameters where [key]='clientID')
declare @inn nvarchar(max), @type nvarchar(128)
select @inn = inn, @type = isnull((select top 1 code from types where id = contragentTypeID), '')
from contragents ctr
inner join clients client on client.id = ctr.clientID
where client.id = @clientID
print 'xsss'
declare @searchType nvarchar(128) = 'person' -- fl, se
if(@type in ('ooo', 'oao', '', 'other')) set @searchType = 'company'
if(@type in ('ip')) set @searchType = 'entrepreneur'
print @searchType
declare @url nvarchar(max) = 'https://api.checko.ru/v2/'+@searchType+'?key='+@key+'&inn='+ @inn
-- SELECT 1 Msg, Result, Url (адрес, куда будет идти запрос)
select '' Msg, 1 Result, @url Url
-- SELECT 2 PARAMETERS - параметры, которые будут передаваться во внешний источник
select 1
END
И сохраняем отклик в response:
CREATE PROCEDURE [dbo].[api_checkContragent_response]
@response nvarchar(max),
@parameters ExtendedDictionaryParameter READONLY,
@username nvarchar(32)
AS
BEGIN
declare @clientID int = (select try_cast(value2 as int) from @parameters where [key]='clientID')
update clients
set checkoInfo = @response
where id = @clientID
-- SELECT 1
select '' Msg, 1 Result, @response Response
-- SELECT 2 Внешние действия
END
3. Последний шаг - выведем эту информацию (если она есть) на форме:
Создаем отдельное поле checkoInfo в форме и в GetItem SELECT 1 добавляем его значение:
-- SELECT 1
select ...
iif(len(@checkoInfo)>0, '<div class="as-prettyJSON">'+@checkoInfo+'</div>', '') checkoInfo
В итоге получаем нечто подобное:
Конечно можно еще все это распарсить и вывести отдельными полями (что усложнит обработку).
Заключение
Таким вот нехитрым способом можно из разных источников собирать информацию по объекту, причем для каждого источника могут быть свои условия (где-то нужен ИНН, где-то ФИО или ОГРН, или возможно IP адрес).
Google поиск по нашей документации
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта