Уже не первый раз возникает такая ситуация.
Процесс работает корректно и в один момент начинается...
Как с этим бороться?
Нравится
Олег, такое сообщение говорит, что где-то происходит вставка записи в таблицу БД, где уже есть запись с тем же 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 параметров в исходном коде процесса. Решается созданием процесса с нуля, точная причина возникновения пока не выяснена.
Попробуйте без 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 названиями и значениями колонок. Тут и происходит исключение. Возможно, у Вас в объекте «Адрес контакта» как-то создались две колонки с одинаковым именем? Вставка туда записей в интерфейсе раздела контактов отрабатывает корректно?
Если в ходе доработок добавлялись или менялись колонки в объект «Адрес контакта», может быть что-то не так с ними, например, два дубля колонки с одинаковыми именами. Откройте дизайнер этого объекта в разных пакетах и его метаданные, возможно, там будет заметно.