Ошибка обновления динамического объекта при установке значения свойства типа PickList - PullRequest
0 голосов
/ 02 июля 2011

Я добавил пользовательский атрибут ("custom_contacttype") к объекту Contact.Этот атрибут имеет тип списка выбора, который состоит из семи значений.Я занимаюсь разработкой с использованием расширений Advanced Developer Extensions для Microsoft Dynamics CRM против CRM 4.0.После того, как я установил значение для этого атрибута и вызвал SaveChanges (), я получаю «Ссылка на объект не установлена ​​для экземпляра объекта».ошибка.Я боролся с этим некоторое время.Что я делаю неправильно?Ниже приведен мой код:

var crm = new CrmDataContext(context.Connection);

var saveContact = crm.GetEntities("contact").Where(p => p.GetPropertyValue<Guid>      ("contactid") == contact.Id.Value).Single();

saveContact.SetPropertyValue("custom_contacttype", 2, typeof(Picklist));

crm.UpdateObject(saveContact);
crm.SaveChanges();

Журнал трассировки с сервера CRM: [2011-07-01 16: 39: 33.7] Процесс: w3wp | Организация: f827deb3-c6cc-df11-bc07-005056887b79 | Тема:8 | Категория: Platform.Sdk | Пользователь: 822138f1-c574-e011-9dca-005056887b79 | Уровень: Ошибка |PluginStep.Execute в PluginStep.Execute (контекст PipelineExecutionContext) в Pipeline.Execute (контекст PipelineExecutionContext) в MessageProcessor.Execute (контекст PipelineExecutionContext) в контексте InternalMessageDispatcher.поля, correlationToken correlationToken, CallerOriginToken originToken, USERAUTH USERAUTH, Guid CallerID) в CrmServiceInternal.Update (String NamespaceName, BusinessEntityBase сущности, correlationToken correlationToken, CallerOriginToken originToken, USERAUTH USERAUTH, Guid CallerID) в CrmService.Update (BusinessEntity лица) в RuntimeMethodHandle._InvokeMethodFast (Цель объекта, аргументы Object [], SignatureStruct & sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) в RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, связыватель, параметры Object [], культ CultureInfoлогическое skipVisibilityChecks) в RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder binder, параметры Object [], CultureInfo culture) в LogicalMethodInfo.Invoke (объектная цель, Object [] значения) в WebServiceHandler.InvocessPro в (Web)() в SyncSessionlessHandler.ProcessRequest (контекст HttpContext) в CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () в HttpApplication.ExecuteStep (шаг IExecutionStep. Ошибка приложения.IHttpAsyncHandler.BeginProcessRequest (контекст HttpContext, AsyncCallback cb, объект extraData) по адресу HttpRuntime.ProcessRequestInternal (HttpWorkerRequest wr) по адресу HttpRuntime.ProcessRequestNoDemand (100t * Intr)Ошибка подключаемого модуля службы в SdkMessageProcessingStepId: {27DF4121-19BC-DF11-A90E-005056887B79};EntityName: контакт;Стадия: 10;MessageName: обновление;AssemblyName: AccessCRM.ChangeLogContactData, AccessCRM, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = a030c130976783ab;ClassName: AccessCRM.ChangeLogContactData;Исключение: необработанное Исключение: System.NullReferenceException: Ссылка на объект не установлена ​​на экземпляр объекта.в AccessCRM.PluginUtilities.GetStringValueFromProperty (свойство p) в AccessCRM.ChangeLogContactData.Execute (контекст IPluginExecutionContext) в Microsoft.Crm.Extensibility.PluginStep.Execute (контекст PipelineExecutionContext).[2011-07-01 16: 39: 33.7] Процесс: w3wp | Организация: f827deb3-c6cc-df11-bc07-005056887b79 | Тема: 8 | Категория: Platform.Sdk | Пользователь: 822138f1-c574-e011-9dca-005056887b79 |Уровень: Ошибка |PluginExecutionExceptionHandler.Handle в PluginExecutionExceptionHandler.Handle (Поток из, Поток в, Исключение) в CompositeSoapExtensionExceptionHandler.Handle (Поток в, Поток из, Исключение) в сообщении CrmAuthenticationSoapExtensionBase.ProcessMessage (SoapMesssionException)throwOnException)в SoapServerProtocol.WriteException (исключение e, Stream outputStream) в WebServiceHandler.WriteException (исключение e) в WebServiceHandler.Invoke () в WebServiceHandler.CoreProcessRequest () в SyncSessionlessHandler.ProcessRequest (контекст HttpContext) в CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () в HttpApplication.ExecuteStep (шаг IExecutionStep, логическое и завершено синхронно) в ApplicationStepManager.ResumeSteps (ошибка исключения) в HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest (контекст HttpContext, AsyncCallback cb, Object extraData) в HttpRuntime.ProcessRequestInternal (HttpWorkerRequest wr) at HttpRuntime.ProcessRequestNoDemand (HttpWorkerRequest wr) at ISAPIRuntime.ProcessRequest (IntPtr ecb, Int32 iWRType) Обнаружено CrmSoapExtension InvalidPluginExecutionException: System.Web.Services.Protocols.SoapException: серверу не удалось обработать запрос. ---> Microsoft.Crm.Sdk.InvalidPluginExecutionException: ссылка на объект не установлена ​​для экземпляра объекта. ---> System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта. в AccessCRM.PluginUtilities.GetStringValueFromProperty (свойство p) в AccessCRM.ChangeLogContactData.Execute (контекст IPluginExecutionContext) в Microsoft.Crm.Extensibility.PluginStep.Execute (контекст PipelineExecutionContext) --- Конец внутренней трассировки стека исключений --- в Microsoft.Crm.Extensibility.PluginStep.Execute (контекст PipelineExecutionContext) в Microsoft.Crm.Extensibility.Pipeline.Execute (контекст PipelineExecutionContext) в Microsoft.Crm.Extensibility.MessageProcessor.Execute (контекст PipelineExecutionContext) в Microsoft.Crm.Extensibility.InternalMessageDispatcher.Execute (контекст PipelineExecutionContext) в Microsoft.Crm.Extensibility.ExternalMessageDispatcher.Execute (String messageName, Int32 primaryObjectTypeCode, Int32 вторичныйObjectTypeCode, поля PropertyBag, CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid caller) в Microsoft.Crm.Sdk.CrmServiceInternal.Update (строка namespaceName, сущность BusinessEntityBase, CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId) в Microsoft.Crm.Sdk.Crm2007.CrmService.Update (субъект BusinessEntity) --- Конец внутренней трассировки стека исключений ---

1 Ответ

1 голос
/ 04 июля 2011

Глядя на трассировку стека, ошибка фактически выдается в плагине, а не в коде, который вы вставили выше. В частности, посмотрите на эту строку:

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object. 
at AccessCRM.PluginUtilities.GetStringValueFromProperty(Property p)
at AccessCRM.ChangeLogContactData.Execute(IPluginExecutionContext context)

Вам нужно опубликовать код для этого плагина, чтобы мы могли по-другому взглянуть.

В качестве альтернативы используйте Удаленная отладка для самостоятельной отладки.

...