Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 奇怪的行为CRM 2011插件_C#_Plugins_Dynamics Crm 2011 - Fatal编程技术网

C# 奇怪的行为CRM 2011插件

C# 奇怪的行为CRM 2011插件,c#,plugins,dynamics-crm-2011,C#,Plugins,Dynamics Crm 2011,我已经为我们的报价产品注册了一个插件。该插件在我们的测试环境中运行良好。我已经测试过很多次了。然后在主服务器中注册插件。但是,出现以下情况: 当我首先创建或更新报价产品时,报价产品表格将变灰: 单击报价表后,出现错误。没有可用的日志文件(如您所见)。我调试了插件,但也没有错误。单击“确定”后,错误消失,所需业务发生在报价产品上(对于税务字段)。这意味着插件的代码没有错误,并且做得很好。守则如下: using System; using System.Diagnostics; using Sys

我已经为我们的报价产品注册了一个插件。该插件在我们的测试环境中运行良好。我已经测试过很多次了。然后在主服务器中注册插件。但是,出现以下情况: 当我首先创建或更新报价产品时,报价产品表格将变灰:

单击报价表后,出现错误。没有可用的日志文件(如您所见)。我调试了插件,但也没有错误。单击“确定”后,错误消失,所需业务发生在报价产品上(对于税务字段)。这意味着插件的代码没有错误,并且做得很好。守则如下:

using System;
using System.Diagnostics;
using System.Linq;
using System.ServiceModel;
using Microsoft.Xrm.Sdk;
using Xrm;
using System.Collections.Generic;
using Microsoft.Xrm.Sdk.Deployment;

public class Plugin : IPlugin
{
    public void Execute(IServiceProvider serviceProvider)
    {
        IPluginExecutionContext context = (IPluginExecutionContext)
        serviceProvider.GetService(typeof(IPluginExecutionContext));
        Entity entity;
        if (context.InputParameters.Contains("Target") &&
        context.InputParameters["Target"] is Entity)
        {
            entity = (Entity)context.InputParameters["Target"];
            if (entity.LogicalName != "quotedetail") { return; }
        }
        else
        {
            return;
        }
        try
        {
            IOrganizationServiceFactory serviceFactory =
                (IOrganizationServiceFactory)serviceProvider.GetService(
            typeof(IOrganizationServiceFactory));
            IOrganizationService service =
            serviceFactory.CreateOrganizationService(context.UserId);
            if (context.MessageName == "Create")
            {
                Entity QuoteProduct = (Entity)context.InputParameters["Target"];
                Guid QPID = QuoteProduct.Id;
                TaxCreator(service, QPID);
            }
            if (context.MessageName == "Update" && context.Depth < 3)
            {
                Entity QuoteProduct = (Entity)context.PostEntityImages["Target"];
                Guid QPID = QuoteProduct.Id;
                TaxUpdater(service, QPID);
            }
        }
        catch (FaultException<OrganizationServiceFault> ex)
        {
            throw new InvalidPluginExecutionException(
            "An error occurred in the plug-in.", ex);
        }
    }
    private static void TaxCreator(IOrganizationService service, Guid QPID)
    {
        using (var crm = new XrmServiceContext(service))
        {
            var QuoteProduct = crm.QuoteDetailSet.Where(c => c.QuoteDetailId == QPID).First();
            var SaleSetting = crm.new_salessettingSet.Where(c => c.statecode == 0).First();
            double TaxPercent = (Convert.ToDouble(SaleSetting.new_TaxPercent) / 100);
            if (QuoteProduct.IsPriceOverridden == false)
            {
                decimal Tax = (decimal)Convert.ToDecimal(Convert.ToDouble(QuoteProduct.BaseAmount - QuoteProduct.ManualDiscountAmount.GetValueOrDefault()) * TaxPercent);
                decimal PricePerUnit = (decimal)(QuoteProduct.PricePerUnit.GetValueOrDefault() - QuoteProduct.VolumeDiscountAmount.GetValueOrDefault());
                crm.UpdateObject(QuoteProduct);
                crm.SaveChanges();
                QuoteProduct.Attributes["tax"] = new Money(Tax);
                QuoteProduct.Attributes["new_result"] = new Money(PricePerUnit);
                crm.UpdateObject(QuoteProduct);
                crm.SaveChanges();
            }
        }
    }
    private static void TaxUpdater(IOrganizationService service, Guid QPID)
    {
        using (var crm = new XrmServiceContext(service))
        {
            var QuoteProduct = crm.QuoteDetailSet.Where(c => c.QuoteDetailId == QPID).First();
            var SaleSetting = crm.new_salessettingSet.Where(c => c.statecode == 0).First();
            double TaxPercent = (Convert.ToDouble(SaleSetting.new_TaxPercent) / 100);
            if (QuoteProduct.IsPriceOverridden == false)
            {
                decimal Tax = (decimal)Convert.ToDecimal(Convert.ToDouble(QuoteProduct.BaseAmount - QuoteProduct.ManualDiscountAmount.GetValueOrDefault()) * TaxPercent);
                decimal PricePerUnit = (decimal)(QuoteProduct.PricePerUnit.GetValueOrDefault() - QuoteProduct.VolumeDiscountAmount.GetValueOrDefault());
                crm.UpdateObject(QuoteProduct);
                crm.SaveChanges();
                QuoteProduct.Attributes["tax"] = new Money(Tax);
                QuoteProduct.Attributes["new_result"] = new Money(PricePerUnit);
                crm.UpdateObject(QuoteProduct);
                crm.SaveChanges();
            }
        }
    }
}
使用系统;
使用系统诊断;
使用System.Linq;
使用System.ServiceModel;
使用Microsoft.Xrm.Sdk;
使用Xrm;
使用System.Collections.Generic;
使用Microsoft.Xrm.Sdk.Deployment;
公共类插件:IPlugin
{
public void Execute(IServiceProvider服务提供程序)
{
IPluginExecutionContext上下文=(IPluginExecutionContext)
GetService(typeof(IPluginExecutionContext));
实体;
if(context.InputParameters.Contains(“目标”)&&
context.InputParameters[“Target”]是实体)
{
实体=(实体)上下文.InputParameters[“目标”];
if(entity.LogicalName!=“quotedetail”){return;}
}
其他的
{
返回;
}
尝试
{
I组织服务工厂服务工厂=
(IOOrganizationServiceFactory)serviceProvider.GetService(
类型(IOrganizationServiceFactory));
组织服务=
serviceFactory.CreateOrganizationService(context.UserId);
if(context.MessageName==“创建”)
{
实体QuoteProduct=(实体)上下文.InputParameters[“目标”];
Guid QPID=QuoteProduct.Id;
税收创造者(服务,QPID);
}
if(context.MessageName==“Update”&&context.Depth<3)
{
实体QuoteProduct=(实体)上下文。PostEntityImages[“目标”];
Guid QPID=QuoteProduct.Id;
TaxUpdater(服务,QPID);
}
}
捕获(FaultException-ex)
{
抛出新的InvalidPlugineExecutionException(
“插件中发生错误。”,ex);
}
}
私有静态无效TaxCreator(IOOrganizationService服务,Guid QPID)
{
使用(var crm=new XrmServiceContext(服务))
{
var QuoteProduct=crm.QuoteDetailSet.Where(c=>c.quotedetaild==QPID).First();
var SaleSetting=crm.new_salessettingSet.Where(c=>c.statecode==0.First();
double TaxPercent=(Convert.ToDouble(SaleSetting.new_TaxPercent)/100);
if(QuoteProduct.isPriceOverrided==false)
{
十进制税=(十进制)Convert.ToDecimal(Convert.ToDouble(QuoteProduct.BaseAmount-QuoteProduct.ManualDiscountAmount.GetValueOrDefault())*TaxPercent);
十进制价格单位=(十进制)(QuoteProduct.PricePerUnit.GetValueOrDefault()-QuoteProduct.VolumeDiscoveryCountAmount.GetValueOrDefault());
crm.UpdateObject(QuoteProduct);
SaveChanges();
QuoteProduct.Attributes[“tax”]=新货币(税);
QuoteProduct.Attributes[“新结果”]=新货币(PricePerUnit);
crm.UpdateObject(QuoteProduct);
SaveChanges();
}
}
}
私有静态无效TaxUpdater(IOOrganizationService服务,Guid QPID)
{
使用(var crm=new XrmServiceContext(服务))
{
var QuoteProduct=crm.QuoteDetailSet.Where(c=>c.quotedetaild==QPID).First();
var SaleSetting=crm.new_salessettingSet.Where(c=>c.statecode==0.First();
double TaxPercent=(Convert.ToDouble(SaleSetting.new_TaxPercent)/100);
if(QuoteProduct.isPriceOverrided==false)
{
十进制税=(十进制)Convert.ToDecimal(Convert.ToDouble(QuoteProduct.BaseAmount-QuoteProduct.ManualDiscountAmount.GetValueOrDefault())*TaxPercent);
十进制价格单位=(十进制)(QuoteProduct.PricePerUnit.GetValueOrDefault()-QuoteProduct.VolumeDiscoveryCountAmount.GetValueOrDefault());
crm.UpdateObject(QuoteProduct);
SaveChanges();
QuoteProduct.Attributes[“tax”]=新货币(税);
QuoteProduct.Attributes[“新结果”]=新货币(PricePerUnit);
crm.UpdateObject(QuoteProduct);
SaveChanges();
}
}
}
}
我还检查了服务器上的事件查看器中的错误,但没有结果! 我已经在创建和更新报价产品时注册了我的插件。 非常感谢您的帮助。

public void Execute(IServiceProvider服务提供商)
    public void Execute(IServiceProvider serviceProvider)
    {
        IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
        Entity entity;
        if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
        {
            entity = (Entity)context.InputParameters["Target"];
            if (entity.LogicalName != "quotedetail") { return; }
        }
        else
        {
            return;
        }

        try
        {
            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
            QuoteDetail QuoteProduct = ((Entity)context.InputParameters["Target"]).ToEntity<QuoteDetail>();
            if (context.MessageName == "Create" || context.MessageName == "Update")
                // && context.Depth < 3) //try to avoid depth unless you have to have it
            {
                TaxSetter(service, QuoteProduct);
            }
        }
        catch (FaultException<OrganizationServiceFault> ex)
        {
            throw new InvalidPluginExecutionException( "An error occurred in the plug-in.", ex);
        }
    }

    private static void TaxSetter(IOrganizationService service, QuoteDetail product)
    {
        using (var crm = new TrainingContext(service))
        {
            var QuoteProduct = product.ToEntity<QuoteDetail>();
            if (QuoteProduct.IsPriceOverridden == false)
            {
                double TaxPercent = Convert.ToDouble(50 / 100);
                decimal Tax = (decimal)Convert.ToDecimal(Convert.ToDouble(QuoteProduct.BaseAmount - QuoteProduct.ManualDiscountAmount.GetValueOrDefault()) * TaxPercent);
                decimal PricePerUnit = (decimal)(QuoteProduct.PricePerUnit.GetValueOrDefault() - QuoteProduct.VolumeDiscountAmount.GetValueOrDefault());

                QuoteProduct.Tax = Tax; //depending on how you the parameters passed into CrmSvcUtil
                QuoteProduct.Attributes["new_result"] = new Money(PricePerUnit); //same deal here

                //crm.UpdateObject(QuoteProduct);
                //crm.SaveChanges();
                //code not needed, the Plugin context will take care of this for you
            }
        }
    }
{ IPluginExecutionContext上下文=(IPluginExecutionContext)serviceProvider.GetService(类型为(IPluginExecutionContext)); 实体; if(context.InputParameters.Contains(“目标”)&&context.InputParameters[“目标”]是实体) { 实体=(实体)上下文.InputParameters[“目标”]; if(entity.LogicalName!=“quotedetail”){return;} } 其他的 { 返回; } 尝试 { IOOrganizationServiceFactory serviceFactory=(IOOrganizationServiceFactory)serviceProvider.GetService(类型为(IOOrganizationServiceFactory)); IOOrganizationService=serviceFactory.CreateOrganizationService(context.UserId); QuoteDetail QuoteProduct=((实体)context.InputParameters[“Target”]).ToEntity(); if(context.MessageName==“创建”| | context.MessageName==“更新”) //&&context.Depth
public class Plugin : IPlugin
{
  // Here we declare our tracer.
  private ITracingService _trace;

  public void Execute(IServiceProvider serviceProvider)
  {
    // Here we create it.
    _trace = (ITracingService)serviceProvider
      .GetService(typeof(ITracingService));
    _trace.Trace("Commencing.");

    // Here we crash our plugin just to make sure that we can see the logs 
    // with trace information. This statement should be gradually moved down
    // the code to discover where exactly the plugin brakes.
    throw new Exception("Intentional!");

    IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider
      .GetService(typeof(IPluginExecutionContext));
    Entity entity;
    ...

    try { ... }
    catch (FaultException<OrganizationServiceFault> ex)
    {
      throw new InvalidPluginExecutionException(
        "An error occurred in the plug-in.", ex);
    }

    // Here we catch all other kinds of bad things that can happen.
    catch(Exception exception) { throw exception; }
  }

  private static void TaxCreator(IOrganizationService service, Guid QPID)
  {
    // Here we add a line to the trace hoping that the execution gets here.
    _trace.Trace("Entered TaxCreator.");

    using (var crm = new XrmServiceContext(service))
    {
      var QuoteProduct = crm.QuoteDetailSet.Where(...).First();
      var SaleSetting = crm.new_salessettingSet.Where(...).First();
      double TaxPercent = (Convert.ToDouble(...) / 100);

      // Here we add a line to the trace to see if we get past this point.
      _trace.Trace("Approaching if statement.");

      if (QuoteProduct.IsPriceOverridden == false) { ... }
    }
  }

  private static void TaxUpdater(IOrganizationService service, Guid QPID)
  {
    // Here we add a line to the trace hoping that the execution gets here.
    _trace.Trace("Entered TaxUpdater.");

    ...
  }
}