ActivityHistory を照会していますが、他のオブジェクトに対して SUBQUERY のオブジェクトとしてしか照会できないようです。これで問題ありません。サブクエリで ActivityHistory を使用して、Account オブジェクトに対してクエリを実行するようにクエリを変更しました。うまくいったようです。しかし、テストでは、ActivityHistory サブクエリが 200 を超える結果を返すケースが見つかりました。このエラーが発生し始めました:
FATAL_ERROR|System.QueryException: エンティティ タイプ ActivityHistory はクエリをサポートしていません
...デバッグログで。これは、アカウントの ActivityHistory オブジェクトに 199 を超える関連エントリがある場合にのみ発生する問題のようです。これが原因かどうかを調べるために、サブクエリに LIMIT 199 句と LIMIT 200 句を入れてみました。案の定、199 (またはそれ以下) を使用すると問題なく動作します。200 (またはそれ以上) を使用すると、上記のエラーが発生します。
私のコードは以下です。注意すべきことの 1 つは、クエリが FOR ループ内にあることです。LIMIT 句の高い値に対してエラーが発生する理由について私が持っている理論の 1 つは、おそらく 200 が、FOR ループがクエリを個別のチャンクにバッチ処理しているポイントであるということです。 (個別に実行されているため?) - そして、SalesForce はそれを好まない。
ああ、もう 1 つ: 同じコードが Anonymous Apex エディタで正常に動作するようです (ただし、インライン変数を明示的な値に置き換えるなど、いくつかの変更を加える必要がありました)。anon編集者がそれに完全に満足しているのに、SFDCサーバーが気に入らないのは奇妙です.
とにかく、もう少しトラブルシューティングを行います。誰にも洞察がありますか?
ありがとう!
コード:
// ActivityHistory のアカウント
for (Account a : [ // ActivityHistory を直接クエリすることはできません。別のオブジェクト タイプに対するサブクエリでのみ使用できます。
選択する
ID
、名前
、( 選択する
活動日
,アクティビティの種類
,CRM_Meeting_Type__c
、説明
,CreatedBy.Name
、状態
,WhatId
FROM 活動履歴
WHERE ActivityType IN :included_activity_history_types
//LIMIT 200
)
FROM アカウント WHERE Id = :accountId
]) {
for (ActivityHistory ah : a.ActivityHistories) {
if ( ah.WhatId==null ) { 続行; } // WhatId のないアクティビティの追加をスキップします
if (((string)ah.WhatId).startsWith('001')) { // Account に直接関連付けられた ActivityHistory のみを追加します (上記のクエリは、関連する Oppty のすべての ActivityHistory もプルバックします)
activities.add(新しいActivityWrapper(ah));
}
}
}