Я создаю плагин, который должен принимать данные от объекта Quote Product
. По умолчанию скидка в процентах не предоставляется, просто скидка. Я добавил скидку%, поданную в форму (ad_discountpercent
). Теперь я должен рассчитать новую цену следующим образом:Плагин CRM не работает C#
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);
Где вы получаете 'entity', в который вы храните результат? Кроме того, на каком этапе вы зарегистрировали плагин (в разделе «Обновление» «QuoteProduct»)? Вот прогулка по отладке плагина: [Шаг за шагом: работа с профилировщиком плагинов CRM2011] (https://support.microsoft.com/en-us/kb/2778280) –
Это всего лишь часть код, есть часть до того, где я получаю свою сущность. Я попытаюсь отладить этот плагин. –
Если у вас есть правильный объект, ваш способ обновления значения должен работать (обратите внимание, что вы обновляете один и тот же объект несколько раз). Вы подтвердили, что ваш плагин зарегистрирован для правильного шага? После запуска профилирования плагина вы увидите сообщение об ошибке при запуске плагина из CRM. –