MS CRM 2013 Атрибут parentcustomeridtype не должен иметь значение NULL, если атрибут parentcustomerid не равен NULL.
Уважаемые умные разработчики,
Я сталкиваюсь с проблемой, когда хочу создать контакт, принадлежащий организации, в Microsoft Dynamics CRM 2013 через веб-службы
client = new OrganizationServiceClient("CustomBinding_IOrganizationService");
var newContactProperties = new Dictionary<string, object> {
{ "lastname", "TestContact"},
{ "firstname", "A"},
{ "fullname", "A TestContact"}
};
/* organizationType is a CRM.CRMWebServices.OptionSetValue
* with ExtensionData null, PropertyChanged null and a valid Value
*
* orgReference is a CRM.CRMWebServices.EntityReference
* with a valid Id
*/
newContactProperties.Add("parentcustomeridtype", organizationType);
newContactProperties.Add("parentcustomerid", orgReference);
var entity = new Entity();
entity.LogicalName = "contact";
entity.Attributes = new AttributeCollection();
entity.Attributes.AddRange(newContactProperties);
client.Create(entity);
Это дает мне ошибку "Атрибут parentcustomeridtype не должен быть NULL, если атрибут parentcustomerid не равен NULL"
Я озадачен, почему это происходит и как я могу решить эту проблему. Пожалуйста, помогите мне, если можете.
Спасибо, AllWorkNoPlay
2 ответа
Вам не нужно отдельно устанавливать атрибут parentcustomeridtype. Это системное поле, устанавливается платформой и в parentcustomerid существует по устаревшей причине, когда в предыдущих версиях Dynamics CRM это был тип Customer. Вам нужно указать только EntityReference в поле поиска.newContactProperties.Add("parentcustomerid", new EntityReference("account", new Guid("{accountid guid}")));
Также не ясно, какой тип вы используете в поле "orgReference". Для контакта допустимыми типами сущностей должны быть "учетная запись" или "контакт".
Спасибо за ответы, мне не удалось сделать это правильно, используя веб-сервисы таким образом.
Я попытался использовать ранний доступ с успехом:
- Сгенерированные прокси-объекты с использованием https://xrmearlyboundgenerator.codeplex.com/
- Добавлена строка [Assembly: Microsoft.Xrm.Sdk.Client.ProxyTypesAssemblyAttribute()] в assemblyInfo, чтобы Intellisense был доступен (даже для настраиваемых полей).
Теперь мне удается создать контакт и назначить его организации (что-то вроде этого):
var contact = new Contact() { FirstName = "Bob", LastName = "Dobalina", Address1_Line1 = "123 Strasse", Address1_City = "Berlin", Address1_PostalCode = "32254", Telephone1 = "425-555-5678", EMailAddress1 = "bob.dobalina@germany.de" }; var account = new Account() { Name = "Siemens Germany", }; context.AddObject(contact); context.AddObject(account); context.AddLink(account, "contact_customer_accounts", contact); context.SaveChanges(); }