3 votes

Requête de jointure soql dans SalesForce

J'ai du mal avec une requête, je veux sélectionner toutes les succursales, et "joindre" les sociétés (de type Compte) avec à nouveau les contacts qui s'y trouvent. Jusqu'à présent, pas de chance, qu'est-ce que je fais de travers ?

SELECT 
b.Id, b.Location,
  (SELECT FirstName, LastName, FROM b.Companies.Contacts 
    //i've tried combinations of __r and __c
  WHERE City == 'New York')  
FROM Branche__c b

mon WSDL pour cette partie est construit comme ceci :

<complexType name="Branche\_\_c">
  ..
     <element name="Companies\_\_r" nillable="true" minOccurs="0" type="ens:Account"/>
  ..
</complexType>
..
<complexType name="Account">
  ..
  <element name="Contacts" nillable="true" minOccurs="0" type="tns:QueryResult"/>
  ..
</complexType>

2voto

Martin Borthiry Points 2057

Est-ce qu'un @JCD vous a dit, c'est une limitation de Salesforce.

De cette façon, vous ne pouvez répertorier que tous les contacts liés aux comptes et en même temps liés aux succursales :

SELECT Email, Account.Name, 
FROM Contact
WHERE AccountId in (
 SELECT Companies__c
   FROM Branche__c
)

Mais si vous voulez faire rejoindre entre ces contacts y branches vous devriez essayer quelque chose comme ça :

list[] res = new list[]{};
for (Branche__c br : [SELECT Id, Location ,Companies__c FROM Branche__c])
{
     List[] ContactList = [select name, (select email from contacts) from account where id = :br.Companies__c]; 
     res.add(ContactList);
}

0voto

Matt K Points 3926

Lorsque vous dites "de type Compte", voulez-vous dire que "Sociétés" est l'étiquette pour les comptes ?

Si c'est le cas, essayez ceci :

Select 
  Name, Id, 
  (Select FirstName, LastName From Contacts Where MailingCity = 'New York')
From Account 
Where ID IN (Select CompanyID From Branch__c)

Où CompanyID est le nom API du champ de relation de compte sur Branch__c.

Je ne sais pas si ça va aider, mais ça peut être suffisant pour commencer.

De plus, je recommande d'utiliser le Force.com Explorer pour parcourir les métadonnées, lors de l'écriture d'une déclaration SOQL, plutôt que de parcourir le WSDL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X