2016-11-09 2 views
0

J'ai les éléments suivants dans mon contrôleur pour une page Visualforce qui est consommée par un PageBlockTable.Salesforce, accès aux champs TargetObject à partir de l'objet ProcessInstance à l'aide de SOQL

Je peux accéder à d'autres champs standards du p.ProcessInstance.TargetObject tels que p.ProcessInstance.TargetObject.Name et .id etc ...

Mais comment puis-je accéder aux champs personnalisés de TargetObject de l'endroit où le dossier est liée à? Ou est-ce pas possible? Si ce n'est pas possible alors je suppose que je peux le faire dans une requête séparée, mais je ne peux pas comprendre comment.

Merci

List<ProcessInstanceWorkitem> results = [Select p.ProcessInstance.Status, p.ProcessInstance.TargetObject.Name, p.ProcessInstance.TargetObject.Id, p.Actor.Name, p.CreatedBy.Name, p.CreatedDate FROM ProcessInstanceWorkitem p]; 

Répondre

2

Vous devez effectuer une requête SOQL supplémentaire sur le TargetObject, comme ProcessInstance est polymorphes. par exemple.

List<ProcessInstanceWorkitem> results = [Select p.ProcessInstance.Status,  p.ProcessInstance.TargetObject.Name, p.ProcessInstance.TargetObject.Id, p.Actor.Name, p.CreatedBy.Name, p.CreatedDate FROM ProcessInstanceWorkitem p]; 

List<Id> targetObjectIds = new List<Id>(); 
for(SObject result : results) 
{ 
    targetObjectIds.add(result.p.ProcessInstance.TargetObject.Id); 
} 
List<SObject> targetObjectFields = [SELECT Id, Field names FROM SObject WHERE Id IN:targetObjectIds]; 

Modifié: S'il vous plaît changer SObject à l'objet que vous utilisez actuellement.

+0

Salut, c'est super merci beaucoup! J'ai l'impression d'avoir cette erreur: Compile Error: Le type de sObject 'SObject' n'est pas supporté. Si vous essayez d'utiliser un objet personnalisé, assurez-vous d'ajouter le '__c' après le nom de l'entité. Veuillez référencer votre WSDL ou l'appel de description pour les noms appropriés. à la ligne 38 colonne 36 – realtek

+0

Une idée est Chris? Merci – realtek

+0

L'exemple de Chris est générique, vous devez rendre votre requête plus spécifique, par exemple si votre objet associé est compte remplacer la '' Liste targetObjectFields = [SELECT ID, noms de champs FROM SObject WHERE Id IN: targetObjectIds]; '' avec ' 'Liste targetObjectFields = [Identifiant SELECT, MyField__c FROM Compte O WH ID dans: targetObjectIds];' 'en supposant que votre champ personnalisé que vous voulez s'appelle MyField__c – thegogz