代码之家  ›  专栏  ›  技术社区  ›  vikramjb

在MS CRM 4.0中创建动态实体

  •  1
  • vikramjb  · 技术社区  · 17 年前

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

    我看不出代码中有什么不同。在我在internet上找到的示例中,我的实现与在SDK中找到的实现相同。但是如果我运行相同的程序,我会得到以下错误

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

    我尝试创建一个PropertyCollection类型的新变量(属于mscrm命名空间的变量),并将StringProperty添加到该变量中,然后将其传递给实体。

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

    这给了我以下的错误

    我确信这是一个很小的打字错误,但我不知道错误在哪里。而且,即使这是一个打字错误,为什么它适用于互联网上提供的所有样本,而不适用于我。我尝试运行代码示例,但遇到了相同的转换错误。请让我知道,如果你需要更多的信息,在这方面的任何帮助将不胜感激。

    3 回复  |  直到 15 年前
        1
  •  3
  •   SaaS Developer    17 年前

    以下是Microsoft的一篇文章,试图讨论此主题:

    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;
    
        2
  •  1
  •   vikramjb    17 年前

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

    contactEntity.Properties.Add(sp_SSNNo);
    

    再次感谢您的回复:)

        3
  •  0
  •   SaaS Developer    17 年前

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

    推荐文章