Подскажите, пожалуйста - иногда, при сохранении контакта через OData получаем вот такую ошибку: Для параметра "P2" со значением null необходимо указать тип данных.
Подскажите, чего ей не хватает?
at Terrasoft.DB.MSSql.MSSqlExecutor.QueryParametersToDBParameters(QueryParameterCollection queryParameters, DbParameterCollection dbParameters)
at Terrasoft.Core.DB.DBExecutor.Execute(String sqlText, QueryParameterCollection parameters)
at Terrasoft.Core.DB.Query.Execute()
at Terrasoft.Configuration.ContactEventsProcess`1.UpdateCampaignTargetCustomerScriptExecute(ProcessExecutingContext context)
at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
at Terrasoft.Configuration.ContactEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
at Terrasoft.Configuration.ContactEventsProcess`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
at Terrasoft.Configuration.ContactEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
at Terrasoft.Configuration.ContactEventsProcess`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
at Terrasoft.Configuration.ContactEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
at Terrasoft.Configuration.ContactEventsProcess`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
at Terrasoft.Configuration.ContactEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
at Terrasoft.Configuration.ContactEventsProcess`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
at Terrasoft.Configuration.ContactEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
at Terrasoft.Configuration.ContactEventsProcess`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
at Terrasoft.Configuration.ContactEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
at Terrasoft.Configuration.ContactEventsProcess`1.ThrowEvent(ProcessExecutingContext context, String message)
at Terrasoft.Core.Entities.Entity.ThrowEvent(String message, EventArgs eventArgs)
at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
at Terrasoft.Core.Entities.Entity.OnSaved(EntityAfterEventArgs e)
at Terrasoft.Core.Entities.Entity.Save(Boolean validateRequired)
at Terrasoft.Core.Entities.Services.EntityLazyProxy.SaveChanges()
at Terrasoft.Core.Entities.Services.ServiceContext.SaveChanges()
at System.Data.Services.DataService`1.BatchDataService.HandleBatchContent(Stream responseStream)>>>
Нравится
Здравствуйте, Леонид!
Во-первых ,обращаю Ваше внимание, что Вы создаете темы в форуме "Terrasoft CRM 2.8", что несколько сбивает с толку.
Во-вторых, по поводу самого сообщения. Судя по тексту ошибки, это исключение SQL-сервера. Нужно смотреть, какой запрос идет на сервер, чтобы понять, что не так.
Простите, Андрей, не туда запостил.
Так вот, я создаю новый контакт через Odata, а судя по тексту ошибки в этот момент зачем-то пытается вызваться некий UpdateCampaignTargetCustomerScriptExecute, хотя никаких кампаний/воздействий e нас нет.
Леонид, этот скрипт выполняется каждый раз при сохранении контакта. в нем создается запрос, в котором, вероятно, возникает ошибка:
var contactId = Entity.GetTypedColumnValue<string>("Id"); new Update(UserConnection, "CampaignTarget") .Set("Customer", Column.Parameter(contactName)) .Where("ContactId").IsEqual(Column.Parameter(contactId)) .Execute();
Думаю, в этом моменте значение в поле "Id" может отсутсвовать. Вы присваиваете значение для жтого поля при создании контакта?
Можно перед выполнением скрипта добавить проверку типа
var contactId = Entity.GetTypedColumnValue<string>("Id"); if (contactId != string.Empty) { new Update(UserConnection, "CampaignTarget") .Set("Customer", Column.Parameter(contactName)) .Where("ContactId").IsEqual(Column.Parameter(contactId)) .Execute(); }