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". Для контакта допустимыми типами сущностей должны быть "учетная запись" или "контакт".

Спасибо за ответы, мне не удалось сделать это правильно, используя веб-сервисы таким образом.

Я попытался использовать ранний доступ с успехом:

  1. Сгенерированные прокси-объекты с использованием https://xrmearlyboundgenerator.codeplex.com/
  2. Добавлена ​​строка [Assembly: Microsoft.Xrm.Sdk.Client.ProxyTypesAssemblyAttribute()] в assemblyInfo, чтобы Intellisense был доступен (даже для настраиваемых полей).
  3. Теперь мне удается создать контакт и назначить его организации (что-то вроде этого):

        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();
    }
    
Другие вопросы по тегам