繁体   English   中英

Dynamics CRM 插件 - 操作前更新

[英]Dynamics CRM plugin -Pre Operation Update

我创建了一个插件,每当在报价实体上进行更新时,它都会根据自定义字段计算报价的定价。我在报价实体的预操作更新时执行该插件。我尝试调试我的插件,它检索空值.例如,字段“edm_CashAmount”的值包含 5000 但代码检索为空。 请在下面提出建议。 提前致谢。

namespace CRMPlugins.Plugins
{
    using System;
    using System.ServiceModel;
    using Microsoft.Xrm.Sdk;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Crm.Sdk.Messages;

    public class PrequoteUpdate : Plugin
    {

        public PrequoteUpdate()
            : base(typeof(PrequoteUpdate))
        {
            base.RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>(20, "Update", "quote", new Action<LocalPluginContext>(ExecutePrequoteUpdate)));

        }

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

            Entity entity = null;

            if (localContext.PluginExecutionContext.InputParameters.Contains("Target") && localContext.PluginExecutionContext.InputParameters["Target"] is Entity)
            {
                entity = (Entity)localContext.PluginExecutionContext.InputParameters["Target"];
            }
            else
            {
                return;
            }
            decimal instotal = 0;
            Quote quote = entity.ToEntity<Quote>();
            using (GeneratedEntities orgContext = new GeneratedEntities(localContext.OrganizationService))
            {
                var installements = (from b in orgContext.edm_installementSet
                                     where b.GetAttributeValue<Guid>("edm_quote") == quote.QuoteId
                                     select b);

                foreach (var c in installements)
                {

                    if (c.edm_Amount != null)
                    {
                        instotal += (decimal)c.new_Decimal;

                    }
                }
            }
            decimal cash = 0;
            if (quote.edm_CashAmount != null)
            {
                cash = Convert.ToDecimal(quote.GetAttributeValue<Money>("edm_cashamount").Value);
            }
            decimal check = 0;
            if (quote.edm_CheckAmount != null)
            {
                check = Convert.ToDecimal(quote.GetAttributeValue<Money>("edm_checkamount").Value);
            }
            decimal credit = 0;
            if (quote.edm_CreditCardAmount != null)
            {
                credit = Convert.ToDecimal(quote.GetAttributeValue<Money>("edm_creditcardamount").Value);
            }
            decimal gift = 0;
            if (quote.new_GiftCard != null)
            {
                gift = Convert.ToDecimal(quote.GetAttributeValue<Money>("new_giftcard").Value);
            }
            decimal total = 0;
            if (quote.TotalLineItemAmount != null)
            {
                total = Convert.ToDecimal(quote.GetAttributeValue<Money>("totallineitemamount").Value);
            }

            decimal currentbalane = 0;
            if (quote.edm_CurrentBalane != null)
            {
                currentbalane = Convert.ToDecimal(quote.GetAttributeValue<Money>("edm_currentbalane").Value);
            }


            decimal DiscAmount = 0;
            if (quote.DiscountAmount != null)
            {
                DiscAmount = Convert.ToDecimal(quote.GetAttributeValue<Money>("discountamount").Value);

            }

            decimal totalafterdiscount = total - DiscAmount;
            decimal tax = (totalafterdiscount * 10) / 100;
            decimal totalwithvat = totalafterdiscount + tax;
            decimal paidamount = cash + check + credit + gift + instotal;
            decimal remainingamount = totalwithvat - paidamount;
            quote["edm_cashamount_1"] = new Money(tax);
            quote["edm_totaltax"] = new Money(tax);
            quote["edm_paidamount"] = new Money(paidamount);
            quote["edm_remainingamount"] = new Money(remainingamount);
            quote["edm_total"] = new Money(totalwithvat);
            quote["edm_totalinstallements"] = new Money(instotal);
            quote["edm_checkamount_1"] = new Money(totalwithvat);

        }
    }
}

对于更新插件,如果该值未更改,则它不会出现在目标实体中。 因此,您应该创建一个包含这些值的实体前图像,或者您可以创建一个实体后图像以查看应用更改后实体的状态

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM