2008-10-15 85 views
1

我正尝试使用动态实体创建新联系人。我在CRM SDK中找到的示例具有此代码。在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}; 

在我的代码中,我有以下实现。

 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}; 

我在代码中看不到很多差异。在我在互联网上找到的例子中,我有和SDK一样的实现。但是,如果我运行相同的我碰到下面的错误

CS0029:无法隐式转换类型“Microsoft.Crm.Sdk.StringProperty”到“Microsoft.Crm.Sdk.PropertyCollection”

我试着创建了一个类型为PropertyCollection的新变量(属于mscrm名称空间的一个变量),并将stringpropertys添加到该变量中并将其传递给实体。

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

这给了我下面的错误

CS0029:无法隐式转换类型 'Microsoft.Crm.Sdk.PropertyCollection' 到 'Microsoft.Crm.Sdk.Property'

我相信它有一个小的类型转换错误,但我无法找出错误的位置。而且,即使这是一个类型错误,为什么它在因特网上给出的所有样本都适用,而不适合我。我试图让代码示例运行,但我遇到了相同的转换错误。请让我知道,如果你需要更多的信息,对此,任何帮助将不胜感激。

回答

3

下面是来自微软的文章,让试图讨论这个话题:

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

这不是你的两个方法之间运行到,但更多的是差的在设计上的bug装配工作以及他们设计要做的事情。

如果你想继续使用Microsoft.Crm.Sdk.dll你应该能够使用以下来实现自己的目标......

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

我相信问题是您正在引用Microsoft.Crm.Sdk程序集中的动态实体类。 SDK中的示例使用对CRM Web服务的引用。这可能会令人困惑,因为两个程序集都包含许多相同的类型,但它们是不同的。

1

由于SaaS的开发,该代码现在工作正常。另外一种方法是直接将StringProperty添加到实体属性集合中。

contactEntity.Properties.Add(sp_SSNNo); 

再次感谢您的答复:)