Как добавить интерфейс в класс MS Proxy для MS-CRM 2013

Итак, у меня есть установка MS Dynamics CRM 2013, в которую я пытаюсь интегрировать некоторые элементы и хочу отправить некоторые данные. У меня есть интерфейс (IAccnt), который я хочу применить к прокси-классу, сгенерированному при добавлении ссылки на службу в ... XRMServices/2011/OrganizationData.svc/ (я добавил частичный класс)

Когда я первоначально добавил интерфейс (у него были только «Имя» и «Номер учетной записи»), все шло хорошо (т.е. можно было сохранять элементы) ... Я добавил в интерфейс новый элемент, который не имел прямого следствия ( «Электронная почта»), но это сопоставлялось (поэтому геттер и сеттер просто передавали данные в и из this.EMailAddress1)

С этим изменением я теперь получаю следующую ошибку при сохранении: Ошибка обработки потока запроса. Имя свойства «Электронная почта», указанное для типа «Microsoft.Crm.Sdk.Data.Services.Account», недопустимо.

Это неожиданно, поскольку я отправляю объект Microsoft.Crm.Sdk.Data.Services.Account, поэтому на нем не должно быть электронной почты? И независимо от того, я должен иметь возможность отправить больше информации, чем необходимо? Есть ли что-то, что мне нужно сделать, чтобы иметь возможность добавить интерфейс в прокси-класс и чтобы сохранение все еще работало?

Я пытался добавить [XmlIgnore] и [IgnoreDataMember] в реализацию общедоступного свойства электронной почты, но тот же результат... Что-то вроде этого (т.е. "игнорировать эти свойства, когда ".AddToAccountSet"/".SaveChanges()", вероятно, решит этот вопрос?

Код интерфейса

public interface IMyAccount
{
   string Name { get; set; }
   string Email { get; set; }
}

Частичный класс (частичный для прокси-класса, созданного из ссылки на службу)

namespace MyNamespace.CustomerRelationshipManagement.MicrosoftDynamics.CrmServiceReference
{
    public partial class Account : MyNamespace.Interfaces.IMyAccount
    {
        public string Email { get { return this.EMailAddress1; } set { this.EMailAddress1 = value; } }
    }
}

Откуда возникает ошибка (попытка добавить учетную запись)

var crmUri = new Uri("http://crminstallation/XRMServices/2011/OrganizationData.svc/");
var crmService = new CrmServiceReference.CrmInstallationContext(crmUri);
crmService.Credentials = System.Net.CredentialCache.DefaultCredentials;

var crmMyAccount = new CrmServiceReference.Account();
crmMyAccount.Name = "Test Account";
crmMyAccount.Email = "[email protected]";

crmService.AddToAccountSet(crmMyAccount);
crmService.SaveChanges();

Если электронная почта удалена из интерфейса и из частичного класса, то она работает (поскольку она сохраняет новую учетную запись в CRM).


person ChrisHDog    schedule 30.05.2014    source источник
comment
Можете ли вы добавить код?   -  person Nicknow    schedule 30.05.2014


Ответы (1)


Сущность «Учетная запись» не имеет поля «Электронная почта». Однако у него есть адрес электронной почты1, попробуйте с ним

person MaPi    schedule 09.06.2014
comment
правильно, у него нет поля электронной почты, но интерфейс, который я хочу использовать, есть, поэтому, когда я его реализую, я сопоставляю его с адресом электронной почты1... однако, когда я отправляю объект учетной записи, я получаю указанную выше ошибку (что неожиданно, поскольку я' d предположить, что он не будет читать/отправлять свойство электронной почты, а только базовый адрес электронной почты1) - person ChrisHDog; 09.06.2014
comment
если я отключу электронную почту (и интерфейс), это работает, но я не могу реализовать интерфейс без электронной почты (и я хочу реализовать интерфейс) - person ChrisHDog; 09.06.2014
comment
Да, но вы также добавляете в учетную запись поле электронной почты, которое не может присутствовать при сохранении. Это как иметь объект с 4 полями и пытаться сохранить его в таблице с 3. - person MaPi; 09.06.2014
comment
вы можете иметь объект с 4 полями и сохранить его в таблице с 3, если два поля - это просто разные имена для одних и тех же данных (таким образом, есть 3 точки данных с 4 аксессорами... или 3 частные переменные с 4 общедоступными свойства этих частных переменных) - person ChrisHDog; 10.06.2014
comment
Я думаю, что мы можем упустить момент здесь. CRM не позволяет сохранять сущности, поля которых не указаны для этой сущности. Если вы хотите продолжать использовать свое наследование, вам придется сделать так, чтобы класс вашей учетной записи расширял MyNamespace.CustomerRelationshipManagement.MicrosoftDynamics.CrmServiceReference.Account и наследовал от IMyAccount. Затем измените свойство Email в IMyAccount на EMailAddress1, и в вашем классе вам нужно будет пометить EMailAddress1 новым ключевым словом. - person MaPi; 10.06.2014