Подскажите, пожалуйста - иногда, при сохранении контакта через OData получаем вот такую ошибку: Для параметра "P2" со значением null необходимо указать тип данных.
Подскажите, чего ей не хватает?

version="1.0" encoding="utf-8"?> xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> /> xml:lang="ru-RU">An error occurred while processing this request.>>>Для параметра "P2" со значением null необходимо указать тип данных>>Terrasoft.Common.InvalidObjectStateException>>   at Terrasoft.DB.MSSql.MSSqlExecutor.AddQueryParameterToSqlParameters(SqlParameterCollection sqlParameters, QueryParameter queryParameter)
   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)>>>

Нравится

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

Здравствуйте, Леонид!
Во-первых ,обращаю Ваше внимание, что Вы создаете темы в форуме "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();
}
Показать все комментарии