ActivityHistoryを照会していて、他のオブジェクトに対してSUBQUERYのオブジェクトとしてしか照会できないようです。それは問題ありません。サブクエリでActivityHistoryを使用して、クエリをAccountオブジェクトに対して照会するように変更しました。うまくいくと思った。しかし、テストでは、ActivityHistoryサブクエリが200以上の結果を返したケースが見つかりました。私はこのエラーが発生し始めた: サブクエリとしてActivityHiストーリーを照会するときにSOQLの問題が発生しました。
FATAL_ERROR|System.QueryException: entity type ActivityHistory does not support query
...デバッグログ。これは、AccountがActivityHistoryオブジェクトに199以上の関連エントリを持つ唯一の問題のようです。これが原因であるかどうかを調べるために、サブクエリにLIMIT 199とLIMIT 200節を入れてみました。確かに、私が199(またはそれ以下のもの)を使うとうまくいく。 200(またはこれ以上のもの)を使用すると、上記のエラーが発生します。
マイコードは以下のとおりです。注意すべき点の1つは、クエリがFORループ内にあることです。私がLIMIT節の値が高いためにエラーが発生する理由については、FORループがクエリを別々のチャンクにバッチしている点がおそらく200点です。おそらく2番目のチャンクは 'サブクエリ' (それは別々に実行されているので?) - SalesForceはそれを好きではありません。
ああ、もう1つ:同じコードがAnonymous Apexエディタでうまく動作しているようです(ただし、インライン変数を明示的な値に置き換えていくつかの変更を加える必要がありました)。 anonのエディタが完全に満足しているのは奇妙だが、SFDCサーバーはそれを気に入らない。
とにかく、もう少しトラブルシューティングをするつもりです。誰でも洞察力がありますか?
ありがとう!
コード:
// ActivityHistory's on Account for (Account a : [ // you can't query ActivityHistory directly; only in a subquery against another object type SELECT Id ,Name ,(SELECT ActivityDate ,ActivityType ,CRM_Meeting_Type__c ,Description ,CreatedBy.Name ,Status ,WhatId FROM ActivityHistories WHERE ActivityType IN :included_activity_history_types //LIMIT 200 ) FROM Account WHERE Id = :accountId ]) { for (ActivityHistory ah : a.ActivityHistories) { if (ah.WhatId==null) { continue; } // skip adding activities without a WhatId if (((string)ah.WhatId).startsWith('001')) { // only add ActivityHistory's tied directly to an Account (the query above pulls back all ActivityHistory's on related Oppty's as well) activities.add(new ActivityWrapper(ah)); } } }