Универсальный поиск по личному кабинету на сайте

Смотреть видео

Выводится сверху личных кабинетов форма поиска. При вводе параметров вызывается специальная хранимая процедура и отображаются результаты поиска по разным объектам системы.

 

В Настройках системы в настройке rolesForShortSearch можно задать роли, у которых должна выводиться форма поиска.

Формат процедуры falcon_search

CREATE PROCEDURE [dbo].[falcon_search]
   @q nvarchar(256), -- @q - это текст запроса
   @typeID int, -- @typeID - не используется
   @page nvarchar(256) = '', -- @page - страница на которой вызван запрос
   @username nvarchar(256),
@parameters ExtendedDictionaryParameter readonly -- опционально, содержит langID, falconGuid, url и др  параметры в виде Key,Value2
AS
BEGIN
        -- структура таблицы задает выходной результат, его важно соблюдать
	CREATE TABLE dbo.#result (id int, [text] nvarchar(max), [desc] nvarchar(max),[type] nvarchar(256),
	[date] date)

	create table dbo.#roles (role nvarchar(256))

	-- получаем роли пользователя
	insert into #roles
	select [role]from dbo.sec_getUserRoles(@username)


        /* для админа добавляем в результатирующую
           таблицу найденные результаты по типам */

	if(select count(*) from #roles where [role]='admin')>0
	begin
    	insert into #result
		select instanceID,
			' '+
                         iif(as_en_entityInstances.statusID in (60,61,62), 'Клиент',
                         'Лид')+' ' +shortname +  '',
			'',
			'',
			getdate()
		from crm_clients
        inner join ctr_contragents on crm_clients.contragentID = ctr_contragents.id
        inner join as_en_entityInstances  on as_en_entityInstances.id =
        crm_clients.instanceID
         where ((isnull(shortname, '') + isnull(fullname, '') + isnull([description],
               '') + isnull(username, '')) like '%'+@q+'%')
            or ((select phone1 from ctr_contacts where contragentID =
               ctr_contragents.id) like '%'+@q+'%')
            or ((select phone2 from ctr_contacts where contragentID =
               ctr_contragents.id) like '%'+@q+'%')
            or ((select email from ctr_contacts where contragentID =
               ctr_contragents.id) like '%'+@q+'%')
            or ((select skype from ctr_contacts where contragentID =
               ctr_contragents.id) like '%'+@q+'%')


	select * from #result
	drop table #result -- не забываем удалить таблицу


     -- SELECT 2
     select 1 Result, '' Msg, '' Makeup
END

Если необходима дополнительная логика по поиску - прописываем ее всю в данной процедуре - сразу для всех ролей.

Выходные параметры: 

  • SELECT 1 - элементы поиска. Обязательные столбцы: id, type, text, desc. Необязательные: date, p1, p2, p3, p4, p5 (могут быть использованы при кастомной разметке)
  • SELECT 2 - Result, Msg, Makeup 

Есть возможность сделать кастомной разметку результатов поиска. Для этого используем в SELECT 2 параметр makeup и передаем в него псевдопеременные id, type, text, desc, date, p1, p2, p3, p4, p5

Пример: 

  select 1 Result, '' Msg, '{text} {p1}' Makeup

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

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

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

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