在plugin中多对多的关联实体的三种获取方法

Dynamics CRM中,实体间的多对多关系(many-to-many relationship)是通过一个中间表(intersecttable)来建立的。我们知道潜在商机和客户有预设N:N关系(Lead andAccount),那我们怎么通过一个给定的潜在商机而获得它所关联的客户呢?

我所知道的有下面三种方法。

1)直接访问中间表实体

QueryByAttribute query = new QueryByAttribute();

//Late Bound的话,这个实体的SchemaNameaccountleads

query.EntityName  =  AccountLeads.EntityLogicalName;

query.Attributes.Add("leadid");   

query.ColumnSet = new ColumnSet();

query.Values.Add(new Guid("A36E5A4C-A53F-E311-A586-005056A800FD"));

EntityCollection accounts = _service.RetrieveMultiple(query);

foreach(Entity en in accounts.Entities)

{

//en["accountid"]通过这个就能获得每一个关联客户的Guid

}

 

2)通过使用RelationshipQueryCollection来寻找

Lead lead=_service.Retrieve(Lead.EntityLogicalName,new Guid("A36E5A4C-A53F-E311-A586-005056A800FD"),new ColumnSet()) as Lead

QueryExpression query = new QueryExpression();

query.EntityName = Account.EntityLogicalName;

query.ColumnSet = new ColumnSet();

Relationship relationship =new Relationship();

//这里的SchemaName可以到自定义系统里面是实体间NN Relationship得到

relationship.SchemaName ="accountleads_association";

RelationshipQueryCollection lead_accounts = new RelationshipQueryCollection();

relatedEntites.Add(relationship,query);

RetrieveRequest request =new RetrieveRequest();

request.RelatedEntitiesQuery= lead_accounts;

request.ColumnSet = new ColumnSet();

request.Target =lead.ToEntityReference();

RetrieveResponse response = _service.Execute(request) as RetrieveResponse;

if(response!=null&&response.Entity.RelatedEntities.Count!=0&&response.Entity.RelatedEntities.Contains(relationship))

EntityCollection accounts = response.Entity.RelatedEntities[relationship];

foreach(Entity en in account.Entities)

{

//这里能直接获得实体

}

3)通过使用Link Entity来拼接

SDK里面有这个例子。例子里面用QueryExpressionLinkEntities和用FetchXml各示范了一次。请有兴趣的朋友到SDK里面查看,这里不再累述了。

SampleCode\CS\GeneralProgramming\Queries\RetrieveRecordsFromAnIntersectTable.cs

 

谢谢阅读!

 

Jake Zhong

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值