CRM 插件不工作 C#

CRM Plugin not working C#

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

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

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

有 3 个字段 manualdiscountamountpriceperunitextendedamount 是货币类型字段。 quantity 是十进制,ad_discountpercent 是整数。我找到了几种从 Currency 中获取价值的方法,有些被评论了,有些没有,因为我不知道哪个是合适的。

请注意,我检查了提取结果,它们符合预期,因此提取工作正常。由于代码长度,我把它压缩成一行。

这是应该完成这项工作的代码部分。我不知道转换有什么问题,我是否使用正确的方法来设置新值? 我是新手,所以任何评论都会对我有所帮助。

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);

是否有可能您的查询没有返回任何数据,因此您的循环永远不会进入并且您的更新永远不会执行?

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

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

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

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

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