Создание динамических сущностей в MS CRM 4.0 - PullRequest
1 голос
/ 15 октября 2008

Я пытаюсь создать новый контакт, используя 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), добавил туда строку 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 ]

3 голосов
/ 15 октября 2008

Вот статья от 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 голос
/ 15 октября 2008

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

contactEntity.Properties.Add(sp_SSNNo);

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

0 голосов
/ 15 октября 2008

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

...