在MS CRM 4.0中创建动态实体

时间:2008-10-15 12:16:57

标签: dynamics-crm dynamics-crm-4

我正在尝试使用动态实体创建新联系人。我在CRM SDK中找到的示例有此代码。

// 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 个答案:

答案 0 :(得分: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

这不是您遇到的错误,但两个程序集的工作方式和设计目的之间的设计差异更大。

如果您想继续使用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;

答案 1 :(得分:1)

感谢SaaS Developer,该代码现在运行良好。另一种方法是直接将StringProperty添加到实体属性集合中。

contactEntity.Properties.Add(sp_SSNNo);

再次感谢您的回复:)

答案 2 :(得分:0)

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