Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > CRM > Microsoft Dynamics CRM
Microsoft Dynamics CRM Forum d'entraide Microsoft Dynamics CRM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2012, 18h45   #1
Membre du Club
 
Homme Bastien Morier
Spécialiste en Maintenance Applicative
Inscription : septembre 2008
Messages : 191
Détails du profil
Informations personnelles :
Nom : Homme Bastien Morier
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Spécialiste en Maintenance Applicative
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2008
Messages : 191
Points : 55
Points : 55
Par défaut CRM Online - Erreur sur retrieve

Bonjour,

Je fait un plug-in qui s’exécute à la modification d'un rendez-vous. Ce plug-in met a jour une date dans le compte lier au rendez vous.

Quand je fait mon retrieve pour récupérer le champ a modifier dans le compte, il m'affiche l'erreur suivante :

Citation:
PluginDateLastActivity.Plugin: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
Ors, le champ que j'appel est bien dans mon formulaire de compte, avec la bonne orthographe et j'ai bien publier toutes les personnalisations !

Quelqu'un peut-il m'aider a trouver mon erreur ?

Voici le code du plug.in :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Using...

namespace PluginDateLastActivity
{
    public class Plugin : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            // Récupération du contexte, de la factory et du service Crm (lignes obligatoires)
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

            #region Check plugin context

            // On vérifie si l'entité qui a déclancher le plugin est un rendez-vous
            if (context.PrimaryEntityName != "appointment")
                return;

            // L'action se passe à la mise à jour de l'item
            if (context.MessageName != "Update")
                return;

            // 20 = pre dans la transaction -> Avant enregistrement en BDD
            if (context.Stage != 20)
                return;
            #endregion

            // Récupération des données ayant été modifiées ou créées
            Entity pvData = (Entity)context.InputParameters["Target"];

            try
            {
		// On récupère le guid du compte concerné par le rendez-vous
		Guid accGuid = ((EntityReference)pvData.Attributes["ilem_compteconcerne"]).Id;

		// On récupere le compte du rendez-vous pour y modifier la date de dernier PV
		ColumnSet colsACC = new ColumnSet(
			new String[] { "ilem_datedernierpv"});
		Entity retrievedAC = service.Retrieve("account", accGuid, colsACC);

		// Mise à jour de la date de fermeture du dernier rendez-vous
		retrievedAC["ilem_datedernierpv"] =  System.DateTime.Today;
		service.Update(retrievedAC);
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}
Le plug-in est lancé en pré-opération synchrone.

Merci de votre aide.
BaStaub est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 13h47   #2
Membre du Club
 
Homme Bastien Morier
Spécialiste en Maintenance Applicative
Inscription : septembre 2008
Messages : 191
Détails du profil
Informations personnelles :
Nom : Homme Bastien Morier
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Spécialiste en Maintenance Applicative
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2008
Messages : 191
Points : 55
Points : 55
Le problème ne viens pas du retrieve du compte mais des du retrieve des champs de l'entité actuelle. Je ne peut pas récupérer des champs qui n'ont pas été modifiés avant l'enregistrement.

Il faut donc que je passe par une autre solution pour récupérer les champs que je souhaite.

J'ai pensé à faire une QueryExpression :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Entity pvData = (Entity)context.InputParameters["Target"];

Guid pvGuid = pvData.Id;            // Guid du PV en cours

QueryExpression ilem_fermeturePV = new QueryExpression
{
      ColumnSet = new ColumnSet(new String[] { "compteconcerne", "description" }),
      EntityName = "appointment",
      Criteria = new FilterExpression
      {
            FilterOperator = LogicalOperator.And,
            Conditions =
	    {
	        new ConditionExpression
		{
			AttributeName = "AppointmentId",
			Operator = ConditionOperator.Equal,
			Values =
			{
				pvGuid
			 }
		}
	     }
        }
};

EntityCollection retrievedPVCollection = service.RetrieveMultiple(ilem_fermeturePV);
Mais dans ma ConditionExpression, je veux faire appel au champ qui contient le guid de l'entité (appointment). Et visiblement son nom n'est pas "AppointmentId".

Qui sais comment s'appel le champ qui contient le guid de l'entité appointment ?
BaStaub est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2012, 20h56   #3
Invité régulier
 
Inscription : juin 2009
Messages : 7
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 7
Points : 7
Points : 7
Bonjour , d'abord le champs identifiant du rendez-vous c'est activityid,
secondo, c'est initule de faire un query sur l'oppointement pour récupérer le compte, tu peux utiliser l'image de l'entité , enregistre a l'aide de pluginregistration tool une image sur l'entité puis récupère le champs à partir de l'image.
Din1000 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/05/2012, 10h46   #4
Membre du Club
 
Homme Bastien Morier
Spécialiste en Maintenance Applicative
Inscription : septembre 2008
Messages : 191
Détails du profil
Informations personnelles :
Nom : Homme Bastien Morier
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Spécialiste en Maintenance Applicative
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2008
Messages : 191
Points : 55
Points : 55
Merci, c'était la bonne solution. J'ai créé une image dans le plugin registrations tools.
BaStaub est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h29.


 
 
 
 
Partenaires

Hébergement Web