Внедрение подсказок dadata на сайт

Введение

В формах можно использовать подсказки dadata как поле формы. 

Пример на демостенде - https://demo.web-automation.ru/list/watch/dadata-suggestions---primery-podskazok-cherez-pole-formy-tipa-dadata---1126

Вы можете использовать подсказки для заполнения адресов, данных по фирмам, странам, ФИАС, email, имена и др.

Как работает механизм подсказок dadata.ru - https://dadata.ru/suggestions/

ВАЖНО. Dadata - внешний платный сервис, имеющих ежедневный лимит в 10 тыс запросов (300 заполнений). Оплата данного сервиса производится отдельно в личном кабинете Dadata.  Тарифы Dadata - https://dadata.ru/pricing/

Как настроить использование подсказок dadata в форме

В GetLayout в SELECT 1 указываем в параметре DadataPublicToken ключ от сервиса dadata (он будет доступен посетителям в скрытом поле as-dadataToken на странице).  

Тип поля формы - dadata (например, поле с кодом f1)

В GetItem формы указываем какой тип подсказок будем извлекать. Все типы подсказок https://dadata.ru/suggestions/usage/#dictionaries

CREATE PROCEDURE [dbo].[fm_ddt_getItem]
    @itemID int,	
	@username nvarchar(256)
AS
BEGIN
  select 'some value'  f1, 
     '{"type": "party"}' options_f1,  
     '{"type": "country"}' options_f2, 
     '{"type": "metro"}' options_f3, 
     '{"type": "email"}' options_f4
  
END

ВАЖНО. В качестве значения необходимо передавать JSON, который мы ранее принимали от Dadata (если там не будет JSON, то поле при загрузке будет выводить значение поля, а внутренним значением поля будет {value: 'текущее значение'}).

После выбора и сохранения формы. Извлекаем поле f1, в нем будет JSON структура со всеми данными по найденному элементу. 

CREATE PROCEDURE [dbo].[fm_ddt_saveItem]
   @username nvarchar(256), 
   @itemID int,
   @parameters ExtendedDictionaryParameter READONLY	
 
AS
BEGIN
  declare @pf1 nvarchar(max)
  select @pf1 = Value2 from @parameters where [key]='f1'

  print @pf1  -- здесь весь JSON
 
  declare @value nvarchar(max) =  JSON_VALUE (@pf1  , '$.value' ) 
  print @value  -- а здесь извлекаем одно поле. 
END

При этом сохранять лучше всю структуру данных в отдельное поле для корректной загрузки формы на редактирование в будущем. 

ВАЖНО. Если у вас что-то не отображается (например, в подсказках компании Адрес или ИНН), проверьте написание типа по документации. Например, необходимо писать PARTY, а не party (если написать party, то список работает, но не показывает дополнительные данные).  

Если возникает ошибка чтения JSON, необходимо отключить стандартную обработку поля в плане атаки XSS  и использовать ее облегченный вариант через функцию dbo.as_antiXSSLite

Как вызвать JS коллбек при выборе значения

Иногда требуется что-то сделать при выборе значения из подсказок Dadata (например, заполнить другие поля). 

Для этого прописываем в настройках поля код коллбека и реализуем JS функцию. 

GetItem SQL:

select '' f1, 
  '{"type": "party","callback": "callf1"}' options_f1

JS:

as.callbacks["callf1"] = function(suggestion){
	console.log("sug", suggestion);
}

Ограничение выборки адресов по стране

Для того, чтобы искать адреса других стран, необходимо указать спец поле as-dadataCountry на странице: 

<input type="hidden" class="as-dadataCountry" value="Казахстан">

Значение поля - название страны (Казахстан, Берарусь и т.д.). 

Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Насколько полезной была статья?

Google поиск по нашей документации

Выгода от использования Falcon Space

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
Сайт использует Cookie. Правила конфиденциальности OK