【发布时间】:2019-01-01 23:34:25
【问题描述】:
我正在尝试为 crm 编写一个插件,但它总是有一个异常
给定的键不在字典中。
这个错误总是出现在下面一行
Entity entity = (Entity)context.InputParameters["Targets"];
我已经尝试在互联网上查找,但仍然无法理解为什么会引发此异常。我已经在我的插件上添加了登录密钥,
谁能解释这个异常以及如何解决这个问题?下面是我的代码:
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using System;
using System.Collections.Generic;
namespace TrainingConfiguration.Plugins
{
public class CreditValidation : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
Entity entity = (Entity)context.InputParameters["Targets"];
EntityReference configurationEntitiy = (EntityReference)(entity.Attributes["ita_configuration"]);
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
if (entity.LogicalName.Equals("ita_creditlimit"))
{
string configurationId = configurationEntitiy.Id.ToString();
string fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
<entity name='ita_creditlimit'>
<attribute name='ita_creditlimitid' />
<attribute name='ita_name' />
<attribute name='ita_creditrating' />
<attribute name='ita_configuration' />
<order attribute='ita_name' descending='false' />
<filter type='and'>
<condition attribute='ita_configuration' operator='eq' value=""{0}"" />
</filter>
</entity>
</fetch>";
fetchXml = string.Format(fetchXml, entity.Id);
var qe = new FetchExpression(fetchXml);
var result = service.RetrieveMultiple(qe);
var rating = (OptionSetValue)entity["ita_creditrating"];
int selectedrating = rating.Value;
string ratingvalue = entity.FormattedValues["ita_creditrating"].ToString();
if (result.Entities.Count < 0)
{
List<String> listCreditRating = new List<string>();
for (int i = 0; i < result.Entities.Count; i++)
{
string creditRating = (string)result.Entities[i].Attributes["ita_creditrating"];
listCreditRating.Add(creditRating);
}
bool alreadyExist = listCreditRating.Contains(ratingvalue);
if(alreadyExist == true)
{
throw new InvalidPluginExecutionException("Data Already Exist");
}
}
}
}
}
}
【问题讨论】:
-
您应该从
serviceProvider获取TraceService的实例,然后跟踪一些调试消息。这些将被写入插件跟踪日志,您可以更好地了解错误发生的位置
标签: c# dynamics-crm dynamics-crm-365