2016-08-31 3 views
0

Я создаю плагин, который должен принимать данные от объекта 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); 
+1

Где вы получаете 'entity', в который вы храните результат? Кроме того, на каком этапе вы зарегистрировали плагин (в разделе «Обновление» «QuoteProduct»)? Вот прогулка по отладке плагина: [Шаг за шагом: работа с профилировщиком плагинов CRM2011] (https://support.microsoft.com/en-us/kb/2778280) –

+0

Это всего лишь часть код, есть часть до того, где я получаю свою сущность. Я попытаюсь отладить этот плагин. –

+1

Если у вас есть правильный объект, ваш способ обновления значения должен работать (обратите внимание, что вы обновляете один и тот же объект несколько раз). Вы подтвердили, что ваш плагин зарегистрирован для правильного шага? После запуска профилирования плагина вы увидите сообщение об ошибке при запуске плагина из CRM. –

ответ

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

Возможно ли, что ваш запрос не возвращает никаких данных, поэтому ваш цикл никогда не упал в и ваше обновление не выполняется?

Как уже было предложено, посмотрите, как отлаживать плагин через профилировщик плагина.

Или, если вы не хотите этого делать. Выбросьте временное исключение в свой код после выполнения RetrieveMultiple и в сообщении добавьте значение result.Entities.Count, чтобы подтвердить, сколько записей вы возвращаете.

+0

Я сделал такую ​​же выборку в JavaScript и вставлял в форму, и есть 4 строки результатов. –

Смежные вопросы