Вопрос

Hi! I need a script and instructions for depersonalizing the oracle database.

Нравится

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

 Hello Mikhail, 

 

Please contact Creatio support using support@creatio.com, so we could share the corresponding instruction and requested script. 

Thank you in advance for understanding!



Best regards,

Anastasiia

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

Добрый день!

Подскажите, можно ли выполнить интеграцию Creatio с Oracle BI? 

Нравится

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

Добрый день, Роман.

В базовом функционале приложения нет готовой настройки по интеграции с Oracle BI. Но возможно такую интеграцию получится настроить с помощью средств разработки, используя внешний API Creatio. Подробно о возможностях внешнего API можно прочитать в статье.

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

Есть запрос в базу данных, по ответу поддержки "классы EntitySchemaQuery, Select, Insert, Update, Delete это СУБД-независимое API ", исходя из этого был использован InsertSelect. На PostgreSQL запрос отрабатывает отлично, но в Oracle выдает ошибку при использовании TOP в запросе.

Код запроса:

Query selectQuery = new Select(UserConnection)
    .Top(numberCountForNumberPool)
    .Column(Column.Parameter(request))
    .Column(Column.Parameter(currentUserContactId))
    .Column(Column.Parameter(currentUserContactId))
    .Column("KtSimManagementInitialPoolNumbers", "KtIccid")
    .Column("KtSimManagementInitialPoolNumbers", "KtImsi")
    .Column("KtSimManagementInitialPoolNumbers", "KtMsisdn")
    .Column("KtSimManagementInitialPoolNumbers", "KtName")
    .Column(Column.Parameter(cityAndCountNumbersEntity.GetTypedColumnValue<Guid>(city.Name)))
    .Column(Column.Parameter(cityAndCountNumbersEntity.GetTypedColumnValue<string>(note.Name)))
    .Column(Column.Parameter(DateTime.UtcNow.Date))
    .Column(Column.Parameter(DateTime.UtcNow.Date
        .AddDays((int)Core.Configuration.SysSettings.GetValue(UserConnection,
            "DayCountForDedicatedPoolNumbers") + 1).AddSeconds(-1)))
    .From("KtSimManagementInitialPoolNumbers")
    .OrderByAsc("KtSimManagementInitialPoolNumbers", "KtName")
    .Join(JoinType.LeftOuter, "KtJasperFullNumberPool")
    .On("KtSimManagementInitialPoolNumbers", "KtName")
    .IsEqual("KtJasperFullNumberPool", "KtName")
    .Where("KtJasperFullNumberPool", "KtName")
    .IsNull()
    .And("KtSimManagementInitialPoolNumbers", "KtMarketCodeId")
    .IsEqual(Column.Parameter(cityForMarketCode));
 
InsertSelect insertSelectQuery = new InsertSelect(UserConnection)
    .Into("KtJasperFullNumberPool")
    .Set("KtRequestId", "ModifiedById", "CreatedById", "KtIccid", "KtImsi", "KtMsisdn", "KtName", "KtCityId", "KtNote", "KtReserveDate", "KtReserveToDate")
    .FromSelect(selectQuery);
int numberCountInserted = insertSelectQuery.Execute();

Подскажите, есть ли возможность использовать в Select для Oracle - TOP для выборки необходимого количества записей в запросе?

Нравится

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

Проверил, на запросе с Top, OrderByAsc,  Join, On, IsEqual, Where отрабатывает нормально. А если добавить колонки с числом и датой из параметра, получим такую же ошибку, как у Вас. Но если, как я выше предложил, дописать «.As», она исчезнет:

			var query = new Select(UserConnection)
				.Top(2)
				.Column("Contact", "Dear")
    			.Column(Column.Parameter("test")).As("SomeString")
    			.Column(Column.Parameter(DateTime.UtcNow.Date)).As("SomeDate")
				.From("Contact")
				.OrderByAsc("Contact", "Dear")
		    	.Join(JoinType.LeftOuter, "Account")
    			.On("Contact", "AccountId")		
				.IsEqual("Account", "Id")
    			.Where("Account", "AnnualRevenueId")
    			.IsNull()				;
var text =  query.GetSqlText();

Код генерируется:

SELECT  "Dear", "SomeString",   "SomeDate"FROM (SELECT  "Contact"."Dear",       :P1 "SomeString",       :P2 "SomeDate"FROM      "название_базы"."Contact""название_базы"."Account"WHERE      ("Account"."AnnualRevenueId" IS NULL)   AND "Contact"."AccountId" = "Account"."Id"(+)ORDER BY   "Contact"."Dear" ASC NULLS FIRST)WHERE  (ROWNUM &lt;= 2)

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

Александр, какая именно выдаётся ошибка? Только в Insert Select или просто в Select с Top тоже?

Если перед последней строчкой считать insertSelectQuery.GetSqlText(), что там будет?

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

 в Select тоже, пишет что "

Terrasoft.Common.NullOrEmptyException: Псевдоним колонки запроса не может быть пустым

   в Terrasoft.Core.DB.DBEngine.BuildSelectColumnAliasesSqlText(StringBuilder sb, QueryColumnExpressionCollection columnExpressions)

   в Terrasoft.DB.Oracle.OracleEngine.BuildSelectQuerySqlText(StringBuilder sb, Select select)

   в Terrasoft.Core.DB.DBEngine.BuildQuerySqlText(StringBuilder sb, Select selectQuery)

   в Terrasoft.Core.DB.DBEngine.GetQuerySqlText(Select selectQuery)

   в Terrasoft.Core.DB.Select.GetSqlText()

   в Terrasoft.Configuration.KtReserveNumbersService.ReserveNumbers(Guid request)

   в SyncInvokeReserveNumbers(Object , Object[] , Object[] )

   в System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)

   в Terrasoft.Web.Common.ServiceModel.ThreadContextInitializer.Invoke(Object instance, Object[] inputs, Object[]& outputs)

   в System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)

"

Проверил без TOP - такой ошибки нет

А если без этой колонки?

    .Column(Column.Parameter(DateTime.UtcNow.Date
        .AddDays((int)Core.Configuration.SysSettings.GetValue(UserConnection,
            "DayCountForDedicatedPoolNumbers") + 1).AddSeconds(-1)))

Или с ней, но сразу после после дописать псевдоним:

.As("MyColumnName")

Она самая подозрительная, но если дело не в ней, проверьте и предыдущие.

Зверев Александр, Проверил - при закоментировании колонок разницы нет, но заметил закономерность:

1) если использовать Top без OrderByAsc и Join (ну вчесте с его on, IsEqual, Where) - тогда работает

2) если использовать OrderByAsc или Join (ну вчесте с его on, IsEqual, Where) без Top - тогда работает

3) если использовать Top с OrderByAsc или Join (ну вчесте с его on, IsEqual, Where) - тогда не работает, ошибка

Проверил, на запросе с Top, OrderByAsc,  Join, On, IsEqual, Where отрабатывает нормально. А если добавить колонки с числом и датой из параметра, получим такую же ошибку, как у Вас. Но если, как я выше предложил, дописать «.As», она исчезнет:

			var query = new Select(UserConnection)
				.Top(2)
				.Column("Contact", "Dear")
    			.Column(Column.Parameter("test")).As("SomeString")
    			.Column(Column.Parameter(DateTime.UtcNow.Date)).As("SomeDate")
				.From("Contact")
				.OrderByAsc("Contact", "Dear")
		    	.Join(JoinType.LeftOuter, "Account")
    			.On("Contact", "AccountId")		
				.IsEqual("Account", "Id")
    			.Where("Account", "AnnualRevenueId")
    			.IsNull()				;
var text =  query.GetSqlText();

Код генерируется:

SELECT  "Dear", "SomeString",   "SomeDate"FROM (SELECT  "Contact"."Dear",       :P1 "SomeString",       :P2 "SomeDate"FROM      "название_базы"."Contact""название_базы"."Account"WHERE      ("Account"."AnnualRevenueId" IS NULL)   AND "Contact"."AccountId" = "Account"."Id"(+)ORDER BY   "Contact"."Dear" ASC NULLS FIRST)WHERE  (ROWNUM &lt;= 2)

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

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

 да, именно Ваша рекомендация с .As("SomeString") помогла когда прописал данный алиас во все колонки где используется "Column.Parameter". Так же в поддержке ответили. Не понял только почему в PostgreSQL это работает без алиаса, а в Oracle без него не так. Но видимо это специфика запросов СУБД, главное что с алиасом работает и там, и там.

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

Передал информацию об этой особенности для освещения в академии.

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

Добрый день,

 

При попытке зайти в Террасофт установленный на сервере (Windows Server 2008 R2 Enterprise), возникает ошибка:

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

К сожалению, многочисленные попытки решить данную проблему не принесли результата.

Также было замечено, что при добавлении новой конфигурации при нажатии на кнопку выбора имени драйверов Oracle (Home) возникает другая ошибка:

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

Насколько я понял проблема возникает из-за того, что на сервере были установлены несколько версий Oracle и в данный момент версия 11.2.0 отсутствует на сервере. Вместо нее установлена версия 12.2.

Попытка очистить следы Oracle 11.2.0 и в дальнейшем даже переустановка Oracle привела лишь к тому что в данный момент выходит пустой список в котором невозможно выбрать версию Oracle:

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

 

Прошу помочь в решении данной проблемы.

 

Благодарю.

 

P. S. По возможности помогите пожалуйста найти инструкцию по бэкапу Terrasoft 3.3, для попытки переустановки Terrasoft, чтобы решить вышеуказанную проблему.

Нравится

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

Обратите внимание на рекомендацию по поводу «Ошибка открытия конфигурации: Cannot find OCI DLL»:

Для приложения Terrasoft под Oracle обязательно необходимо, чтобы на компьютерах всех пользователей, использующих конкурентные лицензии, был установлен клиент Oracle одной и той же версии. Имя сервера на компьютерах всех пользователей должно совпадать с именем, указанным в поле [Сервер] окна редактирования строки соединения компьютера, на котором заказывают и загружают лицензии, и данный сервер должен быть зарегистрирован. Имя сервера прописывается в файле tnsnames.ora, расположенном в инсталляционной директории клиента Oracle (например, d:/oracle/ora92/network/admin/ tnsnames.ora).

Также версия ядра 3.3.2.120 далеко не самая новая, есть смысл попробовать на последних файлах 3.3.2.313, поскольку в версии 175 и выше вносились изменения в механизм работы с сервером сессий для Oracle.

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

Для получения бекапа существующей базы нужно воспользоваться средствами СУБД, а также не забыть автоматически перенести или вручную завести пользователей с такими же именами, как в базе, на уровне сервера БД. Именно для Oracle инструкции не встречал. Например, для MS SQL это делается так. Если забыть перенести, то пустит только администратора SYS.

Зверев Александр пишет:

Для приложения Terrasoft под Oracle обязательно необходимо, чтобы на компьютерах всех пользователей, использующих конкурентные лицензии, был установлен клиент Oracle одной и той же версии. Имя сервера на компьютерах всех пользователей должно совпадать с именем, указанным в поле [Сервер] окна редактирования строки соединения компьютера, на котором заказывают и загружают лицензии, и данный сервер должен быть зарегистрирован. Имя сервера прописывается в файле tnsnames.ora, расположенном в инсталляционной директории клиента Oracle (например, d:/oracle/ora92/network/admin/ tnsnames.ora).

Добрый день. Данная проблема наблюдается на самом сервере (невозможно зайти в Terrasoft установленный на сервере).

По поводу бэкапа, посмотрю, большое спасибо за помощь.

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

Сущности в системе идентифицируются Guid. который, будучи преобразованным в строку, имеет вид типа "846d8d33-004b-4a3e-b778-10cfd163f3bb" (буквы строчные, в таком виде он фигурирует, например, в параметрах запросов http)

С другой стороны в БД сущности хранятся с первичным ключем, построенным на id varchar2(38), но содержиное там заключено в фигурные скобки и буквы заглавные.

Есть ли стандартная функция преобразования одного в другое? В запрос нужно передать Id текущего контакта, но "{"+UserConnection.CurrentUser.ContactId.ToUpper()+"}" выглядит достаточно неуклюже.

Нравится

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

Могу предложить "элегантный костыль":

string contact = "846d8d33-004b-4a3e-b778-10cfd163f3bb";

string result = String.Join(String.Empty, "{", contact.ToUpper(), "}");

Если используете механизмы EntityShchemaQuery или Select/Insert/Update/Delete, то ничего преобразовывать не нужно, в функции передаётся переменная типа Guid и при генерации SQL в нужном формате подставится само. Если же самостоятельно создаёте SQL, воспользуйтесь своим кодом или советом выше.

Эелегантность костыля в виде сокращения записи обращения к переменной иррелевантна задаче :)

Меня больше интересовал источник подобных сложностей, почему сразу было не привести к одному формату? Ведь была ж какая-то причина?

Причина в том, что основная поддерживаемая база  — MS SQL, где есть тип «uniqueidentifier» и база поймёт вставку в любом формате. А поддержка Oracle добавлена опционально.

В этом и была суть вопроса: если в Oracle используется просто текст, какая разница, что туда писать? Зачем эти скобочки? Чтобы что-то в базе посмотреть, скопировать Id из URL не получится, это минус. Как и при склеивании ESQ и Select. А плюсы вообще есть?

Этот текст, хоть и не является отдельным типом «uniqueidentifier», но служит в качестве первичного или внешнего ключа. Соответственно, если писать в двух полях один GUID разным способом, связи между ними не получится.

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

В каких 2-х полях??? Почему не писать ОДНИМ способом, в нижнем регистре и без скобок? Везде.

В версии для MS SQL пишите как вам нужно, а в Oracle — именно требуемым способом.

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

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

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

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

При обычной работе с форматом написания не сталкиваются никак, все C#-классы принимают значения типа Guid и преобразуют в нужный формат при генерации SQL автоматически. В чём именно негативное влияние фигурных скобок, Вы так и не объяснили. 

Вероятно, первоисточник именно такого написания — стандартная функция CreateGuid в Delphi, на котором была написана система Terrasoft 3.X. Она генерирует именно в таком формате. И в таблицу базы Firebird и Oracle, где нет встроенных типов для хранения GUID, так и записывали.

В Microsoft для C# рекомендуют для получения нужного формата использовать для переменной типа Guid метод ToString("N") в сочетании с String.ToUpper.

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

Выполняется интергация с другой системой. Нужно из трансферной таблицы которая находится в другой базе данных достать значения. Можно ли это сделать средствами BPM?

PS: БД Oracle Database 11g

Нравится

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

еще можно использовать openquery, либо создать вью на таблицу в другой бд через дблинк и тогда у вас будет больше стандартных методов работы с данной таблицей из bpm

 

Все мощь .net (c#) к вашим услугам, вариантов подключения множетство. Наберите в гугле using C# without Oracle Client

еще можно использовать openquery, либо создать вью на таблицу в другой бд через дблинк и тогда у вас будет больше стандартных методов работы с данной таблицей из bpm

 

Колодяжный Владислав Эдуардович,

так и решил сделать

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

Добрый день.

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

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 Online 7.12

СУБД Oracle 11g

Проблема в том, что большинство инструкций относятся к MS SQL. В Oracle просто не вижу большинство указанных хранимых процедур. Плюс просто не вижу раздела "Правила поиска дубликатов" в Дизайнере системы. Не вижу в БД процедур типа "tsp_FindAccountDuplicateByName", процедура tsp_FindAccountSimilarRecords есть, но там пустышка.

Если я правильно понял, то глобальный поиск дубликатов пока недоступен для Oracle. Нужно хотя бы настроить локальный поиск дубликатов. 

Изменение пакета tspkg_DuplicatesSearch (функции fn_GetAccountDuplicates и процедуры tsp_SearchForAccountDuplicates) результата не дало. 

Вторая проблема: в стандарте вижу, что дубликат проверяется по Name(по крайней мере одно из правил) при изменении карточка контрагента. При создании нового контрагента эта же логика почему-то не работает и можно легко создать дубликаты.

Нравится

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

Проверка на дубли при сохранении через миникарточку появилась в 7.12.3. В версии 7.12.3 появился поиск дублей на основании правил для Oracle. В будущих релизах планируется массовая дедупликация для данной СУБД + пользовательская настройка правил + уже можно технически с версии 7.12.3 для новой дедупликации добавить новое правило. Инструкция тут.

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

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

Спасибо за информацию. Один уточняющий вопрос. У нас на DEV не настроен GlobalSearch (BPM развернут on-site). Однако дедубликация по name срабатывает. Как это может быть?

Видимо, это предыдущая версия, без глобального поиска. Новый то добавили только в 7.12.3:

Для БД Oracle, появилась возможность поиска дублей лидов, а также локального поиска дублей контактов и контрагентов при сохранении. Базовый набор правил поиска можно включать по ссылке “Правила поиска дублей” в дизайнере системы. Для работы поиска дублей на Oracle необходимо настроить глобальный поиск и включить функциональность “ESDeduplication”.

Добрый день. Апдейт на 7.12.3 провели. Global Serach и ESDeduplication включили, правило новое настроили. Видим, что оно работает корректно в миникарточке.

НО при сохранении/изменении в обычной карточке поиск дублей не происходит. Этот функционал для Oracle еще не реализован?

P.S. Стандартные правила также не работают при сохранении/изменении через основную карточку.

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

Понятно. Спасибо

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

Здравствуйте! Пытался обновить верcию bpm'online bank customer jorney, с 7.11.0 до 7.11.1 (Oracle), после обновления попытался скомпилировать приложение, и в результате возник вот такой вот перечень ошибок, в результате чего могли возникнуть эти ошибки?Изображение удалено.

Нравится

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

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

Пришлите, пожалуйста, логи приложения за время обновления, по умолчанию хранятся по пути:C:\Windows\Temp\BPMonline\Site_Х.

Так же хочу уточнить, не было ли ошибок, при компиляции до обновления ? 

Maksym Naumovets,

До обновления ошибок не было, вот log 

https://yadi.sk/i/wpnUGfK23TKEiq

 

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

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

Попробуйте повторно выполнить обновление.

Maksym Naumovets,

"Utility finished working." разве не говорит о том, что утилита завершила свою работу?

Александр, говорит. Но не говорит что все было выполнено успешно.

Произошла ошибка и утилита завершила работу.

Посмотрел выполненные шаги, нет генерации исходных кодов, компиляции и остальных что я описал.

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

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

При открытии страницы логина в bpm получаем сообщение: "Unable to find the requested .Net Framework Data Provider. It may not be installed."

Для исправления проблемы устанавливаем компонент [ODAC XCopy version], необходимой битности и версии.
В реестре создаться ветка из версией ODAC компонента. Пример для ветки [HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0]:

После чего необходимо скопировать полную версию компонента и установить это значение атрибуту [Oracle Data Provider for .NET] в файле web.config загрузчика. Пример:

Нравится

Поделиться

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