将自定义SObject添加到Apex控制器中的SObject列表

时间:2017-12-27 02:13:43

标签: salesforce apex soql

我有一个自定义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添加到列表中?或者,我应该以不同的方式处理这个问题吗?

1 个答案:

答案 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
}