Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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 Dynamics 2013/2015中的插件使用相关实体更新CRM中的实体_C#_Plugins_Dynamics Crm 2015 - Fatal编程技术网

C# 如何使用CRM Dynamics 2013/2015中的插件使用相关实体更新CRM中的实体

C# 如何使用CRM Dynamics 2013/2015中的插件使用相关实体更新CRM中的实体,c#,plugins,dynamics-crm-2015,C#,Plugins,Dynamics Crm 2015,我是CRM新手,我正在努力使用插件更新实体,我在创建消息的PhoneCall实体预操作中注册了一个插件,然后我查询相关实体并将相关实体的数据写入我的PhoneCall实体,尽管我似乎得到了一个错误,即GUID为xxxxx的记录不存在 下面是我的代码 public void Execute(IServiceProvider serviceProvider) { ITracingService tracingService = (ITracingService)servi

我是
CRM
新手,我正在努力使用插件更新实体,我在创建消息的
PhoneCall
实体预操作中注册了一个插件,然后我查询相关实体并将相关实体的数据写入我的
PhoneCall
实体,尽管我似乎得到了一个错误,即GUID为
xxxxx的记录不存在

下面是我的代码

  public void Execute(IServiceProvider serviceProvider)
    {
        ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
        IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

        if (context == null)
        {
            throw new ArgumentNullException("localContext");
        }

        IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));

        IOrganizationService service = serviceFactory.CreateOrganizationService(context.InitiatingUserId);

        if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
        {
            Entity phoneCallEntity = (Entity)context.InputParameters["Target"];

            if (phoneCallEntity.LogicalName != "phonecall")
                return;


            if (context.MessageName == "Create")
            {
                try
                {
                    QueryExpression qe = new QueryExpression("new_zoiperhistorydata");
                    qe.ColumnSet = new ColumnSet("new_regardingobjectid", "new_callduration");

                    var ZoiperData = service.RetrieveMultiple(qe);

                    if (ZoiperData != null && ZoiperData.Entities.Count > 0)
                    {

                        foreach (Entity entity in ZoiperData.Entities)
                        {
                            if (entity.Attributes.Contains("new_callduration"))
                                phoneCallEntity.Attributes["new_callduration"] = entity.Attributes["new_callduration"].ToString();
                        }
                    }

                    service.Update(phoneCallEntity);
                }
                catch (System.Exception ex)
                {
                    Console.WriteLine("The application terminated with an error.");
                    Console.WriteLine(ex.Message);

                    // Display the details of the inner exception.
                    if (ex.InnerException != null)
                    {
                        Console.WriteLine(ex.InnerException.Message);

                        FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> fe = ex.InnerException
                            as FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>;
                        if (fe != null)
                        {
                            Console.WriteLine("Timestamp: {0}", fe.Detail.Timestamp);
                            Console.WriteLine("Code: {0}", fe.Detail.ErrorCode);
                            Console.WriteLine("Message: {0}", fe.Detail.Message);
                            Console.WriteLine("Trace: {0}", fe.Detail.TraceText);
                            Console.WriteLine("Inner Fault: {0}",
                                null == fe.Detail.InnerFault ? "No Inner Fault" : "Has Inner Fault");
                        }
                    }
                }


            }
public void Execute(IServiceProvider服务提供者)
{
ITracingService tracingService=(ITracingService)serviceProvider.GetService(类型(ITracingService));
IPluginExecutionContext上下文=(IPluginExecutionContext)serviceProvider.GetService(类型为(IPluginExecutionContext));
if(上下文==null)
{
抛出新ArgumentNullException(“localContext”);
}
IOOrganizationServiceFactory serviceFactory=(IOOrganizationServiceFactory)serviceProvider.GetService(类型为(IOOrganizationServiceFactory));
IOOrganizationService=serviceFactory.CreateOrganizationService(context.InitiatingUserId);
if(context.InputParameters.Contains(“目标”)&&context.InputParameters[“目标”]是实体)
{
实体phoneCallEntity=(实体)上下文。输入参数[“目标”];
if(phoneCallEntity.LogicalName!=“phonecall”)
返回;
if(context.MessageName==“创建”)
{
尝试
{
QueryExpression qe=新的QueryExpression(“新数据”);
qe.ColumnSet=newcolumnset(“new_regardingobjectid”、“new_callduration”);
var ZoiperData=service.RetrieveMultiple(qe);
if(ZoiperData!=null&&ZoiperData.Entities.Count>0)
{
foreach(ZoiperData.Entities中的实体)
{
if(entity.Attributes.Contains(“new_callduration”))
phoneCallEntity.Attributes[“new_callduration”]=entity.Attributes[“new_callduration”].ToString();
}
}
服务更新(电话呼叫实体);
}
catch(System.Exception-ex)
{
WriteLine(“应用程序因错误而终止”);
控制台写入线(例如消息);
//显示内部异常的详细信息。
if(例如InnerException!=null)
{
Console.WriteLine(例如InnerException.Message);
FaultException fe=ex.InnerException
作为例外;
如果(fe!=null)
{
WriteLine(“Timestamp:{0}”,fe.Detail.Timestamp);
WriteLine(“代码:{0}”,fe.Detail.ErrorCode);
WriteLine(“Message:{0}”,fe.Detail.Message);
WriteLine(“Trace:{0}”,fe.Detail.TraceText);
WriteLine(“内部错误:{0}”,
null==fe.Detail.InnerFault?“无内部故障”:“有内部故障”);
}
}
}
}
代码在
服务上失败。更新(phoneCallEntity)


您的帮助将不胜感激。

问题在于您在创建事件的操作前阶段运行插件。实际上,此阶段中未创建电话呼叫(并且没有Id),您会收到报告的错误消息。 实际上,您不必使用service.update方法自己更新电话呼叫。由于操作贯穿始终,您只需更新目标上您喜欢的字段,然后让CRM完成其余的:)