我有一个自定义Apex控制器,我有一个SOQL查询,它获取具有特定状态且属于另一个对象的子对象的所有对象的计数。查询是:
List<SObject> statuses = [SELECT Status__c, COUNT(Id) statusCount FROM Application__c WHERE CERT__c = :certId GROUP BY Status__c];
Status__c是一个领料单。我还有代码来获取Picklist的所有可能值。
我想要做的是,如果状态不包含具有特定Status__c值的任何条目,则添加值为0的值名称。出于某种原因,当我尝试使用Status__c和Count创建新的SObject时,它似乎不喜欢它。有没有办法将自定义SObject添加到列表中?或者,我应该以不同的方式处理这个问题吗?
答案 0 :(得分:0)
我很惊讶您的查询有效。使用GROUP BY
的查询结果为AggregateResult
,我不知道可以将其转换为sObject。也许最初的成功使你在接下来的步骤中失败了......
这样的事情应该指向正确的方向:
Map<String, Integer> results = new Map<String, Integer>();
for(Schema.PicklistEntry pe : Lead.LeadSource.getDescribe().getPicklistValues()){
results.put(pe.getValue(), 0);
}
System.debug('Before: ' + JSON.serializePretty(results));
for(AggregateResult ar : [SELECT LeadSource, COUNT(Id) cnt FROM Lead WHERE LeadSource != null GROUP BY LeadSource]){
results.put((String) ar.get('LeadSource'), (Integer) ar.get('cnt'));
}
System.debug('After: ' + JSON.serializePretty(results));
Before: {
"Some more types" : 0,
"Hi Stackoverflow!" : 0,
"Other" : 0,
"Purchased List" : 0,
"Partner Referral" : 0,
"Phone Inquiry" : 0,
"Web" : 0
}
After: {
"Some more types" : 0,
"Hi Stackoverflow!" : 0,
"Other" : 0,
"Purchased List" : 7,
"Partner Referral" : 4,
"Phone Inquiry" : 4,
"Web" : 7
}