В основном мне нужен один запрос SOQL, исполняемый с использованием API веб-службы, который будет возвращать все элементы NoteAndAttachment, которые обычно отображаются в разделе «Примечания и вложения» на странице «Учетная запись» в веб-интерфейсе Salesforce. Это включает в себя не только 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; это будет идентификатор аккаунта, для которого я собираю записи. Этот конкретный запрос не выполняется со следующим исключением:
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.
Это все базовые, определяемые системой отношения, и он также не распознал единственное «контакт», поэтому я в растерянности.
Другие решения включают в себя подвыборы с полусоединением (существует ограничение в два, и вы не можете комбинировать их с «ИЛИ», поэтому не нужно бросать кубики), вложенные подзапросы (не могу) и т. Д. Я действительно в моем уме заканчиваются ограничения языка этого запроса; нет UNION, ограниченные подзапросы, ограниченная глубина подзапроса и сущность NoteAndAttachment не могут быть запрошены напрямую. Просто должен быть способ получить эти записи так же, как они показаны на веб-сайте, но я разочарован на каждом шагу.
РЕДАКТИРОВАТЬ: Мой ответ на данный момент заключается в том, чтобы запросить свойство NotesAndAttachments каждого из содержащихся типов объектов (Account, Contact, Opportunity), а также извлечь Attachments from Case и спроецировать их как NotesAndAttachments, чтобы получить нужную мне информацию. Этот процесс требует четырех циклов обработки и занимает в среднем около 15 секунд для сводной информации 5 записей (без тел примечаний или двоичных файлов). Мне удалось перенести извлечение данных в асинхронный поток, что сокращает время извлечения, но производительность, вероятно, все еще будет неудовлетворительной. Я продолжу работать над чем-то более производительным, но пока у меня это работает.