2016-11-09 4 views
0

У меня есть следующее в моем контроллере для страницы visualforce, которая потребляется с помощью страницы PageBlockTable.Salesforce, доступ к полям TargetObject из объекта ProcessInstance с использованием SOQL

я могу получить доступ к другим стандартным полям p.ProcessInstance.TargetObject, такие как p.ProcessInstance.TargetObject.Name и .id т.д ...

Но как я могу получить доступ к другим полей TargetObject о том, где запись относится к? Или это невозможно? Если это невозможно, я предполагаю, что могу сделать это в отдельном запросе, но я не могу понять, как это сделать.

Спасибо

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]; 

ответ

2

Вы должны выполнить дополнительный запрос SOQL на TargetObject, а ProcessInstance полиморфный. например.

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]; 

Отредактировано: Пожалуйста, измените SObject на объект, который Вы используете.

+0

Привет, спасибо большое! Кажется, я получаю эту ошибку: Compile Error: sObject type «SObject» не поддерживается. Если вы пытаетесь использовать пользовательский объект, обязательно добавьте «__c» после имени сущности. Просьба указать ваш WSDL или описать вызов для соответствующих имен. по строке 38, колонке 36 – realtek

+0

Крис? Спасибо – realtek

+0

Пример Криса является общим, вам нужно сделать ваш запрос более конкретным, например, если связанный с ним объект является учетной записью, замените «Список targetObjectFields = [ИДЕНТИФИКАТОР SELECT, Имена полей FROM SObject ГДЕ ИД IN: targetObjectIds];' 'with' 'List targetObjectFields = [SELECT Id, MyField__c FROM Account WHERE Id IN: targetObjectIds];' 'если ваше настраиваемое поле вы хотите, называется MyField__c – thegogz