Здравствуйте, настраиваю глобальный поиск, хочу удалить индексы:
http://айпи:81/sites/sales/search
Пробовал вот так:
curl -XDELETE http://айпи:81/sites/sales/search-*/
Но потом при curl -v -X POST -d '{"templateName": "default.json"}' -H "Content-Type: application/json" http://айпи:81/sites/sales/search
Как правильно удалить ранее созданные индексы?
Выдает ошибку:
{"code":500,"status":"error","message":"System.Exception: Could not check index 'uoospgg4cm6abfpjuotlbfcrco0pq5esrxuexjqw6vndxtx4gvnpjtljeneotytt' exists. ---> System.Exception: Invalid NEST response built from a unsuccessful low level call on HEAD: /uoospgg4cm6abfpjuotlbfcrco0pq5esrxuexjqw6vndxtx4gvnpjtljeneotytt\n# Audit trail of this API call:\n - [1] BadRequest: Node: http://elasticsearch-public-ip:9200/ Took: 00:00:10.0127688\n# OriginalException: System.Net.Http.HttpRequestException: Resource temporarily unavailable ---> System.Net.Sockets.SocketException: Resource temporarily unavailable\n   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)\n   --- End of inner exception stack trace ---\n   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)\n   at System.Threading.Tasks.ValueTask`1.get_Result()\n   at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n   at System.Threading.Tasks.ValueTask`1.get_Result()\n   at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask`1 creationTask)\n   at System.Threading.Tasks.ValueTask`1.get_Result()\n   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)\n   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n   at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)\n   at Elasticsearch.Net.HttpConnection.Request[TReturn](RequestData requestData) in C:\\Users\\russc\\source\\git\\elasticsearch-net-5.x\\src\\Elasticsearch.Net\\Connection\\HttpConnection-CoreFx.cs:line 78\n# Request:\r\n\n# Response:\r\n\n\n   --- End of inner exception stack trace ---\n   at GlobalSearch.WebApp.Services.SearchManagement.SearchService.CheckIndexExist(String indexName) in /src/Src/GlobalSearch.WebApp/Services/SearchManagement/SearchService.cs:line 95\n   at GlobalSearch.WebApp.ServiceModel.Requests.Handlers.SearchManagement.DeleteSearchRequestHandler.DeleteSearchBySite(Site site) in /src/Src/GlobalSearch.WebApp/ServiceModel/Requests.Handlers/SearchManagement/DeleteSearchRequestHandler.cs:line 44\n   at GlobalSearch.WebApp.ServiceModel.Requests.Handlers.SearchManagement.DeleteSearchRequestHandler.InternalHandle(DeleteSearchRequest request) in /src/Src/GlobalSearch.WebApp/ServiceModel/Requests.Handlers/SearchManagement/DeleteSearchRequestHandler.cs:line 70\n   at GlobalSearch.WebApp.ServiceModel.Requests.Handlers.BaseRequestHandler`1.Handle(TRequest request) in /src/Src/GlobalSearch.WebApp/ServiceModel/Requests.Handlers/BaseRequestHandler.cs:line 38"}

Нравится

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

Евгений, добрый день! 



Вам следует обратить внимание на причину, по которой в запросе не удаётся определить существование индекса, а именно на запись:

 

Invalid NEST response built from a unsuccessful low level call on HEAD

Попробуйте поискать информацию по данному фрагменту.

Показать все комментарии
Добрый день, выполнял настройку elasticsearch по инструкции, linux+docker. Версия Creatio 7.17.1.1364 (.NET Core 3.1.15). Компоненты на машинах запустились без ошибок, дошел до момента когда нужно выполнить sql  скрипт. Для этого в Creatio добавил плагин SQL консоли, он там 1. Вот первый скрипт который запускаю:

БД Postgres
DO $$

DECLARE 
    GlobalSearchFeature VARCHAR(50) := 'GlobalSearch';
    GlobalSearchFeatureId uuid;
    GlobalSearchV2Feature VARCHAR(50) := 'GlobalSearch_V2';
    GlobalSearchV2FeatureId uuid;
    GS_RelatedEntityIndexingFeature VARCHAR(50) :=   'GlobalSearchRelatedEntityIndexing';
    GS_RelatedEntityIndexingFeatureId uuid;
    allEmployeesId uuid := 'A29A3BA5-4B0D-DE11-9A51-005056C00008';

BEGIN

   SELECT "Id" INTO GlobalSearchFeatureId FROM "Feature"
   WHERE "Code" = GlobalSearchFeature
   LIMIT 1;
   IF (GlobalSearchFeatureId IS NOT NULL)
      THEN
          IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchFeatureId) THEN
             UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchFeatureId;
          ELSE
              INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId);
          END IF;
   ELSE
       GlobalSearchFeatureId := uuid_generate_v4();
       INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchFeatureId, GlobalSearchFeature, GlobalSearchFeature);
       INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId);
   END IF;

   SELECT "Id" INTO GlobalSearchV2FeatureId FROM "Feature"
   WHERE "Code" = GlobalSearchV2Feature
   LIMIT 1;
   IF (GlobalSearchV2FeatureId IS NOT NULL)
    THEN
        IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchV2FeatureId) THEN
            UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchV2FeatureId;
        ELSE
           INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId);
        END IF;
   ELSE
       GlobalSearchV2FeatureId := uuid_generate_v4();
       INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchV2FeatureId, GlobalSearchV2Feature, GlobalSearchV2Feature);
       INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId);
   END IF;

  SELECT "Id" INTO GS_RelatedEntityIndexingFeatureId FROM "Feature" WHERE "Code" =GS_RelatedEntityIndexingFeature LIMIT 1;
  IF (GS_RelatedEntityIndexingFeatureId IS NOT NULL)
  THEN
  IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = Bulk_ES_DD_FeatureId) THEN
UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GS_RelatedEntityIndexingFeatureId;
  ELSE
  INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_RelatedEntityIndexingFeatureId);
  END IF;
  ELSE
  GS_RelatedEntityIndexingFeatureId := uuid_generate_v4();
  INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GS_RelatedEntityIndexingFeatureId, GS_RelatedEntityIndexingFeature, GS_RelatedEntityIndexingFeature);
  INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_RelatedEntityIndexingFeatureId);
  END IF;
END $$;

Этот скрипт падает с ошибкой(но таймер у скрипта все таки стартует)

Вот второй скрипт:

Данные нужные подставил

 
UPDATE "SysSettingsValue"
SET "TextValue" = [укажите URL к индексу ElasticSearch, строка следующего типа: http://external.elasticsearch:9200/indexname]
WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchUrl' LIMIT 1 );

UPDATE "SysSettingsValue"
SET "TextValue" = [укажите URL к Global Search Service, строка следующего типа: http://SERVER2_IP_ADDRESS:81]
WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchConfigServiceUrl' LIMIT 1 );

UPDATE "SysSettingsValue"
SET "TextValue" = [укажите URL к Global Search Indexing Service, строка, сл. типа - http://SERVER2_IP_ADDRESS:82]
WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchIndexingApiUrl' LIMIT 1 );

Окей, раз скрипты не работают я пошел на:

 

/Nui/ViewModule.aspx#BaseSchemaModuleV2/FeaturesPage
Без /0/ потому что Linux.
Там нашел один единственный тумблер с надписью GlobalSearch, вот его и включил и сохранил, все ок.
Вопрос в следующем, как мне убедится что Глобальный поиск работает? И нужны ли все таки выполненные эти скрипты?
Если скрипты нужно выполнять, то где? в Postgres(на Linux)? или как это работает?

Нравится

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

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

Скрипты необходимо выполнять на базе данных приложения Creatio.

После выполнения скриптов нужно перезапустить сайт с очисткой Redis.

Далее создать тестовую запись и через минуту попробовать поискать её в глобальном поиске. 

Алёна Доля, здравствуйте, встретился с ошибкой с ссылкой на отсутствие переменных в psql, GlobalSearchUrl, GlobalSearchConfigServiceURL, GlobalSearchIndexingApiUrl

если есть пример того как должно выглядеть буду благодарен

Алёна Доля,

ещё вопрос не по теме  БД, на сервере с компонентами elasticsearch заметил что не дописал порт в команду curl, вопрос, как теперь удалить старую запись? Потому что сейчас не дает записать ничего из-за того что ранее уже записывал

Евгений Шевченко,

Для более быстрой настройки можете заполнить настройки GobalSearchUrl, GlobalSearchConfigServiceURL, GlobalSearchIndexingApiUrl  через интерфейс в разделе  "Системные настройки". Необходимые записи фильтруйте в разделе по коду.

ОШИБКА:  "globalsearchfeatureid" - не известная переменная

СТРОКА 14:    SELECT "Id" INTO GlobalSearchFeatureId FROM "Feature"

не подскажете в чем причина?

Добрый день!

Проблема заключалась в функционале страницы https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/razvertyvanie_onsite/nastrojka_kontejnernyh_komponentov/nastroit_globalnyy_poisk

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



Воспроизводится проблема в результате использования кнопки Копировать код (скриншот во вложении).

Если копировать сам текст запроса, ошибка перестанет воспроизводиться.

Жмурко Сергей,

Всё ещё не поправлено :)

Андрей,

Добрый день! Проблема зарегистрирована для исправления в будущих версиях Creatio.

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

Добрый день, коллеги! Хотел узнать есть ли возможность переопределить командную строку, чтобы отображать реестр КОНТАКТ не по отображаемому полю ФИО, а по полю МОБИЛЬНЫЙ ТЕЛЕФОН.

 

Попытался переопределить метод getFilters в ContactSectionV2, но при открытие переходит раздела КОНТАКТЫ он вновь сбивает и делает по ФИО. Добавил в раздел КОНТАКТЫ колонку (секцию) МОБИЛЬНЫЙ ТЕЛЕФОН, но все равно переходит на ФИО.

Пример взял отсюда:

https://community.terrasoft.ru/questions/kastomizaciya-stroki-poiska-co…

 

После попробовал переопределить первичную колонку по этому примеру, но при открытие и фильтр отрабатывает корректно, но при открытие любой карточки требует обязательного заполнения МОБИЛЬНЫЙ ТЕЛЕФОН:

https://community.terrasoft.ru/questions/komandnaya-stroka

 

Может кто-то решил подобную проблему?

 

 

 

Нравится

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

Добрый день, Алексей!

В указанном вами примере в коде переопределённого метода есть условие на выполнение фильтра 

if (emailFilter && emailFilter.includes("@")). Скорее всего следует копать именно в этом месте, поскольку вместо вашего фильтра используется базовый.  Рекомендую сделать что-то наподоби регулярного выражения на номер телефона, вместо наведённого в примере символа "@".

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

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

В профиле выбран русский, наблюдается у всех пользователей

Изображение удалено.

внутри записи все значения на русском

Нравится

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

Разобрался. За это отвечает системная настройка: Отображать локализируемые данные в результатах глобального поиска

Разобрался. За это отвечает системная настройка: Отображать локализируемые данные в результатах глобального поиска

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

Добрый день!

 

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

 

Хочу сделать логгирование, используя событийный слой. Можно ли с Entity вытянуть пользователя, что вызывает событие?

 

Спасибо!

Нравится

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

При создании сценария через JMeter создаются обращения и переводятся в работу. Необходимо чтобы и наряды переходили в статусы дальше, но через штатные решения jmetr'а решения не было найдено. Пришла идея что возможно нужно что-то отключить в системе, потому что отправляя запросы со сгенерированными через jmeter guid для нарядов система заменяет на автоматически созданные. У кого какие есть идеи? Возможно ли отключить проверку и ставить свои значения?

Нравится

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

Можете написать свой сервис и в методе этого сервиса менять статус обращения и сохранять обращение без валидации полей.

Такая постановка вопроса не вполне корректна, eugenes. Если отключить проверку целостности, то можно залить в справочное поле Id записи, которой нет в справочнике этого поля. После этого, пока запись в справочнике не появится, проверку обратно не включить. То есть такое допустимо, но только когда точно знаете, что делаете, например, когда заливаете наполнение связанных таблиц, взятых в произвольном порядке, а не по связям.

В Вашем случае нужно другое, выяснить, почему Вы заполняете Id, а он не передаётся. При обычной работе из раздела, создании новой записи, её Guid формируется на клиенте и передаётся на веб-сервис, где и присваивается новой записи, как я уже писал.

Нужно смотреть, какие запросы к DataService или другим стандартным сервисам Вы отправили. Например, в Fiddler или встроенными средствами браузера.

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

Добрый день! Поставили sales 7.17.3 1377 релиз. Проблема с кнопками видна на скрине,  в системе язык русский и у пользователя то жеИзображение удалено.

Нравится

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

Проверьте доступы на папку Terrasoft.WebApp\ClientApp\assets\i18n

Полозюков Евгений Петрович,Да права полные разданы в т.ч. и пользователю iis

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

Столкнулись с ситуацией, когда у пользователя не отображается значение Lookup поля, если в lookupListConfig.columns указать дополнительные колонки и у пользователя не прав на запись из этого поля. Также имеется логика, которая завязана на изменение этого поля, поэтому использование this.set не представляется возможным (при использовании silent: false значение устанавливается, но не отображается на странице). Есть какие-либо варианты решения данной ситуации с сохранением lookupListConfig.columns?

Нравится

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

Дмитрий, опишите подробнее, приведите код доработок и скриншоты. Прав на дополнительные поля точно нет только на запись? В консоли при попытке работать с полем есть какие-то ошибки?

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

Сегодня у нас встали все процессы где есть элемент Таймер. Просто останавливается на нем и все. Что можно сделать? Компиляция и генерация кода не исправляют ситуацию.

Нравится

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

Обратите внимание на  две похожих темы за недавнее время. Возможно, и у Вас та же причина и поможет то же изменение настроек.

Вот еще одна похожая тема. Проблема давняя и все предложенные варианты не помогают. teleartel, подскажите, пожалуйста, удалось ли решить проблему.

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

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

У нас в системе был БП, что обновлял страницу (посылал сообщение на клиент) Вчера все работало, сегодня в обновленной версии не обновляет страницу в консоле ошибка, что-то про Decode

h {sourceClass: "Ext.JSON", sourceMethod: "decode", msg: "You're trying to decode an invalid JSON String: ReloadMessage", message: "You're trying to decode an invalid JSON String: ReloadMessage"}

 

Это у нескольких клиентов. Пока ТС думает, может кто подскажет как решить самостоятельно?

 

В самой схеме такой код на прием сообщения

init: function() {

                this.callParent(arguments);

                this.subscriptionFunction();

            },

subscriptionFunction: function() {

Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE,

this.bpListenerMessage, this);

},

bpListenerMessage: function(scope, message) {

if (!message || message.Header.Sender !== "Reload") {

return;

}

var message2 = message.Body;

if (!this.Ext.isEmpty(message2) && message2 === "ReloadMessage") {

this.reloadEntity();

}

},

destroy: function() {

this.Terrasoft.ServerChannel.un(Terrasoft.EventName.ON_MESSAGE, this.bpListenerMessage, this);

this.callParent(arguments);

}

 

А в бп в скрипте такой код:

var connection = Get("UserConnection");

Terrasoft.Configuration.MsgChannelUtilities.PostMessage(connection, "Reload", "ReloadMessage");

return true;

 

Нравится

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

Если в скриптах ничего не меняли и перестало работать после обновления, причина может быть в отключившихся веб-сокетах. Как их настраивают, см. тут.

Зверев Александр,

Клиент в облаке. У другого клиента аналогичная проблема. У других партнеров аналогичные кейсы.

Получена информация о причине и способе исправления.

Для этого: 

1. В процессе в элементе ScriptTask экранировать кавычками ReloadMessage:

Terrasoft.Configuration.MsgChannelUtilities.PostMessage(connection, "Reload", "\"ReloadMessage\"");

2. В схеме строчку заменить на:

var message2 = Terrasoft.decode(message.Body);

Если message не json, то происходит исключение. В новой версии это исключение стал перехватывать zone.js, поэтому не срабатывала подписка:

Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE,
                            this.bpListenerMessage, this);

Сейчас разработчики решают,  будут ли что-то делать в связи с этим. 

Разработчики обнаружили первопричины проблемы. Она будет исправлена в версии 7.17.2, на текущий же момент для исправления достаточно вместо упомянутых выше правок установить пакет из файла. Пакет с фиксом актуален для всех версий 7.17.0.

Зверев Александр,

Добрый день! Не получилось накатить пакет на прод и откатить его же. Валятся ошибки:

 

Ошибка установки данных "SysModuleEdit_OmniChat" из пакета "OmnichannelMessaging". UId 79c8d730-1a6e-4467-88a2-dc33cf681d5e: The UPDATE statement conflicted with the FOREIGN KEY constraint "FKfswQzuMwAT8Bnlby6UilfQqmU". The conflict occurred in database "mod", table "dbo.SysModuleEntity", column 'Id'.



Ошибка установки данных "SysModule_OmniChat" из пакета "OmnichannelMessaging". UId d338d0b8-eb04-42ab-8789-f6a3ace6e8eb: The UPDATE statement conflicted with the FOREIGN KEY constraint "FKsUTsBBLbO1DA4j0DdV9M0R0UW0U". The conflict occurred in database "mod", table "dbo.SysModuleEntity", column 'Id'.

 

Можете подсказать/посоветовать как поступить, куда копать?

Всё заработало просто - накатываем пакет и, если возникает ошибка, не откатываем.

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