Универсальный поиск

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

 

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

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

CREATE PROCEDURE [dbo].[falcon_search]
   @q nvarchar(256), -- @q - это текст запроса
   @typeID int, -- @typeID - не используется
   @page nvarchar(256) = '', -- @page - страница на которой вызван запрос
   @username nvarchar(256)
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 -- не забываем удалить таблицу
END

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