Salesforce - Apex - アクティビティ履歴に基づくクエリアカウント
-
23-12-2019 - |
質問
Salesforceの専門家、
Queryアカウント情報に関する質問が効率的に質問します。ActivityHistoryオブジェクトのアップデートに基づいてアカウントを照会したいと思います。私が得る問題は、「完全な」アクティブヒストリーがあるかどうかに関係なく、すべてのアカウントが取得されていることです。そのため、status="complete"とtype_for_reporting= 'qrc'?
を持つActiveHistoryを持つアカウントのみを取得するようにこのクエリを書くことができる方法はありますか。List<Account> AccountsWithActivityHistories = [
SELECT
Id
,Name
,( SELECT
ActivityDate
,ActivityType
,Type_for_Reporting__c
,Description
,CreatedBy.Name
,Status
,WhatId
FROM ActivityHistories
WHERE Status ='complete' and Type_for_Reporting__c = 'QRC'
)
FROM Account
];
. 解決
歴史上のどこでwhere句を持っていますが、あなたはまだアカウントレベルで1つを見逃しています。
たとえばこれは連絡先を持つアカウントのみを返します。
SELECT Id, Name
FROM Account
WHERE Id IN (SELECT AccountId FROM Contact) // try with NOT IN too
.
活動を使って、そのようにして使用されるのが好きではないのでトリッキーです。
> http://www.salesforce.com/us/開発者/ Docs / officeToolkit /コンテンツ/ SFRECE_API_CALLS_SOQL_SELECT.HTM
次のオブジェクトは現在サブQueriesではサポートされていません:
- ActivityHistory
- 添付ファイル
- イベント
- eventattendee
- 注
- 漏出力
- タグ(AccountTag、ContactTag、および他のすべてのタグオブジェクト)
- タスク
追加的に ActivityHistory 定義もビット難聴です。
「すべてのデータを表示する」権限を持っていないユーザーに対する以下の制限事項は、パフォーマンスの問題を防ぐのに役立ちます。
- 関係クエリのメイン節では、参照できます。 1件のレコードたとえば、すべてのレコードをフィルタリングすることはできません。 アカウント名は 'a'から始まります。代わりに、あなたは単一のものを参照する必要があります アカウントレコード
- ここで句を使用することはできません。
- リストに返された行数で499以下の制限を指定する必要があります。
- 昇順で昇順に昇順に並べ替えられ、降順でソートする必要があります。最後にNULLを表示できます。にとって 例:AstivityDate ASC NULLの順序最後、LastModifiedDateDesc。
複数のクエリが必要になるように見えます。タスク(またはカスタムフィールドが表示されているかに応じて)にアクセスし、一連のAccoundIdsを作成してから、アカウントを照会しますか?
または元のクエリからリストを手動でフィルタリングすることができ、アカウントをヘルパーリストにコピーします。
List<Account> finalResults = new List<Account>();
for(Account a : [SELECT...]){
if(!a.ActivityHistories.isEmpty()){
finalResults.add(a);
}
}
. 所属していません StackOverflow