3

基本的に、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 秒かかります。データの取得を非同期スレッドにプッシュすることで、取得時間を短縮できましたが、パフォーマンスはおそらく満足できるものではありません。よりパフォーマンスの高いものに取り組み続けますが、今のところ動作しています。

4

5 に答える 5

5

ここには2つの問題があるようです...

  1. NotesAndAttachments オブジェクトを直接クエリすることはできません。これは、Notes オブジェクトと Attachments オブジェクトの組み合わせです。
  2. 親子関係については、1 レベルまでしか照会できません。連絡先へのサブクエリを持つことはできますが、連絡先のメモや添付ファイルへのサブクエリを持つことはできません。

ここでの唯一の選択肢は、4 つのクエリを実行することだと思います。ただし、複数のアカウント 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 に答える
0

私はセールスフォース側から見つけました。

次のオブジェクトは、サブクエリでは現在サポートされていません。

活動履歴

付属品

イベント

イベント出席者

ノート

オープンアクティビティ

タグ (AccountTag、ContactTag、およびその他すべてのタグ オブジェクト)

仕事

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

于 2013-11-14T08:17:49.153 に答える
0

Attachment sobjectから始めたほうがよいかもしれません。

おそらく複数のクエリでこれを行う必要があります。リレーションシップの方向によっては、リレーションシップ クエリに制限があります。リレーションシップ クエリを参照

于 2011-02-11T07:16:20.710 に答える