2009-03-05 5 views
2

J'ai une requête à exécuter sur CRM. Il est l'équivalent de ce qui suit dans SQL:Comment puis-je lier des entités dans une requête CRM 4.0 à l'aide du service Web et renvoyer des colonnes des deux?

SELECT A.*, B.* 
FROM Table1 A INNER JOIN Table2 B 
ON A.ID = B.ID 

J'ai créé une requête et a ajouté un linkentity comme suit:

link.JoinOperator = JoinOperator.Inner; 
link.LinkFromEntityName = EntityName.new_Table1.ToString(); 
link.LinkFromAttributeName = "new_Table1ID"; 
link.LinkToEntityName = EntityName.new_Table2.ToString(); 
link.LinkToAttributeName = "new_Table2ID"; 
query.LinkEntities = new LinkEntity[] { link }; 

Cependant, il ne retourne que les colonnes de new_Table1.

Existe-t-il un moyen de lier de cette manière et de renvoyer les colonnes des deux entités sans avoir à créer deux requêtes?

Répondre

2

QueryExpression ne supporte pas cela. Vous devrez utiliser Fetch XML.

De « Utilisation FetchXML » dans le SDK - vous finirez avec quelque chose comme ceci:

<fetch mapping='logical'> 
     <entity name='account'> 
<attribute name='accountid'/> 
<attribute name='name'/> 
<link-entity name='systemuser' to='owninguser'> 
    <filter type='and'> 
     <condition attribute='lastname' operator='ne' value='Cannon' /> 
    </filter> 
    <attribute name='name' /> 
</link-entity> 
     </entity> 
    </fetch> 

Si vous ne l'avez pas utilisé FetchXML encore, je recommande fortement http://www.stunnware.com/?area=products&group=swtools4 pour construire et tester FetchXML. De cette façon, vous pouvez obtenir un aperçu de votre XML résultat.

0

Vous pouvez également utiliser LinqtoCRM. Une requête de récupération des rôles de systemusers ressemble à ceci:

var res = from u in p.Linq() 
     join sr in p.Linq() on u.systemuserid.Value equals sr.systemuserid.Value 
     join r in p.Linq() on sr.roleid.Value equals r.roleid.Value 
     select new { u.fullname, r.name }; 

Cela fonctionne à travers à la fois normal et (avec CRMMetal) plusieurs à plusieurs. Vous pouvez regarder un webcast here.