检查 CRM 记录是否存在

Checking if CRM record exists

我有 CRM URL,我想使用这些 URL 检查 CRM 记录是否存在。据我所知,最简单和最快的方法是检查页面中的值 "Record is unavailable"。

WebRequest request = WebRequest.Create(crmLink);
request.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
bool websiteExists = (response != null && response.StatusCode == HttpStatusCode.OK);
string siteContents = "";
if (websiteExists)
{
    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
    {
        siteContents = reader.ReadToEnd();
    }
}

两个问题,几乎整个主体都是一个iframe,第二个问题是当我检查"siteContents"的值时,我没有看到一个iframe。我关于如何获取 CRM 记录的整个想法可能是错误的; CRM 不完全是我的专业领域。

如果您有 URL,您就有记录 ID。更好的方法是查询 CRM 网络服务并在数据库中搜索该记录 ID。

好的,这应该很容易。 您将 url 分成几部分以获得参数。 这里重要的是 etn=account 和 id=36345eb0-728c-e611-9421-00153d29152e, ent为实体逻辑名,id为记录id

一旦你有了你调用的那些,你就可以设置组织服务连接并尝试获取记录

它应该看起来像这样。

var entity = crmService.Retrieve("account", Guid.Parse("36345eb0-728c-e611-9421-00153d29152e"),new ColumnSet(true));

如果记录存在,这应该会为您提供记录。

在此处获取有关检索的更多详细信息:

https://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.iorganizationservice.retrieve.aspx

Retrieve 方法的问题在于,当没有找到给定标识符的记录时,它会抛出异常。如果您不确定记录是否存在,最好通过 RetrieveMultiple.

// do actual initialization - but that's another topic :)
IOrganizationService organizationService = null;

var query = new QueryExpression
{
  NoLock = true,
  TopCount = 1,
  EntityName = "account",
  // if you want to check just for existence of record use ColumnSet(false)
  // if you want to check entity columns use ColumnSet(true) 
  // or specify columns you want to fetch
  ColumnSet = new ColumnSet(false)
};

query.Criteria.AddCondition(
  "accountid", 
  ConditionOperator.Equal, 
  new Guid("36345eb0-728c-e611-9421-00153d29152e"));

var entities = organizationService.RetrieveMultiple(query);

// entities.Entities is guaranteed to be not null
if (entities.Entities.Count == 0)
{
  // snap - no such entity
  return;
}

var entity = entities.Entities[0];