Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法更新CRM中的潜在客户记录?_C#_Dynamics Crm 2011_Crm - Fatal编程技术网

C# 无法更新CRM中的潜在客户记录?

C# 无法更新CRM中的潜在客户记录?,c#,dynamics-crm-2011,crm,C#,Dynamics Crm 2011,Crm,我的代码似乎没有更新Lead实体。我已经创建了一个新的潜在客户();正如您在代码中看到的,保存记录时没有更新。我做错什么了吗?这种更新方式与通过执行crmContext.UpdateObject(oLead)进行更新一样充分;crmContext.SaveChanges();。有人能帮我解释一下为什么不更新线索吗?有一个类似的问题,只是指基本的插件,但不是创建我正在更新 private List<Product> GetSectionAProducts() {

我的代码似乎没有更新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);

                }
private List GetSectionAProducts()
{
列表产品=新列表();
var QEproduct=新的查询表达式(“产品”);
//将所有列添加到QEproduct.ColumnSet
QEproduct.ColumnSet.AllColumns=true;
//定义筛选产品。条件
QEproduct.Criteria.AddCondition(“productnumber”,ConditionOperator.BeginsWith,“MGIP”);
var QEproduct_Criteria_0=新过滤器表达式();
QEproduct.Criteria.AddFilter(QEproduct\u Criteria\u 0);
//定义筛选器QEU产品标准\U 0
QEODUCT_Criteria_0.AddCondition(“capg_billingtimeframe”,ConditionOperator.Equal,(int)capg_billingcycletype.Monthly);
QEproduct\u Criteria\u 0.AddCondition(“capg\u mincriteria”,ConditionOperator.NotNull);
QEODUCT_Criteria_0.AddCondition(“capg_maxcriteria”,ConditionOperator.NotNull);
QE产品标准0.AddCondition(“价格”,ConditionOperator.NotNull);
EntityCollection结果=this.OrganizationService.RetrieveMultiple(QEproduct);
如果(results.Entities!=null)
{
//从结果集中检索所有记录。
foreach(results.Entities中的实体产品)
{
products.Add(新产品{Id=Product.Id,capg_MinCriteria=(int?)Product.Attributes[“capg_MinCriteria”],capg_MaxCriteria=(int?)Product.Attributes[“capg_MaxCriteria”],Price=(Money)Product.Attributes[“Price”});
}
}
退货产品;
}                    
var duesproduct=sectionA.Where(o=>o.capg_MinCriteria.Value o.capg_MaxCriteria).FirstOrDefault();
if(duesproduct!=null)
{
Xrm.Lead oLead=新铅();
oLead.Id=this.InputTargetEntity.Id;
oLead.capg_CalculatedDuesBilling=新货币(duesproduct.Price==null?0:duesproduct.Price.Value);

如果(duesproduct.capg_MaxCriteria我强烈建议您使用IOrganizationService更新记录。直接更新,而不是上下文。上下文对于查询很方便,因为您可以使用LINQ,但是当您通过上下文更新实体时,这些实体可能会作为您选择的所有实体属性的更新发送到CRM,这可能会导致奇怪的错误。)因为可能会触发意外工作流的行为。它也会很快填充审核历史记录


最好是创建一个lead的新实例,并使用您只想更新的属性和Id填充它,然后调用service.update。

您能检查一下oLead.Id是否为您希望更新的lead分配了正确的guid吗?我已经找到了。因为我没有使用IPlugin和我自己的类自动更新和此.OrganizationService.Update(olead);只是减慢了我的插件速度,导致插件无法更新。此外,我第一次使用linq,但在使用contains的where子句时遇到了问题。这不是一个非常可行的选择,但谢谢你。不用担心,linq确实有一些限制,一旦你了解它们,但它很方便,因为它使用了更易于维护的强类型类。不幸的是LINQ无法完成所有工作,有时您必须使用QueryExpressions或FetchXml…除非您想构建自己的表达式树:)