La clé donnée n'était pas présent dans le dictionnaire Plugin CRM 2011 en ligne
Quelqu'un pourrait-il me dire ce que je fais de mal, j'ai essayé pendant plus d'une semaine maintenant.
Suivre le code.
Exception inattendue de plug-in (Exécuter):
Microsoft.Crm.Sdk.Les échantillons.ProjectTotalAmount:
Système.Les Collections.Génériques.KeyNotFoundException: La clé donnée n'était pas
présent dans le dictionnaire.
namespace Microsoft.Crm.Sdk.Samples
{
public class ProjectTotalAmount : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext) serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));
if (context.InputParameters.Contains("Target") &&
context.InputParameters["Target"] is Entity)
{
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
//create a service context
var ServiceContext = new OrganizationServiceContext(service);
//ITracingService tracingService = localContext.TracingService;
Entity entity = (Entity)context.InputParameters["Target"];
if (entity.LogicalName == "new_project")
{
Guid projectGUID = ((EntityReference)entity["new_project"]).Id;
Entity a = service.Retrieve("new_project", ((EntityReference)entity["new_project"]).Id, new ColumnSet(true));
decimal totalAmount = 0;
try
{
//fetchxml to get the sum total of estimatedvalue
string new_amount_sum = string.Format(@"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='new_projectitem'>
<attribute name='new_amount' alias='new_amount' aggregate='sum' />
<filter type='and'>
<condition attribute='new_projectid' operator='eq' value='{0}' uiname='' uitype='' />
</filter>
</entity>
</fetch>", a.Id);
EntityCollection new_amount_sum_result = service.RetrieveMultiple(new FetchExpression(new_amount_sum));
foreach (var c in new_amount_sum_result.Entities)
{
totalAmount = ((Money)((AliasedValue)c["new_amount_sum"]).Value).Value;
}
//updating the field on the account
Entity acc = new Entity("new_project");
acc.Id = a.Id;
acc.Attributes.Add("new_amount", new Money(totalAmount));
service.Update(acc);
}
catch (FaultException ex)
{
throw new InvalidPluginExecutionException("An error occurred in the plug-in.", ex);
}
}
}
}
}
}
Les paramètres du plugin:
Post-validation
Mode d'exécution synchrone
Le déploiement d'un serveur
Vous devez vous connecter pour publier un commentaire.
Quelques conseils pour vous aider avant de commencer à regarder votre code...
Vous ai commenté votre
tracingService
variable, mais cela peut vous aider à moins de voir dans quelle mesure votre code a venir. De le rétablir et d'ajouter quelques lignes comme celle-ci pour le suivi de vos progrès avant la défaillance. Ces informations seront écrites dans le journal des erreurs qui vous est proposé pour le côté client à l'Exception de dialogue.:et
La ligne suivante semble tout à fait superflu, puisque vous êtes seulement en utilisant l'attribut
Id
dea
et cela existe déjà en tant queentity.Id
:Entity a = service.Retrieve("new_project", ((EntityReference)entity["new_project"]).Id, new ColumnSet(true));