2008-10-15 6 views
1

Je tente de créer un nouveau contact à l'aide de l'entité dynamique. L'exemple que j'ai trouvé dans CRM SDK avait ce code.Création d'entités dynamiques dans MS CRM 4.0

// Set the properties of the contact using property objects. 
     StringProperty firstname = new StringProperty(); 
     firstname.Name = "firstname"; 
     firstname.Value = "Jesper"; 
     StringProperty lastname = new StringProperty(); 
     lastname.Name = "lastname"; 
     lastname.Value = "Aaberg"; 

     // Create the DynamicEntity object. 
     DynamicEntity contactEntity = new DynamicEntity(); 

     // Set the name of the entity type. 
     contactEntity.Name = EntityName.contact.ToString(); 

     // Set the properties of the contact. 
     contactEntity.Properties = new Property[] {firstname, lastname}; 

Dans mon code j'ai l'implémentation suivante.

 StringProperty sp_Field1 = new StringProperty("Field1","Value1"); 
     StringProperty sp_Field2 = new StringProperty("Field2","Value1"); 

     CrmService service = new CrmService(); 
     service.Credentials = System.Net.CredentialCache.DefaultCredentials; 
     // Create the DynamicEntity object. 
     DynamicEntity contactEntity = new DynamicEntity(); 
     // Set the name of the entity type. 
     contactEntity.Name = EntityName.contact.ToString(); 
     // Set the properties of the contact. 
     contactEntity.Properties = new Property[] {sp_Field1,sp_Field2}; 

Je ne vois pas beaucoup de différences dans le code. Dans les exemples que j'ai trouvés sur internet, j'ai la même implémentation que celle trouvée dans SDK. Mais si je lance le même que je reçois l'erreur suivante

CS0029: ne peut pas convertir implicitement le type « Microsoft.Crm.Sdk.StringProperty » à « Microsoft.Crm.Sdk.PropertyCollection »

J'ai essayé a créé une nouvelle variable de type PropertyCollection (une qui appartient à l'espace de noms mscrm) et a ajouté le stringpropertys dans celui-ci et l'a passé à l'entité.

Microsoft.Crm.Sdk.PropertyCollection propTest = new Microsoft.Crm.Sdk.PropertyCollection(); 
     propTest.Add(sp_SSNNo); 
     propTest.Add(sp_FirstName); 
     contactEntity.Properties = new Property[] {propTest}; 

Cela m'a donné l'erreur suivante

CS0029: ne peut pas convertir implicitement le type 'Microsoft.Crm.Sdk.PropertyCollection' à 'Microsoft.Crm.Sdk.Property'

Je suis sûr que c'est une erreur mineure de typecasting mais je ne suis pas capable de comprendre où l'erreur est. Et de plus, même s'il s'agissait d'une erreur de typographie, pourquoi cela fonctionne-t-il pour tous les échantillons donnés sur Internet et non pour moi? J'ai essayé d'obtenir l'exemple de code à exécuter mais je rencontre la même erreur de conversion. S'il vous plaît laissez-moi savoir si vous avez besoin de plus d'informations à ce sujet, toute aide à ce sujet serait appréciée.

Répondre

3

Voici un article de Microsoft qui fait une tentative de discuter de ce sujet:

http://community.dynamics.com/blogs/cscrmblog/archive/2008/06/23/web-services-amp-dlls-or-what-s-up-with-all-the-duplicate-classes.aspx

Ce n'est pas un bug que vous exécutez dans mais plus d'une différence de conception entre la façon dont les deux Les assemblages fonctionnent et ce pour quoi ils sont conçus.

Si vous voulez continuer à utiliser le Microsoft.Crm.Sdk.dll vous devriez être en mesure d'atteindre votre objectif avec ce qui suit ...

StringProperty sp_Field1 = new StringProperty("Field1","Value1"); 
    StringProperty sp_Field2 = new StringProperty("Field2","Value1"); 

    CrmService service = new CrmService(); 
    service.Credentials = System.Net.CredentialCache.DefaultCredentials; 
    // Create the DynamicEntity object. 
    DynamicEntity contactEntity = new DynamicEntity(); 
    // Set the name of the entity type. 
    contactEntity.Name = EntityName.contact.ToString(); 

    // Set the properties of the contact. 
    PropertyCollection properties = new PropertyCollection(); 
    properties.Add(sp_Field1); 
    contactEntity.Properties = properties; 
0

Je crois que le problème est que vous référencez la classe d'entité dynamique dans l'assembly Microsoft.Crm.Sdk. L'exemple dans le SDK utilise une référence au service Web CRM. Cela peut être déroutant car les deux assemblages contiennent plusieurs des mêmes types, mais ils sont différents.

1

Merci SaaS développeur, ce code fonctionne bien maintenant . Une autre façon de le faire serait d'ajouter directement StringProperty à la collection de propriétés de l'entité.

contactEntity.Properties.Add(sp_SSNNo); 

Merci encore pour répondre :)

Questions connexes