检查 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];
我有 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];