无法更新 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。