我正在创建一个应该从Quote Product
实体获取数据的插件。
默认情况下,百分比字段没有折扣,只有折扣金额。我在表格(ad_discountpercent
)中添加了折扣%。现在我应该计算这样的新价格:
sum = (price - discount)*quantity*(100 - discount%)/100
我为此制作了一个代码。当我构建此代码时没有错误,但CRM中没有任何更改。我也注册了我的插件。
有3个字段manualdiscountamount
,priceperunit
,extendedamount
是货币类型字段。 quantity
是十进制的,ad_discountpercent
是整数。我找到了一些从货币中获取价值的方法,有些是评论,有些则没有,因为我不知道哪一种是正确的。
我检查了一个通知获取结果,它们是预期的,所以fetch工作正常。由于代码长度的原因,我将它压缩成一行。
以下是应该完成工作的代码部分。我没有信息转换有什么问题,我是否使用正确的方法来设置新值? 我是新手,所以任何评论都会对我有帮助。
string fetch1 = @"<fetch count='50' ><entity name='quotedetail' ><attribute name='manualdiscountamount' /><attribute name='priceperunit' /><attribute name='ad_discountpercent' /><attribute name='quantity' /> <attribute name='extendedamount' /> <filter> <condition attribute='ad_discountpercent' operator='not-null'/> </filter > </ entity> </fetch>";
EntityCollection result = service.RetrieveMultiple(new FetchExpression(fetch1));
foreach (var c in result.Entities)
{
// int discountPer = (int)c.Attributes["ad_discountpercent"];
int discountPer = c.GetAttributeValue<int>("ad_discountpercent");
Money m = (Money)c.Attributes["priceperunit"];
decimal price = m.Value;
// decimal price = c.GetAttributeValue<decimal>("priceperunit");
Money m1 = (Money)c.Attributes["manualdiscountamount"];
decimal discount = m1.Value;
// decimal discount = c.GetAttributeValue<decimal>("manualdiscountamount");
//decimal discountPer = Convert.ToDecimal( c.Attributes["ad_discountpercent"]);
decimal quantity = Convert.ToDecimal(c.Attributes["quantity"]);
//decimal quantity = c.GetAttributeValue<decimal>("quantity");
decimal sum = (price - discount) * quantity * (100 - discountPer) / 100;
Money summTotal = new Money();
summTotal.Value = sum;
entity["extendedamount"] = summTotal;
service.Update(entity);
答案 0 :(得分:2)
ExtendedAmount是基于priceperunit
和quantity
的自动计算字段。因此,CRM将忽略对此字段的任何更新。
而是更新priceperunit
和quantity
以获得所需的extendedamount
。
entity["priceperunit"] = new Money((price - discount) * quantity * (100 - discountPer) / 100);
entity["quantity"] = 1;
service.Update(entity);
答案 1 :(得分:1)
您的查询是否可能无法返回任何数据,因此您的循环永远不会被丢弃并且您的更新永远不会执行?
如前所述,请看一下如何通过插件分析器调试插件。
或者,如果你不想这样做。在执行RetrieveMultiple后在代码中抛出一个临时异常,并在消息中添加result.Entities.Count值以确认您将返回多少条记录。