Hello guys,
I have couple of plugins on the "quote" entity and they work just fine when the Price list is USD. When I create a new Quote, and set the Price List to something other than "USD", like "EUR" per say - I'm not allowed to create a quote product for this quote, and the error that I get is "ISV Code aborted the operation".
I know that this error is given when you have more than one plugin updating the same entity, but I don't use the pricelist for none of this plugins, except for one, that is not even triggered on create of quote, but on change of a yes/no field.
Here is the code that is in that plugin:
protected void ExecuteQuoteCreateOrders(LocalPluginContext localContext) { if (localContext == null) { throw new ArgumentNullException("localContext"); } // TODO: Implement your custom Plug-in business logic. IPluginExecutionContext context = localContext.PluginExecutionContext; IOrganizationService service = localContext.OrganizationService; Guid quoteProductID = (Guid)((Entity)context.InputParameters["Target"]).Id; var serviceContext = new OrganizationServiceContext(service); ColumnSet set = new ColumnSet(); set.AllColumns = true; var quote = service.Retrieve("quote", quoteProductID, set); if (context.Depth > 1) { return; } else { var customerID = (EntityReference)quote["customerid"]; var customer = service.Retrieve(customerID.LogicalName, customerID.Id, new ColumnSet() { AllColumns = true }); if (quote.Contains("new_createinvoice")) { var salesorderType = (OptionSetValue)quote["new_createinvoice"]; if (salesorderType.Value == 1) { string quoteName = (string)quote["name"]; string orderProductName = "Advance payment for " + quoteName; var prepayedAmount = (Money)quote["new_prepayedamount"]; var advanceProductId = "14"; var salesorder = new Entity("salesorder"); salesorder["name"] = quoteName + " Invoice Order for the Prepayment"; salesorder["quoteid"] = new EntityReference(quote.LogicalName, quote.Id); salesorder["customerid"] = new EntityReference(customer.LogicalName, customer.Id); salesorder["pricelevelid"] = (EntityReference)quote["pricelevelid"]; salesorder["new_recommendedtotal"] = (Money)quote["new_prepayedamount"]; salesorder["new_pricingtype"] = new OptionSetValue(((OptionSetValue)quote["new_pricingtype"]).Value); salesorder["new_reloadflag"] = false; var orderID = (Guid)service.Create(salesorder); //Create the order detail var orderProduct = new Entity("salesorderdetail"); orderProduct["salesorderid"] = new EntityReference("salesorder", orderID); //////retrieve product ConditionExpression condition = new ConditionExpression(); condition.AttributeName = "name"; condition.Operator = ConditionOperator.Equal; condition.Values.Add("pc"); FilterExpression filter = new FilterExpression(); filter.AddCondition(condition); QueryExpression query = new QueryExpression(); query.EntityName = "uom"; query.ColumnSet = new ColumnSet(true); query.Criteria = filter; // Query for the UOM ConditionExpression conditionProduct = new ConditionExpression(); conditionProduct.AttributeName = "productnumber"; conditionProduct.Operator = ConditionOperator.Equal; conditionProduct.Values.Add(advanceProductId); FilterExpression filterProduct = new FilterExpression(); filterProduct.AddCondition(conditionProduct); QueryExpression queryProduct = new QueryExpression(); queryProduct.EntityName = "product"; queryProduct.ColumnSet = new ColumnSet(true); queryProduct.Criteria = filterProduct; EntityCollection uomCollection = service.RetrieveMultiple(query); EntityCollection productCollection = service.RetrieveMultiple(queryProduct); //uom.Entities.F var firstUom = uomCollection.Entities.FirstOrDefault(); var firstProduct = productCollection.Entities.FirstOrDefault(); //foreach (var product in uom.Entities) //{ // orderProduct["productid"] = product.ToEntityReference(); //} //EntityCollection uoms = service.RetrieveMultiple(unitQuery); //var uomProduct = uoms.Entities[0]; //var uom = service.Retrieve("uom", new Guid("06EBB338-468D-437B-B547-A3E600EB9A97"), new ColumnSet(){AllColumns=true}); var uom = service.Retrieve(firstUom.LogicalName, firstUom.Id, new ColumnSet() { AllColumns = true }); //throw new InvalidPluginExecutionException(firstProduct.Id.ToString()); //var product = service.Retrieve("product", new Guid("0DD28827-C9D5-E311-9397-00155D0A4E33"), new ColumnSet(){AllColumns=true}); var product = service.Retrieve(firstProduct.LogicalName, firstProduct.Id, new ColumnSet() { AllColumns = true }); orderProduct["productid"] = new EntityReference("product", product.Id); orderProduct["uomid"] = new EntityReference("uom", uom.Id); orderProduct["description"] = (string)orderProductName; orderProduct["tax"] = (decimal)0; orderProduct["new_pricingtype"] = new OptionSetValue(((OptionSetValue)quote["new_pricingtype"]).Value); orderProduct["priceperunit"] = new Money(prepayedAmount.Value); //throw new InvalidPluginExecutionException(prepayedAmount.Value.ToString()); orderProduct["quantity"] = (decimal)1; orderProduct["new_pricingtype"] = new OptionSetValue(1); orderProduct["new_ratio"] = (decimal)1; orderProduct["manualdiscountamount"] = new Money(0); orderProduct["new_specificdiscountpercentage"] = (decimal)0; orderProduct["new_grossannualincome"] = new Money(prepayedAmount.Value); orderProduct["new_gaixratio"] = new Money(prepayedAmount.Value); orderProduct["new_recommendedvalue"] = new Money(prepayedAmount.Value); orderProduct["new_fixedpriceplusratio"] = new Money(prepayedAmount.Value); service.Create(orderProduct); //service.Update(salesorder); } else if (salesorderType.Value == 2) { string quoteName = (string)quote["name"]; string orderProductName = "Advance payment for " + quoteName; var prepayedAmount = (Money)quote["new_prepayedamount"]; var salesorder = new Entity("salesorder"); salesorder["name"] = quote["name"] + " Invoice Order for the Residual"; salesorder["quoteid"] = new EntityReference(quote.LogicalName, quote.Id); salesorder["customerid"] = new EntityReference(customer.LogicalName, customer.Id); salesorder["pricelevelid"] = (EntityReference)quote["pricelevelid"]; salesorder["new_recommendedtotal"] = (Money)quote["new_prepayedamount"]; salesorder["new_pricingtype"] = new OptionSetValue(((OptionSetValue)quote["new_pricingtype"]).Value); salesorder["new_reloadflag"] = false; var orderID = (Guid)service.Create(salesorder); //Create the order detail var orderProduct = new Entity("salesorderdetail"); orderProduct["salesorderid"] = new EntityReference("salesorder", orderID); //////retrieve product ConditionExpression condition = new ConditionExpression(); condition.AttributeName = "name"; condition.Operator = ConditionOperator.Equal; condition.Values.Add("pc"); FilterExpression filter = new FilterExpression(); filter.AddCondition(condition); QueryExpression query = new QueryExpression(); query.EntityName = "uom"; query.ColumnSet = new ColumnSet(true); query.Criteria = filter; // Query for the UOM ConditionExpression conditionProduct = new ConditionExpression(); conditionProduct.AttributeName = "productnumber"; conditionProduct.Operator = ConditionOperator.Equal; conditionProduct.Values.Add("14"); FilterExpression filterProduct = new FilterExpression(); filterProduct.AddCondition(conditionProduct); QueryExpression queryProduct = new QueryExpression(); queryProduct.EntityName = "product"; queryProduct.ColumnSet = new ColumnSet(true); queryProduct.Criteria = filterProduct; EntityCollection uomCollection = service.RetrieveMultiple(query); EntityCollection productCollection = service.RetrieveMultiple(queryProduct); //uom.Entities.F var firstUom = uomCollection.Entities.FirstOrDefault(); var firstProduct = productCollection.Entities.FirstOrDefault(); var uom = service.Retrieve(firstUom.LogicalName, firstUom.Id, new ColumnSet() { AllColumns = true }); var product = service.Retrieve(firstProduct.LogicalName, firstProduct.Id, new ColumnSet() { AllColumns = true }); orderProduct["productid"] = new EntityReference("product", product.Id); orderProduct["uomid"] = new EntityReference("uom", uom.Id); orderProduct["description"] = (string)orderProductName; orderProduct["tax"] = (decimal)0; orderProduct["new_pricingtype"] = new OptionSetValue(((OptionSetValue)quote["new_pricingtype"]).Value); orderProduct["priceperunit"] = new Money(prepayedAmount.Value); orderProduct["quantity"] = (decimal)1; orderProduct["new_pricingtype"] = new OptionSetValue(1); orderProduct["new_ratio"] = (decimal)1; orderProduct["manualdiscountamount"] = new Money(0); orderProduct["new_specificdiscountpercentage"] = (decimal)0; orderProduct["new_grossannualincome"] = new Money(prepayedAmount.Value); orderProduct["new_gaixratio"] = new Money(prepayedAmount.Value); orderProduct["new_recommendedvalue"] = new Money(prepayedAmount.Value); orderProduct["new_fixedpriceplusratio"] = new Money(prepayedAmount.Value); service.Create(orderProduct); }; } } }
Do you guys have any suggestions that may point me to the solution of this?
Thanks in Advance,
Georgi B