0

I get this Exception when I call a Map from another method in same class, altough I´ve tried initialising the Map explicitly, cloning the Map, etc. I still get the same error, I´m using the same pattern in over 40 methods in the same class and they worked, but won´t do the same with this one

//This is where I call the Map
public Double cantidadOppEnRiesgo{
    get{
        if(cantidadOppEnRiesgo == null){

            cantidadOppEnRiesgo = 0;
            Set<Id> idSuscripcion = new Set<Id>();

            System.debug('### cantidadOppEnRiesgo :'+cantidadOppEnRiesgo);
            Map<Id, Suscripcion_Detalle__c> temp = mapOppEnRiesgo.clone(); <------- NullPointer
            for(Suscripcion_Detalle__c sd: temp.values()){
                idSuscripcion.add(sd.Suscripcion_Buscar__c);
            }
            System.debug('### cantidadOppEnRiesgo :'+cantidadOppEnRiesgo);

            if(!idSuscripcion.isEmpty()){
                AggregateResult[] ar = [SELECT SUM(Cantidad__c) cantidad FROM Opportunity WHERE Id IN: idSuscripcion];
                cantidadOppEnRiesgo = double.valueOf(ar[0].get('cantidad'));
            }
            System.debug('### cantidadOppEnRiesgo :'+cantidadOppEnRiesgo);
        }

        return cantidadOppEnRiesgo;
    }
    private set;
}

//This is the map
public Map<Id, Suscripcion_Detalle__c> mapOppEnRiesgo{
    get{
        if(mapOppEnRiesgo == null){


            Map<Id, Suscripcion_Detalle__c> mapOppEnRiesgo = new Map<Id, Suscripcion_Detalle__c>();
            Set<Id> idLlamadas = new Set<Id>();
            List<Suscripcion_Detalle__c> riesgosLlamada = new List<Suscripcion_Detalle__c>();
            List<Suscripcion_Detalle__c> riesgosVigencia = new List<Suscripcion_Detalle__c>();
            String fechaInicio = ApexPages.currentPage().getParameters().get('event_start_date_alternate');
            String fechaFin = ApexPages.currentPage().getParameters().get('event_stop_date_alternate');

            String soqlEnRiesgo = 'SELECT Estatus_Circulacion__c, Inicio_Vigencia__c, Final_Vigencia__c, Id__c, Suscripcion_Buscar__c, '+
                                    'Suscripcion_Buscar__r.Folio__c, Suscripcion_Buscar__r.Cliente__c, Suscripcion_Buscar__r.AccountId, Suscripcion_Buscar__r.Paquete_Buscar__c, ' +
                                    'Suscripcion_Buscar__r.Paquete_Buscar__r.Vigencia__c, Suscripcion_Buscar__r.Importe__c, Suscripcion_Buscar__r.Clasificacion__c, '+
                                    'Suscripcion_Buscar__r.Paquete_Buscar__r.Importe__c, Suscripcion_Buscar__r.Cantidad__c, Suscripcion_Buscar__r.Empresa__c ' +
                                'FROM Suscripcion_Detalle__c WHERE SFID__c != null AND Suscripcion_Buscar__r.StageName = \'Cerrada Ganada\' AND Suscripcion_Buscar__r.Total__c > 0 AND Estatus_Circulacion__c != \'C\' ';

            if(!fechaInicio.equals('')){
                soqlEnRiesgo += ' and Final_Vigencia__c >= ' +String.escapeSingleQuotes(fechaInicio)+ ' ';
            }

            if(!fechaFin.equals('')){
                soqlEnRiesgo += ' and Final_Vigencia__c <= ' +String.escapeSingleQuotes(fechaFin)+ ' ';
            }

            if(!empresa.equals('Global')){
                soqlEnRiesgo += 'and Suscripcion_Buscar__r.Empresa__c = ' + '\''+empresa + '\'' +  ' ';
            }

            if((!paquete.equals('Todos')) && (paquete != null && paquete != '')){
                soqlEnRiesgo += 'and Suscripcion_Buscar__r.Paquete__c = ' + '\''+paquete + '\'' +  ' ';
            }

            if(!paqueteDetalle.equals('Todos')&& (paqueteDetalle != null && paqueteDetalle != '')){

                if(paqueteDetalle.equals('m IMPRESO')){
                    soqlEnRiesgo += 'and Producto_Nombre_Formula__c LIKE \'m DIARIO%\' ';   
                }else if(paqueteDetalle.equals('m DIGITAL')){
                    soqlEnRiesgo += 'and Producto_Nombre_Formula__c LIKE \'DIGITAL AL PERIODICO m%\'';
                }else{
                    soqlEnRiesgo += 'and Producto_Nombre_Formula__c = ' + '\''+paqueteDetalle + '\'' + ' ';
                }

            }else{
                soqlEnRiesgo += 'and producto__c IN (\'1\',\'215\',\'325\',\'326\',\'494\',\'585\',\'587\',\'695\',\'720\')';
            }

            riesgosVigencia = database.Query(soqlEnRiesgo);
            System.debug('### riesgosVigencia.size() :' + riesgosVigencia.size());

            for(Opportunity opp: [SELECT Id, Name, (select topico__c, ActivityDate, CreatedDate from tasks) 
                                    FROM Opportunity WHERE Final_Vigencia_Editorial_1__c >: date.valueOf(fechaFin)]){

                for(Task a: opp.getSObjects('tasks')){ 

                    System.debug('### task ' + a);
                    //Si estan dentro del periodo y el topico es Retencion
                    if((a.CreatedDate >= date.valueOf(fechaInicio) && a.CreatedDate <= date.valueOf(fechaFin)) && a.Topico__c == '1 Retención'){
                        idLlamadas.add(opp.Id);
                        break;
                    }
                }
            }

            System.debug('### idLlamadas.size() enRiesgo: ' + idLlamadas.size());
            if(!idLlamadas.isEmpty()){

                System.debug('### empresa: ' + empresa);
                System.debug('### paqueteDetalle: ' + paqueteDetalle);
                //Sin Filtros - Caso 1
                if(empresa.equals('Global') && paqueteDetalle.equals('Todos')){

                    riesgosLlamada = [SELECT Estatus_Circulacion__c, Inicio_Vigencia__c, Final_Vigencia__c, Id__c, Suscripcion_Buscar__c,
                                        Suscripcion_Buscar__r.Folio__c, Suscripcion_Buscar__r.Cliente__c, Suscripcion_Buscar__r.AccountId, Suscripcion_Buscar__r.Paquete_Buscar__c, 
                                        Suscripcion_Buscar__r.Paquete_Buscar__r.Vigencia__c, Suscripcion_Buscar__r.Importe__c, Suscripcion_Buscar__r.Clasificacion__c,
                                        Suscripcion_Buscar__r.Paquete_Buscar__r.Importe__c, Suscripcion_Buscar__r.Cantidad__c, Suscripcion_Buscar__r.Empresa__c
                                        FROM Suscripcion_Detalle__c 
                                        WHERE Suscripcion_Buscar__c IN: idLlamadas AND SFID__c != null AND Suscripcion_Buscar__r.StageName = 'Cerrada Ganada' 
                                        AND Suscripcion_Buscar__r.Total__c > 0];
                }
                //Filtro de Empresa - Caso 2
                else if(!empresa.equals('Global') && paqueteDetalle.equals('Todos')){

                    riesgosLlamada = [SELECT Estatus_Circulacion__c, Inicio_Vigencia__c, Final_Vigencia__c, Id__c, Suscripcion_Buscar__c,
                                        Suscripcion_Buscar__r.Folio__c, Suscripcion_Buscar__r.Cliente__c, Suscripcion_Buscar__r.AccountId, Suscripcion_Buscar__r.Paquete_Buscar__c, 
                                        Suscripcion_Buscar__r.Paquete_Buscar__r.Vigencia__c, Suscripcion_Buscar__r.Importe__c, Suscripcion_Buscar__r.Clasificacion__c,
                                        Suscripcion_Buscar__r.Paquete_Buscar__r.Importe__c, Suscripcion_Buscar__r.Cantidad__c, Suscripcion_Buscar__r.Empresa__c
                                        FROM Suscripcion_Detalle__c 
                                        WHERE Suscripcion_Buscar__c IN: idLlamadas AND SFID__c != null AND Suscripcion_Buscar__r.StageName = 'Cerrada Ganada' 
                                        AND Suscripcion_Buscar__r.Total__c > 0 AND Suscripcion_Buscar__r.Empresa__c =: empresa];
                }
                //Filtro de Producto - Caso 3
                else if(empresa.equals('Global') && !paqueteDetalle.equals('Todos')){

                    //Filtro de Producto = m Impreso - Caso 3.1
                    if(paqueteDetalle.equals('m IMPRESO')){

                        riesgosLlamada = [SELECT Estatus_Circulacion__c, Inicio_Vigencia__c, Final_Vigencia__c, Id__c, Suscripcion_Buscar__c,
                                            Suscripcion_Buscar__r.Folio__c, Suscripcion_Buscar__r.Cliente__c, Suscripcion_Buscar__r.AccountId, Suscripcion_Buscar__r.Paquete_Buscar__c, 
                                            Suscripcion_Buscar__r.Paquete_Buscar__r.Vigencia__c, Suscripcion_Buscar__r.Importe__c, Suscripcion_Buscar__r.Clasificacion__c,
                                            Suscripcion_Buscar__r.Paquete_Buscar__r.Importe__c, Suscripcion_Buscar__r.Cantidad__c, Suscripcion_Buscar__r.Empresa__c
                                            FROM Suscripcion_Detalle__c 
                                            WHERE Suscripcion_Buscar__c IN: idLlamadas AND SFID__c != null AND Suscripcion_Buscar__r.StageName = 'Cerrada Ganada' 
                                            AND Suscripcion_Buscar__r.Total__c > 0 AND Producto_Nombre_Formula__c LIKE 'm DIARIO%'];

                    }
                    //Filtro de Producto = m DIGITAL - Caso 3.2
                    else if(paqueteDetalle.equals('m DIGITAL')){

                        riesgosLlamada = [SELECT Estatus_Circulacion__c, Inicio_Vigencia__c, Final_Vigencia__c, Id__c, Suscripcion_Buscar__c,
                                            Suscripcion_Buscar__r.Folio__c, Suscripcion_Buscar__r.Cliente__c, Suscripcion_Buscar__r.AccountId, Suscripcion_Buscar__r.Paquete_Buscar__c, 
                                            Suscripcion_Buscar__r.Paquete_Buscar__r.Vigencia__c, Suscripcion_Buscar__r.Importe__c, Suscripcion_Buscar__r.Clasificacion__c,
                                            Suscripcion_Buscar__r.Paquete_Buscar__r.Importe__c, Suscripcion_Buscar__r.Cantidad__c, Suscripcion_Buscar__r.Empresa__c
                                            FROM Suscripcion_Detalle__c 
                                            WHERE Suscripcion_Buscar__c IN: idLlamadas AND SFID__c != null AND Suscripcion_Buscar__r.StageName = 'Cerrada Ganada' 
                                            AND Suscripcion_Buscar__r.Total__c > 0 AND Producto_Nombre_Formula__c LIKE 'DIGITAL AL PERIODICO m%'];

                    }
                    //Filtro de Producto especifico - Caso 3.3
                    else{

                        riesgosLlamada = [SELECT Estatus_Circulacion__c, Inicio_Vigencia__c, Final_Vigencia__c, Id__c, Suscripcion_Buscar__c,
                                            Suscripcion_Buscar__r.Folio__c, Suscripcion_Buscar__r.Cliente__c, Suscripcion_Buscar__r.AccountId, Suscripcion_Buscar__r.Paquete_Buscar__c, 
                                            Suscripcion_Buscar__r.Paquete_Buscar__r.Vigencia__c, Suscripcion_Buscar__r.Importe__c, Suscripcion_Buscar__r.Clasificacion__c,
                                            Suscripcion_Buscar__r.Paquete_Buscar__r.Importe__c, Suscripcion_Buscar__r.Cantidad__c, Suscripcion_Buscar__r.Empresa__c
                                            FROM Suscripcion_Detalle__c 
                                            WHERE Suscripcion_Buscar__c IN: idLlamadas AND SFID__c != null AND Suscripcion_Buscar__r.StageName = 'Cerrada Ganada' 
                                            AND Suscripcion_Buscar__r.Total__c > 0 AND Producto_Nombre_Formula__c =: paqueteDetalle];

                    }
                }
                //Filtro de Empresa y Producto - Caso 4
                else if(!empresa.equals('Global') && !paqueteDetalle.equals('Todos')){

                    //Filtro de Empresa y Producto = m Impreso - Caso 4.1
                    if(paqueteDetalle.equals('m IMPRESO')){

                        riesgosLlamada = [SELECT Estatus_Circulacion__c, Inicio_Vigencia__c, Final_Vigencia__c, Id__c, Suscripcion_Buscar__c,
                                            Suscripcion_Buscar__r.Folio__c, Suscripcion_Buscar__r.Cliente__c, Suscripcion_Buscar__r.AccountId, Suscripcion_Buscar__r.Paquete_Buscar__c, 
                                            Suscripcion_Buscar__r.Paquete_Buscar__r.Vigencia__c, Suscripcion_Buscar__r.Importe__c, Suscripcion_Buscar__r.Clasificacion__c,
                                            Suscripcion_Buscar__r.Paquete_Buscar__r.Importe__c, Suscripcion_Buscar__r.Cantidad__c, Suscripcion_Buscar__r.Empresa__c
                                            FROM Suscripcion_Detalle__c 
                                            WHERE Suscripcion_Buscar__c IN: idLlamadas AND SFID__c != null AND Suscripcion_Buscar__r.StageName = 'Cerrada Ganada' 
                                            AND Suscripcion_Buscar__r.Total__c > 0 AND Producto_Nombre_Formula__c LIKE 'm DIARIO%'
                                            AND Suscripcion_Buscar__r.Empresa__c =: empresa];

                    }
                    //Filtro de Empresa y Producto = m DIGITAL - Caso 4.2
                    else if(paqueteDetalle.equals('m DIGITAL')){

                        riesgosLlamada = [SELECT Estatus_Circulacion__c, Inicio_Vigencia__c, Final_Vigencia__c, Id__c, Suscripcion_Buscar__c,
                                            Suscripcion_Buscar__r.Folio__c, Suscripcion_Buscar__r.Cliente__c, Suscripcion_Buscar__r.AccountId, Suscripcion_Buscar__r.Paquete_Buscar__c, 
                                            Suscripcion_Buscar__r.Paquete_Buscar__r.Vigencia__c, Suscripcion_Buscar__r.Importe__c, Suscripcion_Buscar__r.Clasificacion__c,
                                            Suscripcion_Buscar__r.Paquete_Buscar__r.Importe__c, Suscripcion_Buscar__r.Cantidad__c, Suscripcion_Buscar__r.Empresa__c
                                            FROM Suscripcion_Detalle__c 
                                            WHERE Suscripcion_Buscar__c IN: idLlamadas AND SFID__c != null AND Suscripcion_Buscar__r.StageName = 'Cerrada Ganada' 
                                            AND Suscripcion_Buscar__r.Total__c > 0 AND Producto_Nombre_Formula__c LIKE 'DIGITAL AL PERIODICO m%'
                                            AND Suscripcion_Buscar__r.Empresa__c =: empresa];

                    }
                    //Filtro de Producto especifico - Caso 4.3
                    else{

                        riesgosLlamada = [SELECT Estatus_Circulacion__c, Inicio_Vigencia__c, Final_Vigencia__c, Id__c, Suscripcion_Buscar__c,
                                            Suscripcion_Buscar__r.Folio__c, Suscripcion_Buscar__r.Cliente__c, Suscripcion_Buscar__r.AccountId, Suscripcion_Buscar__r.Paquete_Buscar__c, 
                                            Suscripcion_Buscar__r.Paquete_Buscar__r.Vigencia__c, Suscripcion_Buscar__r.Importe__c, Suscripcion_Buscar__r.Clasificacion__c,
                                            Suscripcion_Buscar__r.Paquete_Buscar__r.Importe__c, Suscripcion_Buscar__r.Cantidad__c, Suscripcion_Buscar__r.Empresa__c
                                            FROM Suscripcion_Detalle__c 
                                            WHERE Suscripcion_Buscar__c IN: idLlamadas AND SFID__c != null AND Suscripcion_Buscar__r.StageName = 'Cerrada Ganada' 
                                            AND Suscripcion_Buscar__r.Total__c > 0 AND Producto_Nombre_Formula__c =: paqueteDetalle
                                            AND Suscripcion_Buscar__r.Empresa__c =: empresa];

                    }
                }
            }
            System.debug('### riesgosLlamada.size() :' + riesgosLlamada.size());
            if(!riesgosLlamada.isEmpty()){
                for(Suscripcion_Detalle__c sd: riesgosLLamada){
                    mapOppEnRiesgo.put(sd.id, sd);
                }
            }
            if(!riesgosVigencia.isEmpty()){
                for(Suscripcion_Detalle__c sd: riesgosVigencia){
                    mapOppEnRiesgo.put(sd.id, sd);
                }
            }
            System.debug('### mapOppEnRiesgo: ' + mapOppEnRiesgo.size());
        }

        return mapOppEnRiesgo;
    }
    private set;
}
  • Where does the exception occur in your provided code? – Mark Pond Jan 27 '14 at 23:34
  • First method, this line : Map<Id, Suscripcion_Detalle__c> temp = mapOppEnRiesgo.clone(); <------- NullPointer – Emilio Jan 27 '14 at 23:38
1

Because you create a local variable with the same name inside your get method, that is the variable that is being worked on instead of a class level variable that is being checked in the original condition (which is always remaining null). In fact, because it was created inside the IF statement, it is being worked on completely there, and once you leave the IF statement and do the return, the return no longer even has access to that local variable because it is scoped to that IF condition.

You'll need to remove the left side of:

Map<Id, Suscripcion_Detalle__c> mapOppEnRiesgo = new Map<Id, Suscripcion_Detalle__c>();

...to become...

mapOppEnRiesgo = new Map<Id, Suscripcion_Detalle__c>();

...if you want those changes in the get method persisted to a class level variable.

  • Haha It´s true, I was comparing all methods and I missed that, thank you! – Emilio Jan 28 '14 at 0:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.