如何通过c#检索特定Opportunity的所有Opportunity产品?
我有机会,如下图所示: 昨天,我发布了一个关于如何创建Opportunity产品(汽车产品)的问题&Dave向我提供了一个关于如何实现这一点的问题 现在,我的要求已经扩展到删除这些现有的电机产品和添加新产品 我想先从这次机会中检索所有相关的电机产品,这样做 为了创建Opportunity Product,我使用了以下代码:如何通过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
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,非常感谢。成功了。再次非常感谢。