Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.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#检索特定Opportunity的所有Opportunity产品?_C#_Dynamics Crm_Dynamics Crm Online - Fatal编程技术网

如何通过c#检索特定Opportunity的所有Opportunity产品?

如何通过c#检索特定Opportunity的所有Opportunity产品?,c#,dynamics-crm,dynamics-crm-online,C#,Dynamics Crm,Dynamics Crm Online,我有机会,如下图所示: 昨天,我发布了一个关于如何创建Opportunity产品(汽车产品)的问题&Dave向我提供了一个关于如何实现这一点的问题 现在,我的要求已经扩展到删除这些现有的电机产品和添加新产品 我想先从这次机会中检索所有相关的电机产品,这样做 为了创建Opportunity Product,我使用了以下代码: var opportunityProduct = new Entity(entityMotorName); opportunityProduct["tmeic_opport

我有机会,如下图所示:

昨天,我发布了一个关于如何创建Opportunity产品(汽车产品)的问题&Dave向我提供了一个关于如何实现这一点的问题

现在,我的要求已经扩展到删除这些现有的电机产品和添加新产品

我想先从这次机会中检索所有相关的电机产品,这样做

为了创建Opportunity Product,我使用了以下代码:

var opportunityProduct = new Entity(entityMotorName);
opportunityProduct["tmeic_opportunitymotorproductid"] = new EntityReference("opportunity", Guid("opportunityid"));
var opportunityProductId = crmService.Create(opportunityProduct);
但是,我被困在这里是为了检索这些汽车产品。一旦我得到与此机会相关的电机产品,我可以使用以下查询

crmService.Delete(entityName,Guid);
注意:我的opportunity有opportunityid但没有tmeic\U opportunitymotorproductid&我的汽车产品(opportunityproduct)没有opportunityid但有tmeic\U opportunitymotorproductid


唯一的问题是如何检索这些电机产品?这里有一种方法:

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Tooling.Connector;
using System;
using System.Collections.Generic;
using System.Linq;

class App
{
    private IOrganizationService svc;

    public App(IOrganizationService svc)
    {
        this.svc = svc;
    }

    public void Run()
    {
        var list = OppProducts(svc, new Guid("628CF01A-AED1-E411-80EF-C4346BAC7BE8"));
        DeleteList(svc, list);
    }

    public List<Entity> OppProducts(IOrganizationService svc, Guid OppId)
    {
        var query = new QueryExpression
        {
            EntityName = "opportunityproduct",
            ColumnSet = new ColumnSet("tmeic_opportunitymotorproductid", "opportunityproductid"),
            Criteria = new FilterExpression
            {
                FilterOperator = LogicalOperator.And,
                Conditions =
                {
                    new ConditionExpression
                    {
                        AttributeName = "tmeic_opportunitymotorproductid",
                        Operator = ConditionOperator.Equal,
                        Values = { OppId }
                    }   
                }
            }
        };

        var result = svc.RetrieveMultiple(query);

        return result.Entities.ToList();
    }

    public void DeleteList(IOrganizationService svc, List<Entity> list)
    {
        list.ForEach(e => svc.Delete(e.LogicalName, e.Id));
    }
}
使用Microsoft.Xrm.Sdk;
使用Microsoft.Xrm.Sdk.Query;
使用Microsoft.Xrm.Tooling.Connector;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
类应用程序
{
私人组织服务svc;
公共应用程序(IOrganizationService svc)
{
this.svc=svc;
}
公开募捐
{
var列表=OPP产品(svc,新Guid(“628CF01A-AED1-E411-80EF-C4346BAC7BE8”);
删除列表(svc,列表);
}
公开列表OppId产品(IOOrganizationService svc、Guid OppId)
{
var query=newqueryexpression
{
EntityName=“opportunityproduct”,
ColumnSet=新列集(“tmeic\U opportunitymotorproductid”、“opportunityproductid”),
条件=新筛选器表达式
{
FilterOperator=逻辑运算符。和,
条件=
{
新条件表达式
{
AttributeName=“tmeic\U opportunitymotorproductid”,
运算符=条件运算符。相等,
值={OppId}
}   
}
}
};
var result=svc.RetrieveMultiple(查询);
返回result.Entities.ToList();
}
公共作废删除列表(IOR组织服务svc,列表列表)
{
list.ForEach(e=>svc.Delete(e.LogicalName,e.Id));
}
}

Thank Aron可能重复,但这里的主要问题是我的机会主义产品“Motor Products”没有机会主义ID属性。这就是为什么使用现有MSDN样品很难检索电机产品的原因。你能提出其他建议吗?好的,用“tmeic_opportunitymotorproductid”代替“opportunityid”应该可以,我已经更新了答案以反映这一点。Aron,请参考我问题中的注释。我的opportunity中没有tmeic_opportunitymotorproductid。这是主要问题,没关系。如果您将Opportunity的GUID传递到OppProducts方法中,它将使Opp产品的tmeic_opportunitymotorproductid与该ID相匹配。这并不重要,但为什么系统会对Opportunity的外键使用新字段而不是现成字段?是的,Aron,非常感谢。成功了。再次非常感谢。