基本的に、Web サービス API を使用して実行可能な 1 つの SOQL クエリが必要です。このクエリは、Salesforce Web UI のアカウント ページの [メモと添付ファイル] セクションに通常表示されるすべての NoteAndAttachment 項目を返します。これには、アカウント自体に関連付けられている 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.
これらはすべて基本的なシステム定義の関係であり、単数の「連絡先」も認識しなかったので、途方に暮れています。
他の解決策には、半結合のサブ選択 (2 つの制限があり、「OR」でそれらを結合することはできないため、ダイスはありません)、ネストされたサブクエリ (できません) などが含まれています。このクエリ言語の制限で終わります。UNION なし、限定されたサブクエリ、限定されたサブクエリの深さ、および NoteAndAttachment エンティティを直接照会することはできません。ウェブサイトに表示されているのと同じ方法でこれらのレコードを取得する方法が必要なだけですが、私は毎回イライラしています.
編集: 今のところ私の答えは、含まれている各オブジェクト タイプ (アカウント、連絡先、商談) の NotesAndAttachments プロパティをクエリし、Case から添付ファイルを取得して NotesAndAttachments として投影し、必要な情報を取得することです。このプロセスには 4 回の往復が必要であり、5 つのレコードの要約情報 (ノート本体またはファイル バイナリなし) に対して平均約 15 秒かかります。データの取得を非同期スレッドにプッシュすることで、取得時間を短縮できましたが、パフォーマンスはおそらく満足できるものではありません。よりパフォーマンスの高いものに取り組み続けますが、今のところ動作しています。