Метод CrmService.Update не работает для определенного атрибута - PullRequest
1 голос
/ 16 октября 2011

Это моя проблема: все, что я хочу сделать, это обновить сущность «контакт» в Crm 4 с помощью веб-службы.

Это мой код:

CrmService eatupCrmService = CrmInteraction.InitializeCrmService();
contact updatedDelegate = new contact();
CeatupCrmService.Key contactPrimaryKey = new CeatupCrmService.Key();
contactPrimaryKey.Value = delegateId;
updatedDelegate.contactid = contactPrimaryKey;
updatedDelegate.address2_postalcode = delegateDetails.ContactDetailsPhysicalAddressCode;
eatupCrmService.Update(updatedDelegate);

Я использую InitializeCrmService(), чтобы также получить, и это работает. При обновлении атрибута address2_postalcode я получаю следующую ошибку:

«Серверу не удалось обработать запрос.»

с исключением Detail \ InnerText:

"0x80040216 Произошла непредвиденная ошибка. Платформа".

Если я изменю код для обновления другого атрибута, скажем, я пытаюсь обновить атрибут mobilephone вместо address2_postalcode он работает без каких-либо исключений.

Как только я пытаюсь обновить address2_postalcode, я получаю эту ошибку. Тип данных address2_postalcode в Crm: nvarchar, а назначаемое ему значение (delegateDetails.ContactDetailsPhysicalAddressCode) относится к типу c # string.

Кто-нибудь знает, почему это может происходить?

Ответы [ 3 ]

2 голосов
/ 05 ноября 2012

Та же самая ошибка и ситуация произошли со мной, потому что я сделал точки SSIS для загрузки контактов в CRM из плоского файла без поддержки, и я забыл заполнить таблицу CustomerAddressBase. После заполнения этой таблицы «правильно» (две строки для каждого контакта) атрибуты View CustomerAddress (address1_addressid и address2_addressid) стали ненулевыми. Если вы не знаете, как заполнить эту таблицу (CustomerAddressBase), просто создайте один новый контакт непосредственно с полями адресов, заполненными в CRM, а затем перейдите в среду управления SQL Server, и по запросу вы сможете увидеть и узнать, как заполняются поля.

Надеюсь, это кому-нибудь поможет,

Alex

1 голос
/ 23 октября 2011

После многих попыток понять причину возникновения этой ошибки я, наконец, преуспел.

Когда я начал работать над этим проектом, клиент поручил мне протестировать, используя только определенный контакт, потому что мы работалинепосредственно на производственной среде.(у клиента еще нет среды разработки)

После выполнения некоторых запросов к базе данных для сравнения этого контакта с другими (обновления не удавались только для тестового контакта), я заметил, что атрибут address2_addressid моего контакта имеет значение NULL.

Затем я перешел в CRM под Настройка \ Настройка Сущности и открыл контактную сущность.В разделе атрибуты я упорядочил по типу и увидел, что контакт имеет 3 primarykey атрибутов: contactid, address1_addressid и address2_addressid.

Поля address1_addressid и address2_addressid тестового контакта имеют значение NULL.и это заставило веб-службу CRM выдать 0x80040216 Произошла непредвиденная ошибка.Платформа ошибка при попытке обновить любое из полей адреса.

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

0 голосов
/ 17 октября 2011

Я не знаю, как это может работать ... Я думаю, что вы должны сделать CrmService.Create (contact), а затем с возвращенным Guid вы можете выполнять обновления ...

Обновление не происходитработать, поскольку запись с идентификатором, который вы устанавливаете для своей контактной сущности, не существует в db ...

contact updatedDelegate = new contact(); 

CeatupCrmService.Key contactPrimaryKey = new CeatupCrmService.Key ();

Вы могли бы сделать что-то вроде:

crmService eatupCrmService = CrmInteraction.InitializeCrmService();
        contact updatedDelegate = new contact();
        updatedDelegate.address2_postalcode = delegateDetails.ContactDetailsPhysicalAddressCode;
        Guid cId = eatupCrmService.Create(updatedDelegate);
        updatedDelegate.contactid = new Key(cId);
        //set more fields if you want
        eatupCrmService.Update(updatedDelegate);//update record

Жаль, что я не помог вам.

...