2014-11-27 1 views
0

Кто-нибудь пытался создать плагин, который обновляет значения записи в форме заявки? Я создал его, потому что мне нужна настраиваемая формула, которая вычисляет поле Extended Amount, но в CRM есть автоматические вычисления, которые заполняют эти поля. Это не позволяет мне вообще обновить формулу расчета.CRM 2013 Обновление цитаты Раздел продукта

Что мой плагин сделать, это:

  1. Получает значения из полой Цены за единицу, количество и дисконтным% (что является настраиваемым полем);
  2. Вычисляет значение, которое мне нужно;
  3. Устанавливает его в поле увеличенной суммы.

Но все это не работает, потому что я получаю «ошибку бизнес-процесса»; В основном эта ошибка говорит мне, что я не могу использовать руководство записи для доступа к нему.

Вот мой код:

protected void ExecutePostQuoteProductUpdate(LocalPluginContext localContext) 
    { 
     if (localContext == null) 
     { 
      throw new ArgumentNullException("localContext"); 
     } 

     IPluginExecutionContext context = localContext.PluginExecutionContext; 
     IOrganizationService service = localContext.OrganizationService; 

     Guid quoteProductID = (Guid)((Entity)context.InputParameters["Target"]).Id; 
     ColumnSet set = new ColumnSet(); 
     set.AllColumns = true; 

     var quote = service.Retrieve("quotedetail", quoteProductID, set); 
     var priceperunit = quote.Attributes["priceperunit"]; 
     var teamleader = quote.Attributes["new_disc"]; 
     var manualdiscountamount = quote.Attributes["manualdiscountamount"]; 
     var volumediscountamount = quote.Attributes["volumediscountamount"]; 
     var VAT = (int)quote.Attributes["new_vat"]; 

     var discountamount = (double)priceperunit * (double)teamleader/100; 
     var baseamount = (double)priceperunit - discountamount; 
     var tax = baseamount * VAT/100; 
     var extendedamount = baseamount + tax; 
     quote.Attributes["new_discountamount"] = discountamount; 
     quote.Attributes["baseamount"] = baseamount; 
     quote.Attributes["tax"] = tax; 
     quote["description"] = priceperunit; 
     quote.Attributes["extendedamount"] = extendedamount; 
     service.Update(quote); 


    } 

Пожалуйста, скажи мне, если есть способ получить доступ к этим полям и используйте/выводящие их.

Спасибо заранее! :/

ответ

0

Вы не можете напрямую обновить extendedamount - вместо этого, если вы используете встроенные поля, которые автоматически вычисляют его, CRM позаботится об этом для вас.

Эти поля: baseamount, quantity, discountamount и tax. Это Money поля, так что вам нужно будет хранить их как таковые:

quote.Attributes["baseamount"] = new Money(baseamount); // Money and decimal numbers use the "decimal" datatype and not double. 

Что касается вашего пользовательского вычисления, вам просто нужно преобразовать процент хранящегося в пользовательской области в фактическое количество и назначить его атрибут discountamount , Что-то вроде:

var discountamount = (decimal)priceperunit * (decimal)teamleader/100; 
// Assigning the actual discount amount will automatically recalculate the extended amount on the line. 
// No need to recalculate all fields. 
quote.Attributes["discountamount"] = new Money(discountamount); 

Обратите внимание, что tax может потребоваться перерасчет с учетом скидки, но этот процесс должен работать точно так же.

+0

Спасибо, Джейсон! Теперь я знаю, что мне нужно использовать другие поля, чтобы установить Extended Amount в определенное значение. Не могли бы вы рассказать мне, как мне получить доступ к полям, таким как priceperunit, потому что таким образом var priceperunit = quote.Attributes ["priceperunit"]; дает мне ошибку ISV в CRM:/ – Goshenko

+0

Атрибут «priceperunit» будет введен только в том случае, если он был обновлен графическим интерфейсом (или, более конкретно, изменением дельта), в противном случае вам нужно будет ввести его как часть изображения. Если вы знаете 'baseamount' и' количество', вы можете просто сделать 'price = baseamount/quantity' –

+0

Это хороший обходной путь, но, к сожалению, у меня нет доступа к ** baseamount **. – Goshenko

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

  • Нет связанных вопросов^_^