我已向联系人实体添加了一个自定义属性(“custom_contacttype”)。该属性是由七个值组成的选择列表类型。我正在使用针对 CRM 4.0 的 Microsoft Dynamics CRM 的高级开发人员扩展进行开发。在我设置此属性的值并调用 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 at PluginStep.Execute(PipelineExecutionContext context) at Pipeline.Execute(PipelineExecutionContext context) at MessageProcessor.Execute(PipelineExecutionContext context) at InternalMessageDispatcher.Execute(PipelineExecutionContext context) at ExternalMessageDispatcher.Execute(String messageName, Int32 primaryObjectTypeCode, Int32 secondaryObjectTypeCode, PropertyBag CrmServiceInternal.Update(String namespaceName, BusinessEntityBase entity, CorrelationToken correlationToken,
SdkMessageProcessingStepId 中的 Web 服务插件失败:{27DF4121-19BC-DF11-A90E-005056887B79};实体名称:联系人;阶段:10;消息名称:更新;程序集名称:AccessCRM.ChangeLogContactData,AccessCRM,版本=1.0.0.0,文化=中性,PublicKeyToken=a030c130976783ab;类名:AccessCRM.ChangeLogContactData;异常:未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例。在 AccessCRM.PluginUtilities.GetStringValueFromProperty(Property p) 在 AccessCRM.ChangeLogContactData.Execute(IPluginExecutionContext context) 在 Microsoft.Crm.Extensibility.PluginStep.Execute(PipelineExecutionContext context) 。[2011-07-01 16:39:33.7] 进程:w3wp |组织:f827deb3-c6cc-df11-bc07-005056887b79 |线程:8 |类别:Platform.Sdk |用户:822138f1-c574-e011-9dca-005056887b79 |级别:错误 | PluginExecutionExceptionHandler.Handle at PluginExecutionExceptionHandler.Handle(Stream from, Stream to, Exception exception) at CompositeSoapExtensionExceptionHandler.Handle(Stream to, Stream from, Exception exception) at CrmAuthenticationSoapExtensionBase.ProcessMessage(SoapMessage message) at SoapMessage.RunExtensions(SoapExtension[] extensions, Boolean throwOnException) 在 SoapServerProtocol.WriteException(Exception e, Stream outputStream) 在 WebServiceHandler.WriteException(Exception e) 在 WebServiceHandler.Invoke() 在 WebServiceHandler.CoreProcessRequest() 在 CallHandlerExecutionStep.System.Web.HttpApplication 在 SyncSessionlessHandler.ProcessRequest(HttpContext context)。 HttpApplication 中的 IExecutionStep.Execute()。ApplicationStepManager.ResumeSteps(异常错误)在 HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext 上下文,AsyncCallback cb,对象 extraData)在 HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr)在 HttpRuntime.ProcessRequestNoDemand(HttpWorkerRequest WR) 在 ISAPIRuntime.ProcessRequest(IntPtr ecb, Int32 iWRType) CrmSoapExtension 检测到 InvalidPluginExecutionException: System.Web.Services.Protocols.SoapException: 服务器无法处理请求。---> Microsoft.Crm.Sdk.InvalidPluginExecutionException:对象引用未设置为对象的实例。---> System.NullReferenceException:对象引用未设置为对象的实例。在 AccessCRM.PluginUtilities。