不理解字段路径中的关系 'LinkedEntityId'
Didn't understand relationship 'LinkedEntityId' in field path
所以我通常能够查询关系,但我无法在对象管理器中访问此对象,所以当我知道 LinkedEntity 是一个案例时,从 ContentDocumentLink 对象访问 accountId 的查询应该是什么。
我的代码:
List<ContentDocumentLink> case_file_links=
[
SELECT Id,ContentDocumentId,LinkedEntityId.AccountId,ShareType
FROM ContentDocumentLink
WHERE Id IN: case_file_link_Ids
];
错误:
SELECT Id,ContentDocumentId,LinkedEntityId.AccountId,ShareType
^
ERROR at Row:2:Column:45
Didn't understand relationship 'LinkedEntityId' in field path. If you..
LinkedEntityId
是对许多 table 的奇怪突变查找,任何支持文件上传的 table。正式名称是“polymorphic lookup”。
也许您以前使用过 Tasks,它们有相似的领域。 WhatId
可以指向 Account、Case、Opportunity 以及许多自定义对象。 WhoId
指向 User/Contact/Lead.
所以这是对“某物”的查找。不能保证它是 Cases,所以在编译时 SF 不能盲目地接受 AccountId
。如果该字段不存在怎么办。
您可能必须在 SOQL 中使用 TYPEOF
。
SELECT Id, ContentDocumentId, ShareType,
TYPEOF LinkedEntity WHEN Case THEN CaseNumber, Subject, AccountId END
FROM ContentDocumentLink
WHERE Id IN ('06A7a000001VafmEAC', '06A7a000001VafnEAC')
Developer Console 太笨了,无法正确显示,但 workbench 应该管理
在 Apex 中,您将需要一个 instanceof
来检查并将 LinkedEntity 转换为正确的 sObject...或使用通用 sObj.get('AccountId')
,如果它不存在,它将 return 空?
如果这听起来太麻烦 - 您可以随时将其拆分为 2 个查询。
- 只查询
SELECT Id, ContentDocumentId, LinkedEntityId, ShareType FROM ContentDocumentLink
- 遍历结果,将
LinkedEntityId
收集到助手 Set<Id>
中。
Map<Id, Case> cases = new Map<Id, Case>([SELECT Id, AccountId FROM Case WHERE Id IN :mySet]);
所以我通常能够查询关系,但我无法在对象管理器中访问此对象,所以当我知道 LinkedEntity 是一个案例时,从 ContentDocumentLink 对象访问 accountId 的查询应该是什么。
我的代码:
List<ContentDocumentLink> case_file_links=
[
SELECT Id,ContentDocumentId,LinkedEntityId.AccountId,ShareType
FROM ContentDocumentLink
WHERE Id IN: case_file_link_Ids
];
错误:
SELECT Id,ContentDocumentId,LinkedEntityId.AccountId,ShareType
^
ERROR at Row:2:Column:45
Didn't understand relationship 'LinkedEntityId' in field path. If you..
LinkedEntityId
是对许多 table 的奇怪突变查找,任何支持文件上传的 table。正式名称是“polymorphic lookup”。
也许您以前使用过 Tasks,它们有相似的领域。 WhatId
可以指向 Account、Case、Opportunity 以及许多自定义对象。 WhoId
指向 User/Contact/Lead.
所以这是对“某物”的查找。不能保证它是 Cases,所以在编译时 SF 不能盲目地接受 AccountId
。如果该字段不存在怎么办。
您可能必须在 SOQL 中使用 TYPEOF
。
SELECT Id, ContentDocumentId, ShareType,
TYPEOF LinkedEntity WHEN Case THEN CaseNumber, Subject, AccountId END
FROM ContentDocumentLink
WHERE Id IN ('06A7a000001VafmEAC', '06A7a000001VafnEAC')
Developer Console 太笨了,无法正确显示,但 workbench 应该管理
在 Apex 中,您将需要一个 instanceof
来检查并将 LinkedEntity 转换为正确的 sObject...或使用通用 sObj.get('AccountId')
,如果它不存在,它将 return 空?
如果这听起来太麻烦 - 您可以随时将其拆分为 2 个查询。
- 只查询
SELECT Id, ContentDocumentId, LinkedEntityId, ShareType FROM ContentDocumentLink
- 遍历结果,将
LinkedEntityId
收集到助手Set<Id>
中。 Map<Id, Case> cases = new Map<Id, Case>([SELECT Id, AccountId FROM Case WHERE Id IN :mySet]);