Вопрос

Дублирование ключей

Уже не первый раз возникает такая ситуация.

Процесс работает корректно и в один момент начинается...

 

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

 

Как с этим бороться?

Нравится

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

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

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

Это я прекрасно понимаю, что происходит вставка с уже существующим ID. Вопрос в том, почему это происходит если процессы не менялись. Буду возиться с профайлером.

 А если в профайлере ничего нет и только в журнал ошибок пишет стек вида: 

System.ArgumentException: An item with the same key has already been added.
at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at Terrasoft.Core.Process.UsrOppPotentialCustom1.InitializeMetaPathParameterValues()
at Terrasoft.Core.Process.UsrOppPotentialCustom1..ctor(UserConnection userConnection)
at Terrasoft.Core.Process.UsrOppPotentialCustom1Schema.CreateProcess(UserConnection userConnection)
at Terrasoft.Core.Process.SubProcessProxy.GetInstance(Boolean useActiveVesion)
at Terrasoft.Core.Process.SubProcessProxy.InitializeInstance(Boolean useActiveVersion)
at Terrasoft.Core.Process.SubProcessProxy.Execute(ProcessExecutingContext context)
at Terrasoft.Core.Process.Process.ProcessQueue(ProcessExecutingContext context)
at Terrasoft.Core.Process.ProcessActivity.ExecuteElement(ProcessExecutingContext context)
at Terrasoft.Core.Process.ProcessActivity.Execute(ProcessExecutingContext context)

Причиной является наличие дубля Id параметров в исходном коде процесса. Решается созданием процесса с нуля, точная причина возникновения пока не выяснена.

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

Ну нет записи с таким ID на который ругается

Попробуйте без lower(Id), просто сравнение с Id, может, при преобразовании GUID к тексту что-то меняется в формате.

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

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

Судя по тому что я нашел, ошибка происходит тут

2020-11-20 09:03:44,988 ERROR IIS APPPOOL\Creatio Process Execute - Error while executing element Name = SynchronizeContactAddressScriptTask UId = 15f8849c-b4ba-4d43-9ab5-35b96f16bd4d SchemaElementUId = 193c9932-6748-4236-bea9-d5cc48807672
System.ArgumentException: An item with the same key has already been added.
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at Terrasoft.Core.Entities.EntityColumnValueCollection..ctor(UserConnection userConnection, EntitySchemaColumnCollection columns)
   at Terrasoft.Core.Entities.Entity.get_ColumnValues()
   at Terrasoft.Core.Entities.Entity.SetDefColumnValues()
   at Terrasoft.Configuration.Contact_Base_Entity_TerrasoftEventsProcess`1.SynchronizeContactAddress()
   at Terrasoft.Configuration.Contact_Base_Entity_TerrasoftEventsProcess`1.SynchronizeContactAddressScriptTaskExecute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)



Пакет Base, схема Contact

 

Странно, выглядит совсем не связанным с предыдущей ошибкой, где идёт вставка в базу.

Тут сбой происходит в функции SetDefColumnValues, когда создаётся запись в объекте «Адрес контакта» и заполняется значение по умолчанию:

	var schema = UserConnection.EntitySchemaManager.GetInstanceByName("ContactAddress");
	var contactAddressEntity = schema.CreateEntity(UserConnection);
	contactAddressEntity.SetDefColumnValues();

Далее выполнение идёт в функции ядра, где наполняется EntityColumnValueCollection названиями и значениями колонок. Тут и происходит исключение. Возможно, у Вас в объекте «Адрес контакта» как-то создались две колонки с одинаковым именем? Вставка туда записей в интерфейсе раздела контактов отрабатывает корректно?

Добавить комментарий

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

В интерфесе, привыборе, наприме страны и последующем сохранении получаем эту ошибку. Таблицу адресов контактов уже вычистил под 0

Если в ходе доработок добавлялись или менялись колонки в объект «Адрес контакта», может быть что-то не так с ними, например, два дубля колонки с одинаковыми именами. Откройте дизайнер этого объекта в разных пакетах и его метаданные, возможно, там будет заметно.

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