我在查詢ActivityHistory,看起來您只能將它作爲SUBQUERY對象的查詢來對其他對象進行查詢。這很好 - 我改變了我的查詢來查詢Account對象,並在子查詢中使用了ActivityHistory。似乎工作正常。但在測試中,我發現ActivityHistory子查詢返回了200多個結果的情況。我開始收到此錯誤: 當查詢ActivityHi作爲子查詢時遇到SOQL問題。
FATAL_ERROR|System.QueryException: entity type ActivityHistory does not support query
...在調試日誌。這似乎只是一個帳戶在ActivityHistory對象中有超過199個相關條目的問題。爲了查看這是否是原因,我嘗試在子查詢中添加LIMIT 199和LIMIT 200子句。果然,當我使用199(或更低)時,它工作正常。使用200(或更高)會導致上述錯誤。
我的代碼如下。有一點要注意的是查詢處於FOR循環中。我有一個理論,爲什麼它會爲LIMIT子句的高值產生錯誤,可能200是FOR循環將查詢分批處理爲單獨塊的時間點 - 也許第二個塊不符合「子查詢」 (因爲它是單獨運行的?) - 並且SalesForce不喜歡那樣。
哦,還有一件事:同樣的代碼似乎在Anonymous Apex編輯器中運行良好(儘管我必須做一些修改 - 用顯式值替換內聯變量)。奇怪的是,匿名編輯對此非常滿意,但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)); } } }