Почему IOrganizationService.Update() возвращает "Указанный тип записи не существует в Microsoft Dynamics CRM."?

Вызов для обновления записи в пользовательской сущности с ранней привязкой, уже полученной записи, возвращает указанное выше сообщение. Далее следует фрагмент кода (с большим количеством инструментария, но я оставлю все как есть, поскольку я новичок в коде CRM и мог бы удалить что-то важное)

// retrieve and update ContactFact record -

string strcontactFactId = reader["contactFactId"] == DBNull.Value ? string.Empty : (string)reader["contactFactId"];
string strcontactId = reader["contactId"] == DBNull.Value ? string.Empty : (string)reader["contactId"];
whereAmI = "retrieved strcontactId = " + strcontactId;
string straccountId = reader["accountId"] == DBNull.Value ? string.Empty : (string)reader["accountId"];

Guid contactFactId;
Guid contactId;
Guid accountId;
Guid.TryParse(strcontactFactId, out contactFactId);
whereAmI = "try to generate contactId from " + strcontactId;
Guid.TryParse(strcontactId, out contactId);
whereAmI = "generated contactId = " + contactId.ToString();
Guid.TryParse(straccountId, out accountId);

int score = reader.GetInt32(3);

whereAmI = "try to retrieve contactFact " + contactFactId.ToString();
sbtls_contactfact contactFact = (sbtls_contactfact)service.Retrieve("sbtls_contactfact", contactFactId, columnSet);  // xx prob don't need to retrieve current values
whereAmI = "try to set sbtls_ContactId to " + contactId.ToString();
contactFact.sbtls_ContactId = contactId == Guid.Empty ? null : new EntityReference("Contact", contactId);
whereAmI = "successfully set sbtls_ContactId to " + contactId.ToString();
contactFact.sbtls_AccountId = accountId == Guid.Empty ? null : new EntityReference("Account", accountId);
contactFact.sbtls_Score = score;
contactFact.sbtls_Fact = "Updated with contactId " + strcontactId + " parsed to GUID " + contactId.ToString();
whereAmI = "about to update";
service.Update(contactFact);
whereAmI = "updated";

1 ответ

Решение

Вам нужно изменить эти две строки:

contactFact.sbtls_ContactId = contactId == Guid.Empty ? null : new EntityReference("Contact", contactId);

contactFact.sbtls_AccountId = accountId == Guid.Empty ? null : new EntityReference("Account", accountId);

Использовать строчные буквы для EntityReference.LogicalName значения, так что это читается как:

contactFact.sbtls_ContactId = contactId == Guid.Empty ? null : new EntityReference("contact", contactId);

contactFact.sbtls_AccountId = accountId == Guid.Empty ? null : new EntityReference("account", accountId);

Логическое имя чувствительно к регистру и должно быть в нижнем регистре.

Другие вопросы по тегам