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

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

 

В Настройках системы в настройке 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 2 параметр makeup и передаем в него псевдопеременные id, type, text, desc, date, color, p1, p2, p3, p4, p5

Пример: 

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

UPD Oct 2024. Поиск стал на весь экран и элементы теперь идут не списком вниз, а заполняют все пространство страницы: 

Если необходимо вернуть старый вид поиска, то ставим у body класс disableFullGlogalSearchView (в GetLayout SELECT 1 параметр bodyClass).

 

Страница-источник на сайте falconspace.ru