Salesforce 我正在尝试在配额实际金额字段中添加所有商机金额

Salesforce 我正在尝试在配额实际金额字段中添加所有商机金额,salesforce,Salesforce,我需要将配额开始日期和结束日期之间的所有已结束赢得机会的机会中的所有(总和)金额相加 机会应该被关闭 截止日期应在配额的开始和结束日期内 分配给用户,该用户是配额的查找字段,等于 配额所有者 下面是代码 public with sharing class listopponquota { public list<Opportunity> oppList{get;set;} public listopponquota() { String selectedVal ='';

我需要将配额开始日期和结束日期之间的所有已结束赢得机会的机会中的所有(总和)金额相加

  • 机会应该被关闭
  • 截止日期应在配额的开始和结束日期内
  • 分配给用户,该用户是配额的查找字段,等于 配额所有者
  • 下面是代码

    public with sharing class listopponquota {
    
    public list<Opportunity> oppList{get;set;}
    
    public listopponquota()
    {
        String selectedVal ='';
        oppList = new list<Opportunity>();
        oppList();
    }
    
    
    
    
    *public pageReference oppList() {
        Id qId = (Id) ApexPages.currentPage().getParameters().get('id');
        system.debug('Id-->'+qId);    
    
        List<Opportunity> oppList1 = new List<Opportunity>();
    
        oppList1 = [Select Id, Name, CloseDate, StageName,OwnerId,Amount From Opportunity where StageName = 'Closed Won'];
    
        system.debug('quotaList1-->'+quotaList1);
        if(quotaList1.size() > 0){
            for(quota__c q : quotaList1){
    
                map<id,double> amtmap = new map<id,double>();
                for(aggregateresult ag : [SELECT SUM(Amount) sum,Quota__c FROM Opportunity where Quota__c in :quotaList1  and StageName = 'Closed Won' group by Quota__c ]){
                    amtmap.put((ID)ag.get('Quota__c'), double.valueof(ag.get('SUM')));
                    {
    
                        amtmap.put((ID)ag.get('Quota__c'), double.valueof(ag.get('SUM')));
                    }
                    list<Quota__c>Qtalist = new list<Quota__c>();
    
                    for(id iid : QtaIds){
                        Quota__c quot = new Quota__c(id=iid); 
                        if(amtmap.containskey(iid)){
                           q.Actual_Amount__c = amtmap.get(iid);
                        }else{
                             q.Actual_Amount__c = 0;
                        } 
                        Qtalist.add(quot);       
                    } 
                    if(Qtalist.size()>0){
                        update Qtalist;
                        return null;
                    }
                    }
    
    
                }
            }
        }
    }*
    
    public与共享类listopponquota{
    公共列表oppList{get;set;}
    公共列表opponquota()
    {
    字符串selectedVal='';
    oppList=新列表();
    oppList();
    }
    *公共页面引用列表(){
    Id qId=(Id)ApexPages.currentPage().getParameters().get('Id');
    system.debug('Id-->'+qId);
    List oppList1=新列表();
    oppList1=[选择Id、名称、结束日期、阶段名称、所有者Id、来自Opportunity的金额,其中阶段名称='已结束的韩元';
    system.debug('quotaList1-->'+quotaList1);
    如果(quotaList1.size()>0){
    对于(配额q:quotaList1){
    map amtmap=新映射();
    对于(aggregateresult ag:[从Opportunity中选择SUM(Amount)SUM、Quota\u c,其中Quota\u c in:quotaList1和StageName='Closed Won'按配额分组]){
    amtmap.put((ID)ag.get('Quota___c')、double.valueof(ag.get('SUM'));
    {
    amtmap.put((ID)ag.get('Quota___c')、double.valueof(ag.get('SUM'));
    }
    listQtalist=新列表();
    用于(id iid:QtaIds){
    配额c quot=新配额c(id=iid);
    if(amtmap.containskey(iid)){
    q、 实际金额=amtmap.get(iid);
    }否则{
    q、 实际金额=0;
    } 
    qtlist.add(quot);
    } 
    如果(Qtalist.size()>0){
    更新qtlist;
    返回null;
    }
    }
    }
    }
    }
    }*
    
    问题的一部分可能是您没有定义
    quotaList1
    。您可能还应该将该SOQL查询从for循环中拉出来。在进入循环之前抓取所有需要的记录

    对SOQL查询的快速修改:

    [从Opportunity中选择SUM(Amount)SUM、Quota\uu c,其中Quota\uu c in:quotaList1和IsWon=true group and CloseDate>=Quota\uu r.StartDate\uu c和CloseDate