Создание динамических сущностей в MS CRM 4.0

Asked
Viewd10307

1

Я пытаюсь создать новый контакт с помощью Dynamic Entity. В образце, который я нашел в 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

Я уверен, что это небольшая ошибка приведения типов, но я не могу понять, в чем ошибка. Более того, даже если это была ошибка приведения типов, почему он работает для всех образцов, представленных в Интернете, а не для меня. Я попытался запустить образец кода, но обнаружил ту же ошибку преобразования. Пожалуйста, дайте мне знать, если вам понадобится дополнительная информация по этому поводу, мы будем благодарны за любую помощь.

3 ответов

3

Вот статья от 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

Это не ошибка, с которой вы столкнулись, а скорее разница в дизайне между тем, как работают две сборки, и тем, для чего они предназначены.

Если вы хотите и дальше использовать 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

Спасибо разработчику SaaS, теперь этот код работает нормально. Еще один способ сделать это - напрямую добавить StringProperty в коллекцию свойств сущности.

 contactEntity.Properties.Add(sp_SSNNo);
 

Еще раз спасибо за ответ :)

0

Я считаю, что проблема в том, что вы ссылаетесь на класс динамической сущности в сборке Microsoft.Crm.Sdk. Образец в SDK использует ссылку на веб-службу CRM. Это может сбивать с толку, поскольку обе сборки содержат много одинаковых типов, однако они разные.