【发布时间】:2019-03-05 09:14:26
【问题描述】:
在做了几年其他工作后,我又回到了 CRM 业务。我已经在质疑我的人生选择了。我不明白这里有什么问题。我正在尝试创建一个将在事件/案例创建时运行的简单插件。它将查看描述字段是否包含有效的 url,如果是,则应将找到的第一个 url 更新到另一个字段。这是插件的执行方法。
public void Execute(IServiceProvider serviceProvider)
{
ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
IPluginExecutionContext pluginExecutionContext = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
if (pluginExecutionContext.InputParameters.Contains("Target") && pluginExecutionContext.InputParameters["Target"] is Entity)
{
Entity targetEntity = (Entity)pluginExecutionContext.InputParameters["Target"];
if (targetEntity.LogicalName != Incident.EntityLogicalName)
{
return;
}
IOrganizationServiceFactory orgServiceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService orgService = orgServiceFactory.CreateOrganizationService(pluginExecutionContext.UserId);
try
{
string desc = (string)targetEntity.Attributes["description"];
string pattern = @"\b(?:https?://|www\.)[^ \f\n\r\t\v\]]+\b";
MatchCollection collection = Regex.Matches(desc, pattern);
if (collection.Count > 0)
{
throw new Exception(collection[0].Value);
}
}
catch (Exception ex)
{
tracingService.Trace("Error in CaseUrlPlugin {0}", ex.ToString());
throw ex;
}
}
}
问题是,当我创建一个新案例(用文本和 url 填充的描述字段)并点击保存时,我得到“字典中不存在给定键”异常,好像描述字段不存在一样。当我在该错误窗口中单击“确定”并再次单击“保存”时,会创建描述字段,并且我的代码会通过该链接引发异常。
那么为什么第一次没有出现描述字段呢?我不喜欢这个 post 操作的想法,因为这需要另一个 sql 事务权限(再次保存事件)?
【问题讨论】:
标签: dynamics-crm microsoft-dynamics dynamics-crm-365