【问题标题】:Error Updating Dynamic Entity When Setting Property Value of Type PickList设置 PickList 类型的属性值时更新动态实体时出错
【发布时间】:2011-07-01 21:47:41
【问题描述】:

我已向联系人实体添加了一个自定义属性(“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 在 PluginStep.Execute(PipelineExecutionContext 上下文) 在 Pipeline.Execute(PipelineExecutionContext 上下文) 在 MessageProcessor.Execute(PipelineExecutionContext 上下文) 在 InternalMessageDispatcher.Execute(PipelineExecutionContext 上下文) 在 ExternalMessageDispatcher.Execute(字符串 messageName、Int32 primaryObjectTypeCode、Int32 secondaryObjectTypeCode、PropertyBag 字段、CorrelationToken correlationToken、CallerOriginToken originToken、UserAuth userAuth、Guid callerId) 在 CrmServiceInternal.Update(字符串命名空间名称、BusinessEntityBase 实体、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, Binder binder, Object[] 参数, CultureInfo 文化, Boolean skipVisibilityChecks) 在 RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] 参数, CultureInfo 文化) 在 LogicalMethodInfo.Invoke(对象目标,对象 [] 值) 在 WebServiceHandler.Invoke() 在 WebServiceHandler.CoreProcessRequest() 在 SyncSessionlessHandler.ProcessRequest(HttpContext 上下文) 在 CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 HttpApplication.ExecuteStep(IExecutionStep 步骤,Boolean& completedSynchronously) 在 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)

Web 服务插件在 SdkMessageProcessingStepId 中失败:{27DF4121-19BC-DF11-A90E-005056887B79};实体名称:联系人;阶段:10;消息名称:更新;程序集名称:AccessCRM.ChangeLogContactData,AccessCRM,版本=1.0.0.0,文化=中性,PublicKeyToken=a030c130976783ab;类名: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(Stream from, Stream to, Exception 异常) 在 CompositeSoapExtensionExceptionHandler.Handle(流到,流从,异常异常) 在 CrmAuthenticationSoapExtensionBase.ProcessMessage(SoapMessage 消息) 在 SoapMessage.RunExtensions(SoapExtension[] 扩展,布尔 throwOnException) 在 SoapServerProtocol.WriteException(异常 e,流 outputStream) 在 WebServiceHandler.WriteException(异常 e) 在 WebServiceHandler.Invoke() 在 WebServiceHandler.CoreProcessRequest() 在 SyncSessionlessHandler.ProcessRequest(HttpContext 上下文) 在 CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 HttpApplication.ExecuteStep(IExecutionStep 步骤,Boolean& completedSynchronously) 在 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.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(字符串 messageName、Int32 primaryObjectTypeCode、Int32 secondaryObjectTypeCode、PropertyBag 字段、CorrelationToken correlationToken、CallerOriginToken originToken、UserAuth userAuth、Guid callerId) 在 Microsoft.Crm.Sdk.CrmServiceInternal.Update(字符串命名空间名称、BusinessEntityBase 实体、CorrelationToken 相关令牌、CallerOriginToken originToken、UserAuth userAuth、Guid callerId) 在 Microsoft.Crm.Sdk.Crm2007.CrmService.Update(BusinessEntity 实体) --- 内部异常堆栈跟踪结束 ---

【问题讨论】:

    标签: crm microsoft-dynamics xrm


    【解决方案1】:

    查看堆栈跟踪,错误实际上是在插件中引发的,而不是在您上面粘贴的代码中。特别看这一行:

    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)
    

    您需要发布该插件的代码,以便我们再次查看。

    也可以使用Remote Debugging 自行调试。

    【讨论】:

    • 谢谢。很有帮助。我对插件不是很熟悉。找到编写它的开发人员。在这个问题上与他合作。再次感谢。
    • 现在已修复。发生更新时触发的插件正在获取 DynamicEntity,获取该选项列表属性,并查找选项列表值的名称。正在创建注释以记录更改,因此注释显示选项列表项的名称而不是 int 值是合理的。在实体上设置属性值时,我必须传入一个实际的 Picklist 对象(填充的名称和值),而不仅仅是一个整数值,这样当插件得到它时名称就会在那里。
    • 很高兴它已排序 - 您会发现许多 CRM 问题的插件有问题。
    • glosrob,你能看看我在stackoverflow.com/questions/6802124/…发布的另一个问题
    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2023-03-12
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    相关资源
    最近更新 更多