Почему 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);
Логическое имя чувствительно к регистру и должно быть в нижнем регистре.