我的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未被用户代码
处理 消息=处理此请求时发生错误 来源= Microsoft.Xrm.Sdk
堆栈跟踪:
在Microsoft.Xrm.Sdk.Client.OrganizationServiceContext.SaveChanges(SaveChangesOptions选项)
在Plugin.TaxCreator(IOrganizationService服务,Guid QPID)中的C:\ Users \ mycrm \ Desktop \ BMSD.QuoteProduct.Tax \ BMSD.QuoteProduct.Tax \ BMSD.QuoteProduct.Tax.cs:第62行 在插件.Execute(IServiceProvider serviceProvider)在C:\ Users \ mycrm \ Desktop \ BMSD.QuoteProduct.Tax \ BMSD.QuoteProduct.Tax \ BMSD.QuoteProduct.Tax.cs:第38行
在Microsoft.Crm.Extensibility.V5PluginProxyStep.ExecuteInternal(PipelineExecutionContext context)
在Microsoft.Crm.Extensibility.VersionedPluginProxyStepBase.Execute(PipelineExecutionContext context)
InnerException:System.ServiceModel.FaultException Message = System.InvalidCastException:Microsoft Dynamics CRM遇到错误。管理员或支持的参考编号:#BE061894
来源= Microsoft.Crm.Extensibility
堆栈跟踪:
在Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.Execute(OrganizationRequest请求,CorrelationToken correlationToken,CallerOriginToken callerOriginToken,WebServiceType serviceType)
在Microsoft.Crm.Extensibility.InprocessServiceProxy.ExecuteCore(OrganizationRequest请求)
在Microsoft.Xrm.Sdk.Client.OrganizationServiceContext.Execute(OrganizationRequest request)
在Microsoft.Xrm.Sdk.Client.OrganizationServiceContext.SaveChange(OrganizationRequest请求,IList`1结果)
InnerException:
答案 0 :(得分:4)
从堆栈跟踪中有一个System.InvalidCastException
这意味着某些属性的值具有不正确的类型。由于您只更改'tax'属性,因此其类型不正确。最有可能“税”是一个Money字段,所以我猜你应该为它分配decimal
类型的变量,而不是double
。尝试这样的事情:
decimal Tax = (decimal)((QuoteProduct.BaseAmount
- QuoteProduct.ManualDiscountAmount.GetValueOrDefault()
- QuoteProduct.VolumeDiscountAmount.GetValueOrDefault()) / 20);
答案 1 :(得分:1)
根据所提供的信息,当您转换为双倍时,它可能是转换问题。问题在于,默认情况下,CRM提供的reals精度高于您尝试将其加入的精度。
因此,即使您正在处理的实际值适合其中任何一个(并且 double 是C#中非整数的事实上的标准),计算机会做出反应并给出警告你把某些东西(可能)放在一个(相对)小洞里。
您需要重新声明 tax ,如下所示。
//double tax;
decimal tax = QuoteProduct.BaseAmount
- QuoteProduct.ManualDiscountAmount.GetValueOrDefault()
- QuoteProduct.VolumeDiscountAmount.GetValueOrDefault();
QuoteProduct.Attributes["tax"] = tax / 20;
或者您可以使用内置转换类手动将十进制值转换为 double 。但是,鉴于您将结果放入一个字段(肯定会管理 decimal 类型),在我看来这是一个不必要的绕道。
您可以阅读不同类型by clicking here的更多内容。