1

我正在尝试使用动态实体创建一个新联系人。我在 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 命名空间的变量)并将字符串属性添加到其中并将其传递给实体。

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”

我确信这是一个小的类型转换错误,但我无法弄清楚错误在哪里。而且,即使这是一个类型转换错误,为什么它适用于互联网上给出的所有样本而不是我。我尝试让代码示例运行,但我遇到了相同的转换错误。如果您需要有关此的更多信息,请告诉我,对此的任何帮助将不胜感激。

4

3 回答 3

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;
于 2008-10-15T14:42:40.510 回答
1

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

contactEntity.Properties.Add(sp_SSNNo);

再次感谢您的回复:)

于 2008-10-15T14:56:39.590 回答
0

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

于 2008-10-15T14:09:46.160 回答