我有要求每30分钟创建一次调度程序。此调度程序包含一个程序,该程序将获取今天创建的记录(包括GUID),然后使用Web服务插入Dynamics CRM。要从SQL Server数据库中获取记录,请使用以下查询:
SELECT * FROM new_crmtable WHERE DATEDIFF(day, CreatedOn, GetDate()) = 0
因为这个shceduler,每30分钟运行一次。每次执行此程序时,都需要创建今天创建的新记录和旧记录。 例如,今天12.25 PM创建了一个名为A的记录。这个程序第一次执行是在下午12:30。然后在下午12点45分。创建了一个名为B的新记录。当程序在下午13点再次执行时。该程序同时记录A和B.在Dynamics CRM中创建记录期间,它将给出错误消息。因为记录A已经创建。错误说您无法创建具有重复GUID的记录(请记住,我还从SQL Server数据库中获取GUID,并使用其GUID插入Dynamics CRM)
为避免错误,我需要检查是否已在CRM上创建记录。要从Dynamics CRM获取GUID,我使用QueryExpression。这是我的代码:
try
{
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
try
{
Entity rs = new Entity("new_troubleticket");
OptionSetValue option = new OptionSetValue(100000001);
rs.Attributes.Add("new_systemsource", option);
Guid ticketid = new Guid(dt.Rows[i][0].ToString());
rs.Id = ticketid;
//FIRSTNAME
if (!string.IsNullOrEmpty(dt.Rows[i][1].ToString()))
{
rs["new_subject"] = dt.Rows[i][1].ToString();
}
else
{
rs["new_subject"] = null;
}
Queryexpression query = new QueryExpression { Entityname = "new_customentity",
Columnset = new Columnset("new_customentityid")};
query.Criteria.AddCondition("CreatedOn", ConditionalOperator.Equal, Datetime.Now);
Entity Collection result = service.RetrieveMultiple(query)
你能告诉我如何将来自SQL Server数据库的GUID与来自Queryexpression的GUID进行匹配吗?
答案 0 :(得分:0)
只需添加条件即可按ID进行过滤:
var g = Guid.NewGuid() //Replace this with your actual Id from the query
Queryexpression query = new QueryExpression { Entityname = "new_customentity",
Columnset = new Columnset("new_customentityid")};
query.Criteria.AddCondition("new_customentityid", ConditionalOperator.Equal, g);
Entity Collection result = service.RetrieveMultiple(query)