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

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

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

 

В Настройках системы в настройке 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

Это снижение стоимости владения

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

Это быстрое внесение изменений

по ходу эксплуатации программы. Как создается функционал на платформе

Это простой удобный интерфейс

адаптация под мобильные устройства. Про юзабилити платформы

Нужна бесплатная консультация?
Получить оценку проекта
Создайте концепцию проекта на основе нашего шаблона и получите оценку проекта в виде КП.
Демо-сайт решений
Базисные решения, которые можно гибко адаптировать под себя: менять внешний вид, бизнес-логику и даже структуру базы данных.