CRM插件无法正常工作C#

时间:2016-08-31 13:20:53

标签: c# dynamics-crm crm

我正在创建一个应该从Quote Product实体获取数据的插件。 默认情况下,百分比字段没有折扣,只有折扣金额。我在表格(ad_discountpercent)中添加了折扣%。现在我应该计算这样的新价格:

sum = (price - discount)*quantity*(100 - discount%)/100

我为此制作了一个代码。当我构建此代码时没有错误,但CRM中没有任何更改。我也注册了我的插件。

有3个字段manualdiscountamountpriceperunitextendedamount是货币类型字段。 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);

2 个答案:

答案 0 :(得分:2)

ExtendedAmount是基于priceperunitquantity的自动计算字段。因此,CRM将忽略对此字段的任何更新。

而是更新priceperunitquantity以获得所需的extendedamount

entity["priceperunit"] = new Money((price - discount) * quantity * (100 - discountPer) / 100);
entity["quantity"] = 1;
service.Update(entity);

答案 1 :(得分:1)

您的查询是否可能无法返回任何数据,因此您的循环永远不会被丢弃并且您的更新永远不会执行?

如前所述,请看一下如何通过插件分析器调试插件。

或者,如果你不想这样做。在执行RetrieveMultiple后在代码中抛出一个临时异常,并在消息中添加result.Entities.Count值以确认您将返回多少条记录。