是否有人试图创建一个插件来更新报价产品表单中的记录值?我创建了一个,因为我需要一个计算扩展金额字段的自定义公式,但CRM中有自动计算来填充这些字段。这根本不允许我更新计算公式。
我的插件的作用是:
但是,这一切都不起作用,因为我得到了一个"业务流程错误&#34 ;; 基本上这个错误告诉我,我不能使用记录的guid来访问它。
这是我的代码:
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 :(得分: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
以反映折扣,但该过程应该完全相同。