3

基本上,我需要一个单一的 SOQL 查询,可以使用 Web 服务 API 执行,它将返回所有 NoteAndAttachment 项目,这些项目通常会显示在 Salesforce Web UI 中帐户页面的“备注和附件”部分中。这不仅包括附加到帐户本身的 N&A,还包括附加到与帐户相关的任何案例、机会或联系人的 N&A。Salesforce 本身获取这些信息似乎没有问题,但是在 SOQL 的限制和数据模型的限制之间,我还没有找到令人满意的解决方案。

这是我到目前为止所拥有的:

SELECT Id,
(select Id, Title, IsNote from NotesAndAttachments),
(select Id, Title, IsNote from Contacts.NotesAndAttachments),
(select Id, Title, IsNote from Cases.NotesAndAttachments),
(select Id, Title, IsNote from Opportunities.NotesAndAttachments)
FROM Account a WHERE Id = '{0}'

{0} 用于 .NET String.Format;这将是我要为其提取记录的帐户 ID。此特定查询失败,但出现以下异常:

System.Web.Services.Protocols.SoapException : INVALID_FIELD: 
(select Id, Title, IsNote from Contacts.NotesAndAttachments),
                               ^
ERROR at Row:3:Column:48
Didn't understand relationship 'Contacts' in field path. If you are attempting to use a custom relationship, be sure to append the '__r' after the custom relationship name. Please reference your WSDL or the describe call for the appropriate names.

这些都是基本的、系统定义的关系,它也不识别单数的“联系人”,所以我很茫然。

其他解决方案涉及半连接子选择(有两个限制,您不能将它们与“OR”组合,所以没有骰子),嵌套子查询(不能)等。我真的很机智以这种查询语言的限制结束;没有UNION,子查询有限,子查询深度有限,无法直接查询NoteAndAttachment实体。必须有一种方法来获取这些记录,就像它们在网站上显示的方式一样,但我每时每刻都感到沮丧。

编辑:我现在的答案是查询每个包含对象类型(帐户、联系人、机会)的 NotesAndAttachments 属性,并从案例中提取附件并将​​它们投影为 NotesAndAttachments 以获得我需要的信息。这个过程需要四次往返,5 条记录的摘要信息(没有注释正文或文件二进制文件)平均需要大约 15 秒。我能够将数据检索推送到异步线程,从而减少检索时间,但性能可能仍然不能令人满意。我将继续研究性能更高的东西,但现在我已经让它工作了。

4

5 回答 5

5

这里似乎有两个问题......

  1. 您不能直接查询 NotesAndAttachments 对象 - 这是 Notes 和 Attachments 对象的组合。
  2. 您只能在父子关系上查询到 1 级。您可以对联系人进行子查询,但不能对联系人的备注或附件进行子查询。

我认为您在这里唯一的选择是进行四个查询。但是,如果您在多个帐户 ID 上循环,这可能会花费您大量的 API 调用。

SELECT Id,
(SELECT Id, Title FROM Notes),
(SELECT Id, Name FROM Attachments)
FROM Account WHERE Id = '{0}'

SELECT Id,
(SELECT Id, Title FROM Notes),
(SELECT Id, Name FROM Attachments)
FROM Contact WHERE AccountId = '{0}'

SELECT Id,
(SELECT Id, Title FROM Notes),
(SELECT Id, Name FROM Attachments)
FROM Case WHERE AccountId = '{0}'

SELECT Id,
(SELECT Id, Title FROM Notes),
(SELECT Id, Name FROM Attachments)
FROM Opportunity WHERE AccountId = '{0}'
于 2011-02-11T09:43:24.917 回答
1

第 1 点:独立于父对象的注释。

在最新的 2021 年春季,我看到我们想要捕捉的细节Notes and Attachment已经一起移到了不同​​的对象上。

为了现在获取这些注释的文本和其他信息,我们可以查询ContentVersion对象,这是一个标准对象,您可以简单地进行 SOQL 查询来检索数据,在我的情况下,我必须检索 Notes 的信息,所以这里是下面的查询。

SELECT Id, Title, Description, TextPreview FROM ContentVersion

第 2 点:基于父对象(如 Opportunity)的注释

如果您希望基于父对象(如商机或帐户)检索备注。您可以使用以下 SOQL,它将在单独的对象上创建。

Opportunity opp = [SELECT Id,
(SELECT ID, Title FROM AttachedContentNotes)
FROM Opportunity where id = 'xxxxx'];

好处:您可以拥有与单个对象相关的所有注释

我希望这对所有人都有帮助。

于 2021-11-26T08:07:45.813 回答
0

从Attachment对象开始,您可能会有更好的运气。

您可能需要在多个查询中执行此操作。根据关系的方向,关系查询存在限制。查看关系查询

于 2011-02-11T07:16:20.710 回答
0

我想知道查询所有附件和所有笔记是否更好,无论他们拥有什么样的父亲对象,如下所示:

SELECT Id, Name, parent.Id, parent.Name, parent.Type FROM Attachment
SELECT Id, Title, parent.Id, parent.Name, parent.Type FROM Note

这样,您可以使用父类型对附件进行分组,您将获得所有可用的附件,并且应该更快。

如果你真的需要限制在这种类型的对象上,你可以做一些类似的事情:

SELECT Id, Name, parent.Id, parent.Name, parent.Type FROM Attachment where parent.type like '%Account%' OR parent.type like '%Contact%' OR parent.type like '%Case%' OR parent.type like '%Opportunity%' 

希望能帮助到你。

于 2013-05-22T14:04:24.440 回答
0

我是从销售人员那里找到的。

子查询当前不支持以下对象:

活动历史

附件

事件

活动参加者

笔记

开放活动

标签(AccountTag、ContactTag 和所有其他标签对象)

任务

参考: http: //www.salesforce.com/us/developer/docs/officetoolkit/Content/sforce_api_calls_soql_select.htm

于 2013-11-14T08:17:49.153 回答