Добрый день, коллеги!

 

Возникла проблема, когда мы добавляем новые продажи, лиды, контрагентов и контактов, то при поиске мы их не может найти. Уже и очищали Redis, перезапускали весь CRM, но результаты так найти и не получилось.

 

Может кто-то может подсказать, как решить эту проблему? Заранее спасибо.

Нравится

4 комментария

Поиск ищет хоть что-то или только новые не находит?

Если приложение on-site, то нужно смотреть настройки эластика (если он вообще настроен).

https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/ra…

https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/ra…

Трефилов Павел Сергеевич,

Эластик установлен и вроде как настроен, поиск находит данные, которым уже минимум полгода, а те, которые были добавлены в прошлом месяце, или буквально недавно - нет. 

Добрый день. Возможно, проблема с настройкой доступа. Если зайти под системным администратором, также не находит записи?

Здравствуйте, судя по описанию у Вас на сайте не включилась мгновенная индексация новых записей по шедулеру.

Проверьте корректность заполнения системной настройки GlobalSearchIndexingApiUrl.

Для оперативного решения вопроса на период диагностики настроек проведите полную индексацию данных в системе.

Для версии глобального поиска 2.0:

Выполните PUT запрос вида :http://[ GS-WEB-API ]:81/indexation/{siteName}/reindex/full

Детальнее описано в статье:https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/ra…

Показать все комментарии

Доброго дня, коллеги!

 

У меня появилась потребность через полнотекстовый поиск находить строку из детали. Как правильно редактировать этот поиск, чтобы можно было находить информацию из деталей? Сама деталь основана на новом объекте.

 

Заранее спасибо!

Нравится

1 комментарий
Лучший ответ

Михаил, насколько понимаю, сейчас такое нельзя:

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

Но уже зарегистрирована идея расширения поиска на детали. Там же предлагают обходное решение: при помощи БП копировать значения поля всех записей с детали в специально созданное поле в объекте раздела и искать по нему.

Михаил, насколько понимаю, сейчас такое нельзя:

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

Но уже зарегистрирована идея расширения поиска на детали. Там же предлагают обходное решение: при помощи БП копировать значения поля всех записей с детали в специально созданное поле в объекте раздела и искать по нему.

Показать все комментарии

Добрый день. Вопрос не по решению проблемы а о том - как узнать что глобальный поиск подключен и работает корректно?

Настроил по инструкции версии 2.0, ошибок при настройке не было, все контейнеры поднялись компоузером без проблем, запросы на создание настройки сайта и создания индекса тоже нормально. В базе Oracle запрос принялся без ошибок, настройки видны в системе. Но при наборе значений в окне поиска результатов нет

Нравится

10 комментариев
Лучший ответ

В поддержке должна быть 2.0.2, если не новее.

Очистить редис и перезапустить сайт пробовали? У меня версия 1.7 заработала только после этих манипуляций.

Здравствуйте, Александр!

 

Если предложение Алексея не поможет, первое, что можно проверить, это доступность эластика из сервера, где развернут глобальный поиск (ГП). Это можно сделать следующим образом:

1. Зайти на сервер, где развернут ГП.

2. Зайти внутрь любого контейнера ГП, например gs-web-api. Для этого необходимо выполнить команду

docker exec -it gs-web-api bash

3. Оправить запрос на эластик

curl -v http://{elastic}:9200

где {elastic} надо заменить на ip_адрес сервера, где развернут эластик

Результат выполнения последней команды покажет, есть доступ (вернет ответ 200 ОК) или нет (будет ошибка)

Если же есть ошибка, то возможно, нет доступа с сервиса, где развернут ГА на сервис, где развернут эластик, или например закрыт порт 9200 на сервере, где развернут эластик. Подобные проблемы устраняются администраторами на стороне клиента.

 

Также нужно проверить правильность значения системных настроек: “GlobalSearchUrl”, “GlobalSearchConfigServiceURL” и “GlobalSearchIndexingApiUrl”.

 

 А также проверить, включены ли фичи  'GlobalSearch', 'GlobalSearch_V2' и 'GlobalSearchRelatedEntityIndexing' у текущего пользователя , это можно узнать запросами:

 

select * from feature where code = 'GlobalSearch' or code = 'GlobalSearch_V2' or code = 'GlobalSearchRelatedEntityIndexing'
 
select * from AdminUnitFeatureState where Featureid in (select id from feature where code = 'GlobalSearch' or code = 'GlobalSearch_V2' or code = 'GlobalSearchRelatedEntityIndexing')

Ещё дело может быть в более старой версии самого поиска, сейчас последняя 2.0.2, может помочь обновление на неё.

Мотков Илья,

Выполнил запрос из контейнера

root@714fe8324321:/app# curl -v http://172.28.116.165:9200
* Rebuilt URL to: http://172.28.116.165:9200/
*   Trying 172.28.116.165...
* TCP_NODELAY set
* Connected to 172.28.116.165 (172.28.116.165) port 9200 (#0)
> GET / HTTP/1.1
> Host: 172.28.116.165:9200
> User-Agent: curl/7.52.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-type: application/json; charset=UTF-8
< content-length: 327
<
{
  "name" : "bxNTqjU",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "hhGU9yAwR0iD4gCb5CrKrw",
  "version" : {
    "number" : "5.6.9",
    "build_hash" : "877a590",
    "build_date" : "2018-04-12T16:25:14.838Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}
* Curl_http_done: called premature == 0
* Connection #0 to host 172.28.116.165 left intact

Показывает 200, значит ОК.

 

select * from "AdminUnitFeatureState" where "FeatureId" in (select "Id" from "Feature" where "Code" = 'GlobalSearch' or "Code" = 'GlobalSearch_V2' or "Code" = 'GlobalSearchRelatedEntityIndexing')

Выдает что все "FeatureState" стоит "1". "GlobalSearch_V2" и "GlobalSearch" привязаны к "All employees" а "GlobalSearchRelatedEntityIndexing" к "Supervisor"

 

select * from "Feature" where "Code" = 'GlobalSearch' or "Code" = 'GlobalSearch_V2' or "Code" = 'GlobalSearchRelatedEntityIndexing'

Выводит все три "GlobalSearch_V2", "GlobalSearch" и "GlobalSearchRelatedEntityIndexing"

Алексей Следь,

Не помогло

Здравствуйте, Александр!

В таком случае попробуйте последнюю рекомендацию, обновление самого поиска.

Мотков Илья,

А где его взять? На сайте академии только 2.0 там и скачал на прошлой недели

В поддержке должна быть 2.0.2, если не новее.

Мотков Илья,

Если версия на сайте академии была не рабочей и не протестированной то зачем бы ее там выкладывали и так долго не заменяли на более новую?

Александр, если дело не в версии, то, вероятно, при установке что-то не так настроили.

Мотков Илья,

Спасибо, дело было в версии. Версия 2.0.0 не работала, поставил 2.0.2 и все работает теперь

Показать все комментарии

Всем привет!

Есть потребность расширить функциональность строки поиска (там где написано Что я могу для вас сделать) для поиска информации по другим сущностям (почта, адреса и т.п.). Кто-нибудь сталкивался с похожей задачей или может быть есть какие-то стандартные инструменты расширения функциональности?

Заранее спасибо за ответы.

Нравится

2 комментария
Лучший ответ

Поставьте точку останова в методе getFilters в схеме BaseDataView, увидите колстек выполнения, как идет фильтрация.

Лучше будет наверное, для частых поисков например по Email, добавить новое поле в секцию раздела. Затем вы можете получить значение этого поля и в переопределенном методе getFilters нужного вам раздела, дополнять фильтры как вам нужно. При наличии например "@" в введенном значении делаете например такой фильтр:

 

 getFilters: function() {
	var filterGroup = this.callParent(arguments);
	filterGroup.logicalOperation = Terrasoft.LogicalOperatorType.OR;
	var emailFilter = //получаем введенное значение в новое поле;
	if (emailFilter && emailFilter.includes("@")) {//либо сразу делать маску почты и проверку по маске
		filterGroup.add("EmailFilter", this.Terrasoft.createColumnFilterWithParameter(
			this.Terrasoft.ComparisonType.CONTAIN, "[ContactCommunication:Contact].Number".substring(), emailFilter));
	}
	return filterGroup;
},

 

Поставьте точку останова в методе getFilters в схеме BaseDataView, увидите колстек выполнения, как идет фильтрация.

Лучше будет наверное, для частых поисков например по Email, добавить новое поле в секцию раздела. Затем вы можете получить значение этого поля и в переопределенном методе getFilters нужного вам раздела, дополнять фильтры как вам нужно. При наличии например "@" в введенном значении делаете например такой фильтр:

 

 getFilters: function() {
	var filterGroup = this.callParent(arguments);
	filterGroup.logicalOperation = Terrasoft.LogicalOperatorType.OR;
	var emailFilter = //получаем введенное значение в новое поле;
	if (emailFilter && emailFilter.includes("@")) {//либо сразу делать маску почты и проверку по маске
		filterGroup.add("EmailFilter", this.Terrasoft.createColumnFilterWithParameter(
			this.Terrasoft.ComparisonType.CONTAIN, "[ContactCommunication:Contact].Number".substring(), emailFilter));
	}
	return filterGroup;
},

 

Показать все комментарии

Добрый день.

Нашли две ссылки на инструкции, которые отличаются довольно сильно:

https://academy.terrasoft.ru/documents/administration/7-12/nastroyka-gl…

https://academy.terrasoft.ru/documents/common/7-12/ustanovka-servisa-gl…

Начали настройку через docker. Хотелось бы получить подтверждение, что это рабочий вариант.

Также в ходе установки возникла ошибка при выполнении команды addSearch. Пишет что не может подключиться к серверу. При этом контейнеры es рабочие (проверено через docker ps -a). Через telnet можно подключиться к серверу по порту 9200. Причина ошибки непонятна.  Согласно инструкции в default-env в параметре GS_ES_URL нужно указывать IP-адрес сервера, на котором развернут docker (в нашем варианты все компоненты, Elastic, RabbitMQ, MySQL развернуты через docker). Так и настроено, но выдается ошибка при addSearch.

Нравится

2 комментария

Добрый день!



Для версии 7.11.2 и выше настройка выполняется через docker. Если проблема всё ещё сохраняется, создайте обращение в техническую поддержку. 

Как решили проблему?

Показать все комментарии

Здравствуйте!

Подскажите пожалуйста. Из BPM удалил значение мобильного телефона из карточки контакта, но глобальный поиск все равно пишет, что у данного контакта присутствует удаленный номер телефона. Как нужно настроить глобальный поиск, чтобы он больше не обнаруживал удаленные из системы данные?

Нравится

7 комментариев

По Глобальному поиску, после индексации записи ГП запоминает её и будет отображать по старым данным информацию. После повторной переиндексации запись перестанет отображаться в ГП. Индексация происходит каждые несколько минут.

Обращаю Ваше внимание на то, что подобные кейсы будут покрыты с применений новых технологий в облаке bpm'online начиная с версии 7.12.3 (будут развернуты новые, более производительные сервера глобального поиска которые будут обрабатывать информацию по предварительным оценкам в 4-6 раз быстрее).

В ближайшее время будет запущена новая версия глобального поиска с мгновенной индексацией и такие проблемы возникать не будут.

Мотков Илья,

Спасибо!

Подскажите пожалуйста еще один момент. Как я уже говорил выше, в системе удалены все упоминания данного мобильно телефона. Его находит только глобальный поиск. Когда происходит звонок, система определяет, что звонит Контакт, с этого удаленного из карточки номера телефона. Глобальный поиск может как-то влиять на определение номера?

Данные глобального поиска хранятся в отдельной системе со своей базой. По идее, влиять не должно. Видимо, в разделе удалили не везде,а где-то этот номер остался, в контакте или в контрагенте на детали. Или есть контакт-дубль с указанным номером. Посмотрите через базу наполнение таблиц деталей средств связи, вдруг найдётся.

Мотков Илья,

Илья, Здравствуйте! В сообщении выше Вы упомянули, что индексация происходит каждые несколько минут, а можно где-нибудь посмотреть интервал индексации?

 

Вероятно, где-то в конфиге внутри gs-scheduler.

Если изначальный вопрос по удалённому номеру ещё в силе, то дело явно не в интервале. Видимо, номер не удалился, а есть в базе где-то ещё.

Мотков Илья,

Спасибо большое за помощь!

 

Показать все комментарии

Здравствуйте.

Хотел бы узнать, может кто реализовывал похожую задачу глобального поиска контактов и контрагентов в мобильном приложении. Хотелось бы понять, можно реализовать, чтобы поиск в разделе контакты выдавал также и контрагентов с возможностью перехода? Или придётся реализовать отдельную страницу с поиском? Вижу еще проблему общего реестра результатов поиска - открытие в зависимости от типа, соответствующей карточки.

Нравится

2 комментария

Здравствуйте, Павел! 

Если вопрос в выборе из двух разделов, можно попробовать реализовать это путем создания представления в БД, куда слить эти два раздела и таким образом искать, хоть тогда остается актуальным вопрос выбора карточки.

Еще одна альтернатива - при идеальной ситуации, когда у каждого контрагента есть хоть 1 контакт, можно попробовать переписать поиск, чтобы в разделе контакты он выбирал не только по полю ФИО но еще и по полю Контрагент.

Здравствуйте, Илья, спасибо за ответ.

Первый способ подходит для основного приложения. Был реализован похожий кейс, но там есть возможность формирования адреса карточки, чтобы осуществить переход. Здесь такой фокус не проходит. Остаётся пока решение добавить в поиск на странице контактов и поле связанного контрагента, что собственно и было сделано с помощью инструкции

Terrasoft.sdk.GridPage.setSearchColumns("Contact", ["Name", "Account"]);

 

Показать все комментарии

Можно ли в bpm 5.4 on-site абоптировать глобальный поиск под такие задачи?:
1. искать не по точному названию, а по вхождению;
2. чтобы искал не в выбранном разделе, а сразу в нескольких, хотя бы в контрагентах и контактах.

Нравится

2 комментария

Здравствуйте, Илья.

Для поиска по вхождению используйте маску %то-что-нужно-найти%:

[URL=http://fastpic.ru/][IMG]http://i67.fastpic.ru/big/2014/0714/48/f024adbb…]
[URL=http://fastpic.ru/][IMG]http://i65.fastpic.ru/big/2014/0714/81/df72cd46…]

Что касается поиска по нескольким разделам, то здесь есть много нюансов, например, что будет происходить, если искомое название записи найдено во всех разделах?

Логика поиска реализована в методе ScriptBasePrepareFiltersExecute процесса страницы BaseModulePage.

Вы можете доработать ее по своему усмотрению.

Показать все комментарии

Глобальный поиск ищет данные по полям таблиц например таблицы счета. Теперь вопрос возможно ли организовать поиск и по детали которая относится например к тому же счету и несет в себе информацию о продуктах в счете? Если это возможно подскажите пожалуйста как. Заранее спасибо!

Нравится

2 комментария

Добрый день.

Для того, чтобы добавить другие таблицы для поиска кроме разделов, Вам необходимо выполнить следующее:

  1. В скрипте wnd_GlobalSearchOptionsScript есть функция, которая определяет таблицы, которые учавствуют в поиске, она обращается на sq_ReportService, где установлены фильтры, которые возвращают результат.
    function GetWorkspaceTablesSelectQuery() {
             var SelectQuery = GetSingleItemByCode('sq_ReportService',
                       'mds_GlobalSearchObject');
             ApplySelectQueryFilter(SelectQuery, 'ServiceTypeCode', 'Table', true);
             EnableSelectQueryFilters(SelectQuery, true, ['Workspaces']);
             var Select = SelectQuery.Items(0);
             var Columns = Select.Columns;
             EnableColumns(Columns, false, 'Path');
             Columns.ItemsByAlias('Caption').OrderType = otAsc;
             return SelectQuery;
    }
  2. В данной функции описано, что в поиске учавствуют только таблицы разделов.
  3. В сервисе выборки интересующего Вас рздела (например, при неоходимости искать в деталях раздела Контрагенты - это sq_Account) в блоке WHERE добавить набор фильтров с условием OR.
    q_account_1.png
  4. Указать для него произвольный код и установить логический оператор OR:
    q_account_2.png
  5. Реализацию самих фильтров можно посмотреть, например здесь: add_filter.zip в ветке форума http://www.community.terrasoft.ru/forum/topic/8626

Спасибо за исчерпывающий ответ!

Показать все комментарии

Добрый вечер!
У меня 2 вопроса по системе Terrasoft XRM:
1) можно ли/планируется ли добавить к глобальному поиску следующий функционал:
- возможность поиска по полю "описание" для Контактов
(здесь я присоединяюсь к аналогичному вопросу, который уже задавали на форуме:
https://community.terrasoft.ua/forum/topic/6786)
- вывести строку глобального поиска постоянно на главный экран (с тем, чтобы не вызывать эту функцию из меню, а просто набрать в строку данные и нажать Ввод - подобно аналогичной функции в Outlook). Как вариант - назначить на эту функцию комбинацию "быстрых клавиш".
Дело в том, что сейчас информация о контактах хранится в адресной книжке Exchange, и довольно много информации, часто более 255 символов в длину, находится в поле Notes (которое при импорте в Terrasoft попадает в Описание). Соответственно, функция глобального поиска у нас одна из самых востребованных и в TS часто будет производиться поиск данных именно из поля Описание.
2) можно ли каким-то образом вести в системе график отпусков сотрудников нашей организации и его корреляцию со списком задач/проектов (чтобы, например, не отпустить ключевого сотрудника в отпуск во время планируемого важного проекта)?

Нравится

1 комментарий

Добрый день!
Реализация глобального поиска по детали "описание" не планируется по причинам, описанным в теме форума, которую Вы указали.

Для того, чтобы назначить глобальный поиск на "горячую" клавишу, следует сделать следующее:

1. Открыть wnd_BaseGridArea.
2. Перейти на вкладку "события".
3. Создать событие OnKeyDown и сохранить изменения.

1

4. В открывшемся окне в созданную функцию добавить следующий код:

	if (Key.Value == 71)
	{
	var Window = GetSingleItemByCode('wnd_GlobalSearchResults', 'MainWindow');
	Window.Prepare();
	Window.Show();
	}

5. Сохранить изменения.

После нажатия на клавишу "G" будет открываться окно глобального поиска.

По поводу вопроса с графиками, никаких ограничений, которые могут препятствовать реализации, в системе нет. Но в базовой версии данный функционал отсутствует.

Показать все комментарии