Dynamics crm MS Dynamics CE CRM 365-操作前插件-字典中不存在给定密钥

Dynamics crm MS Dynamics CE CRM 365-操作前插件-字典中不存在给定密钥,dynamics-crm,microsoft-dynamics,dynamics-crm-365,Dynamics Crm,Microsoft Dynamics,Dynamics Crm 365,在做了几年其他事情后,我又回到了CRM业务。我已经在质疑我的人生选择了。我不明白这里怎么了。我正在尝试创建一个简单的插件,它将在事件/案例创建时运行。它将查看描述字段是否包含有效的url,如果是,则应将找到的第一个url更新到另一个字段。下面是插件的执行方法 public void executeServiceProvider服务提供者 { ITracingService tracingService=ITracingService服务提供者。GetServiceTypeOfTracingSer

在做了几年其他事情后,我又回到了CRM业务。我已经在质疑我的人生选择了。我不明白这里怎么了。我正在尝试创建一个简单的插件,它将在事件/案例创建时运行。它将查看描述字段是否包含有效的url,如果是,则应将找到的第一个url更新到另一个字段。下面是插件的执行方法

public void executeServiceProvider服务提供者 { ITracingService tracingService=ITracingService服务提供者。GetServiceTypeOfTracingService; IPluginExecutionContext pluginExecutionContext=IPluginExecutionContextserviceProvider.GetServicetypeofIPluginExecutionContext; 如果pluginExecutionContext.InputParameters.ContainsTarget&&pluginExecutionContext.InputParameters[Target]是实体 { 实体targetEntity=EntityPlugineExecutionContext.InputParameters[Target]; 如果targetEntity.LogicalName!=事件.EntityLogicalName { 回来 } IOOrganizationServiceFactory OrganizationServiceFactory=IOOrganizationServiceFactoryServiceProvider.GetServiceTypeOfOrganizationServiceFactory; IOOrganizationService orgService=orgServiceFactory.CreateOrganizationServicepluginExecutionContext.UserId; 尝试 { string desc=stringtargetEntity.Attributes[说明]; 字符串模式=@\b?:https?://www\.[^\f\n\r\t\v\]+\b; MatchCollection collection=Regex.Matchesdesc,pattern; 如果collection.Count>0 { 抛出新的Exceptioncollection[0]。值; } } 捕获异常 { CaseUrlPlugin{0}中的tracingService.TraceError,例如ToString; 掷骰子; } } } 问题是,当我创建一个充满文本和url的新案例描述字段并点击save时,dictionary异常中不存在给定的键,就好像描述字段不存在一样。当我点击那个错误窗口的ok并再次点击save时,描述字段被建立,我的代码抛出一个链接异常


那么为什么第一次没有出现描述字段呢?我不喜欢执行此post操作的想法,因为这需要另一个sql事务权限才能再次保存事件?

Aah ffs。问题是,当我第一次尝试保存时,我使用了CTRL+S,而我的注意力仍然集中在描述字段上,因为这是我填充的最后一个字段。现在,如果关注该字段并点击CTRL+S,UI似乎不会注册要填充的字段。点击save图标会起作用,因为这样会将焦点从描述字段中移开。当然,在我的例子中,对错误窗口点击ok也会使字段不聚焦,因此第二次保存有效


好吧,至少我在这里发帖后就明白了。试图以这种方式解决问题的时间太长。

Ctrl+s和“保存”图标将相同的数据提交到数据库。因此,我不敢相信这个答案是正确的。另外,第二次保存记录不会触发操作前的创建插件,因为您提交的是更新而不是创建。我可以在我的云环境中轻松复制这一点。Ctrl+s和save图标仅在我未注册操作前插件的情况下提交相同的数据。若我这样做了,那个么ctrl+s似乎会从聚焦的字段中退出。我不知道为什么,也不能保证它发生在清洁的环境中。然而,我的环境几乎是新的,不应该有任何事情会导致这种情况。另外,在我的例子中,第二次点击save仍然是一个create,因为第一次由于异常而终止。无论如何,我会在不久的将来对此进行更多的调查。