c# - SaveChanges CRM 2011 插件未处理的异常

标签 c# plugins dynamics-crm-2011

我的 CRM 2011 插件有问题。

var QuoteProduct = crm.QuoteDetailSet.Where(c 
  => c.QuoteDetailId == QPID).First();
double Tax = (double)(
  (QuoteProduct.BaseAmount 
    - QuoteProduct.ManualDiscountAmount.GetValueOrDefault() 
    - QuoteProduct.VolumeDiscountAmount.GetValueOrDefault()) / 20);
QuoteProduct.Attributes["tax"] = Tax;
crm.UpdateObject(QuoteProduct);
crm.SaveChanges();

保存更改行时发生错误。错误详情如下。

Microsoft.Xrm.Sdk.SaveChangesException was unhandled by user code
Message=An error occured while processing this request.
Source=Microsoft.Xrm.Sdk
StackTrace:
at Microsoft.Xrm.Sdk.Client.OrganizationServiceContext.SaveChanges(SaveChangesOptions options)
at Plugin.TaxCreator(IOrganizationService service, Guid QPID) in C:\Users\mycrm\Desktop\BMSD.QuoteProduct.Tax\BMSD.QuoteProduct.Tax\BMSD.QuoteProduct.Tax.cs:line 62
at Plugin.Execute(IServiceProvider serviceProvider) in C:\Users\mycrm\Desktop\BMSD.QuoteProduct.Tax\BMSD.QuoteProduct.Tax\BMSD.QuoteProduct.Tax.cs:line 38
at Microsoft.Crm.Extensibility.V5PluginProxyStep.ExecuteInternal(PipelineExecutionContext context)
at Microsoft.Crm.Extensibility.VersionedPluginProxyStepBase.Execute(PipelineExecutionContext context)
InnerException: System.ServiceModel.FaultException Message=System.InvalidCastException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #BE061894
Source=Microsoft.Crm.Extensibility
StackTrace:
at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.Execute(OrganizationRequest request, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType)
at Microsoft.Crm.Extensibility.InprocessServiceProxy.ExecuteCore(OrganizationRequest request)
at Microsoft.Xrm.Sdk.Client.OrganizationServiceContext.Execute(OrganizationRequest request)
at Microsoft.Xrm.Sdk.Client.OrganizationServiceContext.SaveChange(OrganizationRequest request, IList`1 results)
InnerException:

最佳答案

从堆栈跟踪中可以看到 System.InvalidCastException

这意味着某些属性的值类型不正确。由于您仅更改“tax”属性,因此其类型不正确。最有可能的“tax”是一个 Money 字段,所以我想你应该将 decimal 类型的变量分配给它,而不是 double 。尝试这样的事情:

decimal Tax = (decimal)((QuoteProduct.BaseAmount 
  - QuoteProduct.ManualDiscountAmount.GetValueOrDefault() 
  - QuoteProduct.VolumeDiscountAmount.GetValueOrDefault()) / 20);

关于c# - SaveChanges CRM 2011 插件未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15320363/

相关文章:

c# - 洗牌以覆盖所有可能的排列

c# - 如何以编程方式获取主 Dns 后缀?

具有返回多个接口(interface)实现的方法的 C# 接口(interface)

grails - grails:gant无法解析调用类

javascript - 在 Dynamics 2011 中调用对话框并将多个 recordID 传递给它

c# - 如何将外部 Xaml 页面链接到通用 Windows 平台中的网格?

java - ImageJ - 减去背景

Grails 解决某些依赖项非常慢

javascript - 客户关系管理 2011 : Unwanted text in Case's Description field after populating with email body

javascript - Dynamics CRM 2011 检索所有主题