【问题标题】:Salesforce SOQL Query for "Notes And Attachments" of a siteSalesforce SOQL 查询站点的“注释和附件”
【发布时间】:2011-02-10 01:04:19
【问题描述】:

基本上,我需要一个 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实体。必须有一种方法可以让这些记录以与网站上显示的方式相同的方式获得,但我每时每刻都感到沮丧。

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

【问题讨论】:

    标签: .net web-services salesforce soql


    【解决方案1】:

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

    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}'
    

    【讨论】:

    • 我即将意识到这一点。目前我有四个查询调用,它们从 NotesAndAttachments 中提取摘要数据以显示在列表中;要查看详细信息,用户可以获得单个记录的完整数据。但是,运行所有四个查询需要整整 15 秒才能从我的测试帐户返回总共 5 条记录。
    【解决方案2】:

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

    在最新的 2021 年春季,我看到我们想要从 Notes and Attachment 捕获的详细信息已全部移至不同的对象。

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

    SELECT Id, Title, Description, TextPreview FROM ContentVersion
    

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

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

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

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

    希望对大家有所帮助。

    【讨论】:

      【解决方案3】:

      Attachment sobject 开始,您可能会有更好的运气。

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

      【讨论】:

        【解决方案4】:

        我想知道是否最好对所有附件进行查询,对所有笔记进行一次查询,无论它们具有哪种父对象,如下所示:

        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%' 
        

        希望对你有帮助。

        【讨论】:

          【解决方案5】:

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

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

          活动历史

          附件

          事件

          活动参与者

          注意

          开放活动

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

          任务

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-03
            相关资源
            最近更新 更多