2016-11-09 139 views
0

我的控制器中有一个由PageBlockTable使用的Visualforce页面。Salesforce,使用SOQL从ProcessInstance对象访问TargetObject字段

我可以访问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

您必须执行对TargetObject额外的SOQL查询,如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

嗨,非常感谢你!我似乎得到这个错误,虽然:编译错误:sObject类型'SObject'不支持。如果您尝试使用自定义对象,请务必在实体名称后面追加'__c'。请参考您的WSDL或描述调用适当的名称。在第38行36列 – realtek

+0

任何想法的克里斯?谢谢 – realtek

+0

克里斯的例子是通用的,你需要使你的查询更具体,例如,如果你的相关对象是帐户替换''列表 targetObjectFields = [SELECT ID,字段名称从SObject WHERE ID IN:targetObjectIds];' 'List targetObjectFields = [SELECT Id,MyField__c FROM Account WHERE Id IN:targetObjectIds];''假设你想要的自定义字段叫做MyField__c – thegogz