无法更新 CRM 中的潜在客户记录?
Cannot update lead record in CRM?
我的代码似乎没有更新 Lead 实体。我创建了一个新的 Lead();正如您在代码中看到的那样,当我保存记录时没有更新。我做错了什么吗?这种更新方式与通过 crmContext.UpdateObject(oLead) 进行更新一样有效; crmContext.SaveChanges();.有人可以帮我解决为什么这不更新潜在客户吗?有一个类似的问题只涉及基本插件,但我正在更新而不是创建。
private List<Product> GetSectionAProducts()
{
List<Product> products = new List<Product>();
var QEproduct = new QueryExpression("product");
// Add all columns to QEproduct.ColumnSet
QEproduct.ColumnSet.AllColumns = true;
// Define filter QEproduct.Criteria
QEproduct.Criteria.AddCondition("productnumber", ConditionOperator.BeginsWith, "MGIP");
var QEproduct_Criteria_0 = new FilterExpression();
QEproduct.Criteria.AddFilter(QEproduct_Criteria_0);
// Define filter QEproduct_Criteria_0
QEproduct_Criteria_0.AddCondition("capg_billingtimeframe", ConditionOperator.Equal, (int)capg_billingcycletype.Monthly);
QEproduct_Criteria_0.AddCondition("capg_mincriteria", ConditionOperator.NotNull);
QEproduct_Criteria_0.AddCondition("capg_maxcriteria", ConditionOperator.NotNull);
QEproduct_Criteria_0.AddCondition("price", ConditionOperator.NotNull);
EntityCollection results = this.OrganizationService.RetrieveMultiple(QEproduct);
if (results.Entities != null)
{
// Retrieve all records from the result set.
foreach (Entity product in results.Entities)
{
products.Add(new Product { Id = product.Id, capg_MinCriteria = (int?)product.Attributes["capg_mincriteria"], capg_MaxCriteria = (int?)product.Attributes["capg_maxcriteria"], Price = (Money)product.Attributes["price"] });
}
}
return products;
}
var duesproduct = sectionA.Where(o => o.capg_MinCriteria.Value <= dues).ToList().OrderByDescending(o => o.capg_MaxCriteria).FirstOrDefault();
if (duesproduct != null)
{
Xrm.Lead oLead = new Lead();
oLead.Id = this.InputTargetEntity.Id;
oLead.capg_CalculatedDuesBilling = new Money(duesproduct.Price == null ? 0 : duesproduct.Price.Value);
if (duesproduct.capg_MaxCriteria <= 100000)
{
oLead.capg_CalculatedDuesBilling = new Money(Math.Round((duesproduct.Price == null ? 0 : duesproduct.Price.Value) * new decimal(0.0290), 2));
}
if (duesproduct.capg_MaxCriteria <= 235000)
{
oLead.capg_CalculatedDuesBilling = new Money(Math.Round((duesproduct.Price == null ? 0 : duesproduct.Price.Value) * new decimal(0.0262), 2));
}
this.OrganizationService.Update(oLead);
}
我强烈建议您直接使用 IOrganizationService.Update 更新记录,而不是上下文。上下文对于查询很方便,因为您可以使用 LINQ,但是当您通过上下文更新实体时,这些实体可能会作为包含您选择的所有实体属性的更新发送到 CRM,这可能会导致奇怪的行为,因为可能会触发意外的工作流。它还可以非常快速地填充审核历史记录。
最好创建一个新的潜在客户实例,并仅使用您要更新的属性和 ID 填充它,然后调用 service.Update。
我的代码似乎没有更新 Lead 实体。我创建了一个新的 Lead();正如您在代码中看到的那样,当我保存记录时没有更新。我做错了什么吗?这种更新方式与通过 crmContext.UpdateObject(oLead) 进行更新一样有效; crmContext.SaveChanges();.有人可以帮我解决为什么这不更新潜在客户吗?有一个类似的问题只涉及基本插件,但我正在更新而不是创建。
private List<Product> GetSectionAProducts()
{
List<Product> products = new List<Product>();
var QEproduct = new QueryExpression("product");
// Add all columns to QEproduct.ColumnSet
QEproduct.ColumnSet.AllColumns = true;
// Define filter QEproduct.Criteria
QEproduct.Criteria.AddCondition("productnumber", ConditionOperator.BeginsWith, "MGIP");
var QEproduct_Criteria_0 = new FilterExpression();
QEproduct.Criteria.AddFilter(QEproduct_Criteria_0);
// Define filter QEproduct_Criteria_0
QEproduct_Criteria_0.AddCondition("capg_billingtimeframe", ConditionOperator.Equal, (int)capg_billingcycletype.Monthly);
QEproduct_Criteria_0.AddCondition("capg_mincriteria", ConditionOperator.NotNull);
QEproduct_Criteria_0.AddCondition("capg_maxcriteria", ConditionOperator.NotNull);
QEproduct_Criteria_0.AddCondition("price", ConditionOperator.NotNull);
EntityCollection results = this.OrganizationService.RetrieveMultiple(QEproduct);
if (results.Entities != null)
{
// Retrieve all records from the result set.
foreach (Entity product in results.Entities)
{
products.Add(new Product { Id = product.Id, capg_MinCriteria = (int?)product.Attributes["capg_mincriteria"], capg_MaxCriteria = (int?)product.Attributes["capg_maxcriteria"], Price = (Money)product.Attributes["price"] });
}
}
return products;
}
var duesproduct = sectionA.Where(o => o.capg_MinCriteria.Value <= dues).ToList().OrderByDescending(o => o.capg_MaxCriteria).FirstOrDefault();
if (duesproduct != null)
{
Xrm.Lead oLead = new Lead();
oLead.Id = this.InputTargetEntity.Id;
oLead.capg_CalculatedDuesBilling = new Money(duesproduct.Price == null ? 0 : duesproduct.Price.Value);
if (duesproduct.capg_MaxCriteria <= 100000)
{
oLead.capg_CalculatedDuesBilling = new Money(Math.Round((duesproduct.Price == null ? 0 : duesproduct.Price.Value) * new decimal(0.0290), 2));
}
if (duesproduct.capg_MaxCriteria <= 235000)
{
oLead.capg_CalculatedDuesBilling = new Money(Math.Round((duesproduct.Price == null ? 0 : duesproduct.Price.Value) * new decimal(0.0262), 2));
}
this.OrganizationService.Update(oLead);
}
我强烈建议您直接使用 IOrganizationService.Update 更新记录,而不是上下文。上下文对于查询很方便,因为您可以使用 LINQ,但是当您通过上下文更新实体时,这些实体可能会作为包含您选择的所有实体属性的更新发送到 CRM,这可能会导致奇怪的行为,因为可能会触发意外的工作流。它还可以非常快速地填充审核历史记录。
最好创建一个新的潜在客户实例,并仅使用您要更新的属性和 ID 填充它,然后调用 service.Update。