2010-08-09 18 views
1

Je suis en train d'écrire un code sommet en utilisant cette requête et ne va nulle part:requête SOQL à traverser plusieurs niveaux sur la tâche

List<Task> tasks = [SELECT id, whatid, who.account.parent.name FROM task WHERE who.account.parent.name LIKE 'Procter%']; 

Je ne suis pas surpris que cela ne fonctionne pas, mais ne peut pas semblent trouver de la documentation n'importe où qui explique comment j'irais à ce sujet. Est-ce que quelqu'un a une idée? J'essaie d'obtenir toutes les tâches liées à un contact lié à un compte avec un compte parent de "procter et jouer" ...

Répondre

4

On dirait que les options pour "monter" dans les champs mixtes (ceux où La recherche va à plusieurs objets comme WhatId va Account ou Opportunity) sont très limitées. J'ai été capable d'écrire "WHERE what.name LIKE 'Procter%' mais pas" WHERE what.parent.name LIKE 'Procter%' ".

D'ailleurs, je pense qu'il devrait être WhatId et non le WhoId (vérifier dans l'éditeur de règles de validation pour les tâches, essayez d'insérer les champs "ID contact/prospect" et "ID opportunité/compte"). Vous verrez également que vous ne pouvez pas "monter" (ou dans le cas de cet éditeur - "go droit ") sur ces champs alors que pour d'autres domaines, vous pouvez explorer la relation comme pour « CreatedBy.UserRole.Name ».

pouvez-vous essayer cette sous-requête à la place?

[SELECT id, whatid FROM task WHERE whatid IN (SELECT Id FROM Account WHERE Parent.Name LIKE 'United%')] 
1

WhatId et WhoID sont fi polymorphes champs, donc ces champs ne supportent pas de parcourir plusieurs niveaux.

0

J'ai eu une exigence similaire pour la traversée hiérarchique, dans mon cas, je devais sélectionner les informations principales associées à une tâche. Ce que je devais faire était d'abord demander une liste de tâches, ensuite demander une liste de prospects basés sur ces tâches, puis utiliser une classe wrapper pour combiner les deux listes dans un objet personnalisé et afficher l'objet en conséquence en utilisant visualforce. La classe wrapper était certainement ma réponse à l'équation, car il semble que vous ne puissiez pas interroger directement à l'aide du Who.Id.

Espérons que cela aide!

0

Le champ AccountID sur les tâches est rempli automatiquement par SF pour les contacts. De toute évidence, il est vide pour les prospects. Donc, si vous voulez obtenir des données de compte, vous pouvez simplement faire quelque chose comme ceci:

ID SELECT, Who.FirstName, Who.LastName, Account.Parent.Name DE Tâche Où WhoID = '00Q12SDFUUALDLKJF'

Il est évident que , Account.Parent.Name est vide pour Leads.