WorkOrder对象查询AssignedResource字段的SOQL报错问题
问题根因
你原有SOQL报错来自两个核心语法错误:
- 子查询引用的子关系名错误:WorkOrder和AssignedResource是一对多的父子关联,Salesforce标准子关系API名为复数形式
AssignedResources,你写的单数AssignedResource不存在,会直接抛无效关系错误。 - 子查询内字段引用错误:子查询的查询上下文是AssignedResource对象本身,不需要在字段前加
AssignedResource.前缀,直接引用对象上的字段即可,额外加前缀会被识别为不存在的自定义字段,触发报错。 - 额外说明:
ServiceResourceId是AssignedResource对象上的标准查找外键字段,不需要追加__r后缀,__r后缀仅用于跨查找关系取关联对象的属性时使用。
可直接运行的正确SOQL
SELECT WorkOrderNumber, Subject, Description, Status, Job_Request_SDO__c, Job_Location__c, Job_Type__c, Job_Category__c, Job_Number_Text__c, CaseId, (SELECT ServiceResourceId FROM AssignedResources) FROM WorkOrder
该语句会一次性返回所有要求的字段,同时嵌套返回每个工单关联的所有AssignedResource记录对应的ServiceResourceId,不需要额外写独立查询。
是否需要编写Wrapper类
Wrapper类不是必须项,根据使用场景选择即可:
- 如果是Apex原生逻辑处理,直接使用查询返回的WorkOrder sObject列表即可,每个WorkOrder记录会自带
AssignedResources子列表属性,遍历即可拿到对应的ServiceResourceId,参考代码:
List<WorkOrder> workOrders = [ SELECT WorkOrderNumber, Subject, (SELECT ServiceResourceId FROM AssignedResources) FROM WorkOrder ]; for (WorkOrder wo : workOrders) { for (AssignedResource ar : wo.AssignedResources) { Id relatedServiceResourceId = ar.ServiceResourceId; // 编写你的业务逻辑 } }
- 仅当你需要自定义返回数据结构(比如给前端返回接口、做跨系统数据传输、需要扁平化数据结构)时,才需要编写Wrapper类组装数据。
内容的提问来源于stack exchange,提问作者Sai Sudarshan
相关产品推荐
相关产品推荐

