Добрый день. Возникла такая проблема. При попытки сохранения экземпляра мероприятия (Event) возникает следующее исключение:
System.NullReferenceException: Object reference not set to an instance of an object. at Terrasoft.Core.ProcessEngine.GetProcessListeners(UserConnection userConnection, Entity entity, EntityChangeType changeType) at Terrasoft.Configuration.BaseEntity_Base_Entity_TerrasoftEventsProcess`1.TryProcessComplete(EntityChangeType changeType) at Terrasoft.Configuration.BaseEntity_Base_Entity_TerrasoftEventsProcess`1.BaseEntitySavingScriptTaskExecute(ProcessExecutingContext context) at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context) at Terrasoft.Configuration.BaseEntity_Base_Entity_TerrasoftEventsProcess`1.ProcessQueue(ProcessExecutingContext context) at Terrasoft.Configuration.BaseEntityEventsProcess`1.ProcessQueue(ProcessExecutingContext context) at Terrasoft.Configuration.EventEventsProcess`1.ProcessQueue(ProcessExecutingContext context) at Terrasoft.Configuration.BaseEntity_Base_Entity_TerrasoftEventsProcess`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e) at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context) at Terrasoft.Configuration.BaseEntity_Base_Entity_TerrasoftEventsProcess`1.ProcessQueue(ProcessExecutingContext context) at Terrasoft.Configuration.BaseEntityEventsProcess`1.ProcessQueue(ProcessExecutingContext context) at Terrasoft.Configuration.EventEventsProcess`1.ProcessQueue(ProcessExecutingContext context) at Terrasoft.Configuration.EventEventsProcess`1.ThrowEvent(ProcessExecutingContext context, String message) at Terrasoft.Core.Entities.Entity.ThrowEvent(String message, EventArgs eventArgs) at Terrasoft.Core.Entities.Entity.OnSaving(EntityBeforeEventArgs e) at Terrasoft.Core.Entities.Entity.Save(Boolean validateRequired, Boolean setColumnDefValue) at Terrasoft.Core.Process.ZzzzRecalcTestProcessMethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context) at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
Код С#, в котором возникает исключение:
var eventEsq = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Event"); var idFilter = eventEsq.CreateFilterWithParameters(FilterComparisonType.Equal, "Id", eventId); eventEsq.Filters.Add(idFilter); var idColumn = eventEsq.AddColumn("Id").Name; var responseColumn = eventEsq.AddColumn("SxActualResponse").Name; var eventEntity = eventEsq.GetEntityCollection(userConnection).FirstOrDefault(); if (eventEntity == null) throw new ArgumentException("Event с таким Id не существует в БД"); var contactsCountEsq = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Contact"); var eventFilter = contactsCountEsq.CreateFilterWithParameters(FilterComparisonType.Equal, "Event", eventId); contactsCountEsq.Filters.Add(eventFilter); var countFunction = contactsCountEsq.CreateAggregationFunction(AggregationTypeStrict.Count, "Id"); var countColumn = contactsCountEsq.AddColumn(countFunction).Name; var resultEntity = contactsCountEsq.GetEntityCollection(userConnection).FirstOrDefault(); var count = resultEntity.GetTypedColumnValue<int>(countColumn); eventEntity.SetColumnValue(responseColumn, count); eventEntity.Save();
Сталкивался кто-либо с подобной проблемой? Как её можно решить?
Нравится
Попробуйте в запрос "eventEsq" добавить все колонки функцией "AddAllSchemaColumns". Проблема может быть в том, что процессы которые выполняются при сохранении Entity обращаются к разным колонкам этой Entity, но они у вас не загружены и возникает исключение.
Добрый день!
Мне кажется Вам FirstOrDefault вернул Default, и там просто какой-то пустой объект Entity, у которого можно вызвать Save, но нет никаких колонок.
Колебянов Виталий Романович,
Да, проблема в этом была, похоже. После замены выбора конкретных полей на AddAllSchemaColumns - всё заработало.