.net Salesforce SOQL查询;附注及附件;场地
基本上,我需要一个SOQL查询,可使用web服务API执行,该查询将返回Salesforce web UI中帐户页面的Notes和Attachments部分中通常显示的所有NoteAndAttachment项。这不仅包括附加到帐户本身的N&A,还包括附加到与帐户相关的任何案例、机会或联系人的N&A。Salesforce本身似乎在获取这些信息方面没有问题,但在SOQL限制和数据模型限制之间,我还没有找到令人满意的解决方案 以下是我目前掌握的情况:.net Salesforce SOQL查询;附注及附件;场地,.net,web-services,salesforce,soql,.net,Web Services,Salesforce,Soql,基本上,我需要一个SOQL查询,可使用web服务API执行,该查询将返回Salesforce web UI中帐户页面的Notes和Attachments部分中通常显示的所有NoteAndAttachment项。这不仅包括附加到帐户本身的N&A,还包括附加到与帐户相关的任何案例、机会或联系人的N&A。Salesforce本身似乎在获取这些信息方面没有问题,但在SOQL限制和数据模型限制之间,我还没有找到令人满意的解决方案 以下是我目前掌握的情况: SELECT Id, (select Id, Ti
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字符串.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.
这些都是基本的,系统定义的关系,它也不认识单一的“接触”,所以我不知所措
其他解决方案包括半连接子选择(有两个限制,不能与“或”组合,因此没有骰子)、嵌套子查询(不能)等。我真的对这种查询语言的限制束手无策;无法直接查询联合、有限子查询、有限子查询深度以及NoteAndAttachment实体。必须有一种方法来获取这些记录,就像它们在网站上显示的那样,但我每次都感到沮丧
编辑:我现在的答案是查询每个包含对象类型(帐户、联系人、商机)的NotesAndAttachments属性,并从案例中提取附件,并将其作为NotesAndAttachments进行投影,以获取我需要的信息。此过程需要四次往返,5条记录的摘要信息(无注释正文或文件二进制文件)平均需要约15秒。我能够将数据检索推到一个异步线程,这减少了检索时间,但性能可能仍然不令人满意。我会继续做一些性能更好的工作,但现在我已经让它工作了。从sobject开始,你可能会有更好的运气
您可能需要在多个查询中执行此操作。根据关系的方向,关系查询有一些限制。参见这里似乎有两个问题
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}'
我想知道对所有附件进行一次查询,对所有注释进行另一次查询,是否更好,无论它们有哪种父对象,例如:
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%'
希望能有帮助。我从salesforce方面找到的 子查询中当前不支持以下对象: 活动历史 附件 事件 活动参与者 注 开放活动 标记(AccountTag、ContactTag和所有其他标记对象) 任务 参考:
我逐渐意识到这一点。目前我有四个查询调用,它们从notes和attachments中提取摘要数据以显示在列表中;要查看详细信息,用户可以获取单个记录的完整数据。但是,运行所有四个查询需要整整15秒才能从我的测试帐户返回总共5条记录。