CRM 插件不工作 C#
CRM Plugin not working C#
我正在制作一个应该从 Quote Product
实体获取数据的插件。
默认情况下,百分比字段没有折扣,只有折扣金额。我在表格中添加了 Discount% filed (ad_discountpercent
)。现在我应该这样计算新价格:
sum = (price - discount)*quantity*(100 - discount%)/100
我为此编写了一个代码。当我构建此代码时没有错误,但 CRM 中没有任何更改。我也注册了我的插件。
有 3 个字段 manualdiscountamount
、 priceperunit
、 extendedamount
是货币类型字段。 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 是基于 priceperunit
和 quantity
的自动计算字段。因此,CRM 将忽略对该字段的任何更新。
而是更新 priceperunit
和 quantity
以获得所需的 extendedamount
。
entity["priceperunit"] = new Money((price - discount) * quantity * (100 - discountPer) / 100);
entity["quantity"] = 1;
service.Update(entity);
我正在制作一个应该从 Quote Product
实体获取数据的插件。
默认情况下,百分比字段没有折扣,只有折扣金额。我在表格中添加了 Discount% filed (ad_discountpercent
)。现在我应该这样计算新价格:
sum = (price - discount)*quantity*(100 - discount%)/100
我为此编写了一个代码。当我构建此代码时没有错误,但 CRM 中没有任何更改。我也注册了我的插件。
有 3 个字段 manualdiscountamount
、 priceperunit
、 extendedamount
是货币类型字段。 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 是基于 priceperunit
和 quantity
的自动计算字段。因此,CRM 将忽略对该字段的任何更新。
而是更新 priceperunit
和 quantity
以获得所需的 extendedamount
。
entity["priceperunit"] = new Money((price - discount) * quantity * (100 - discountPer) / 100);
entity["quantity"] = 1;
service.Update(entity);