0

i try to upload a package but get an error message. My developpeur is not here so i need help from anybody who could help me

This is the apex class:

global class TOKD_MessagingDevis implements Messaging.InboundEmailHandler {

    global Messaging.InboundEmailResult handleInboundEmail(Messaging.InboundEmail email, Messaging.InboundEnvelope envelope) {

        Id idProcess=null;
        Boolean codeProjetChange;

        Case demandeLocale=null;
        Date dateFinProgrammee = null;

        Messaging.InboundEmailResult result = new Messaging.InboundEmailResult();

        String myPlainText= '';

        /* Le mail envoyé par BaaN est renseigné sur htmlBody */        
        if(email.htmlBody!=null)
            myPlainText = email.htmlBody;
        else if(email.plainTextBody!=null)
            myPlainText = email.plainTextBody;

        List<String> infoMail = myPlainText.split(':');
        String caseNumber='';
        String nameFile=null;
        String dateFinProg = null;
        String codeProjetStr='';
        TOKD_Projet__c projet = new TOKD_Projet__c();

        if (infoMail!=null){
            if(infoMail[0]!=null){
                caseNumber=infoMail[0];
                caseNumber=caseNumber.trim();
            }
            if(infoMail[1]!=null){
                nameFile=infoMail[1];
                nameFile=nameFile.trim();
            }
            if(infoMail[2]!=null){
                if (!infoMail[2].equals('')) {
                    dateFinProg=infoMail[2].trim();
                    System.debug('-------dateFinProg : '+dateFinProg);
                    Integer day = Integer.valueOf(dateFinProg.substring(0,2));
                    Integer month = Integer.valueOf(dateFinProg.substring(3,5));
                    Integer year = Integer.valueOf(dateFinProg.substring(6,10));
                    dateFinProgrammee= date.newInstance(year, month, day);
                }
            }
            // Superieur à 4 car on compte 3 éléments + le postscriptum de la poste en 4ème
            if(infoMail[3]!=null){
                System.debug('@@@@@ CODE PROJET : ' + infoMail[3]);
                codeProjetStr=infoMail[3];
                codeProjetStr=codeProjetStr.trim();

                List<TOKD_Projet__c> listeprojet = [SELECT Id,Direction__c FROM TOKD_Projet__c WHERE Name = :codeProjetStr];

                if (listeprojet.size() != 0 ) {
                    projet = listeprojet.get(0);
                    result.success = true;   
                } else {
                    System.debug('-------Code Projet [' + codeProjetStr + '] Inconnu en base');
                    result.success = false;   
                }
            }
        }

        System.debug('-------caseNumber : '+caseNumber);
        System.debug('-------nameFile : '+nameFile);
        System.debug('-------dateFinProgrammee : '+dateFinProgrammee);
        System.debug('-------codeProjet : '+codeProjetStr);

        //récupération des informations sur la demande locale
        List<Case> listDemandeLocale=[Select Id,Status,CaseNumber,TOKD_Realisation__c,TOKD_Approbation_automatique__c,
                                      TOKD_Utilisateur_approbateur_demande__c,TOKD_DernierDevisId__c,
                                      TOKD_SLA_TypeDemande__c, TOKD_Code_projet_baan__c, TOKD_Date_Fin_Programmee__c, TOKD_Date_realisation_souhaitee__c,Preacceptation_du_devis__c,TOKD_LIN__c,ContactId,TOKD_ATM__c,TOKD_Direction__c,TOKD_ATM__r.Territoire__r.Directeur_territorial__c
                                      from Case where CaseNumber=:caseNumber];

        System.debug('@@@@@12' + listDemandeLocale.get(0));             
        if (listDemandeLocale.size()!=0){
            System.debug('Etape 0A');
            demandeLocale=listDemandeLocale.get(0);
            System.debug('Etape 0B : ' + result.success + ' ' + demandeLocale.CaseNumber);
        }
        System.debug('Etape 1');
        if(demandeLocale!=null && result.success == true){
            System.debug('Etape 2');
            System.debug('####################email = '+email);
            //pièce jointe           
            if (email.binaryAttachments != 
                null && email.binaryAttachments.size() > 0){
                    System.debug('####################PJ = ');
                    for (integer i = 0 ; i < email.binaryAttachments.size() ; i++){
                        //si le nom dans le texte du mail est vide on prend le nom du fichier du mail
                        if (nameFile==null || nameFile==''){
                            nameFile=email.binaryAttachments[i].filename;
                        }

                        Attachment a = new Attachment(ParentId = demandeLocale.Id,
                                                      Name = '#'+nameFile,
                                                      Body = email.binaryAttachments[i].body);
                        insert a;
                        demandeLocale.TOKD_DernierDevisId__c=a.Id;
                    }
                }

            //pièce jointe ajoutée
            result.success = true;

            System.debug('-------demandeLocale.TOKD_Approbation_automatique__c:'+demandeLocale.TOKD_Approbation_automatique__c);

            //avenant 2 suppression de la gestion de la demande automatique, toute les demandes pass par la validation du client           


            //mise à jour last commentaire
            demandeLocale.TOKD_LastCaseCommentBody__c='Aucun commentaire';
            demandeLocale.TOKD_Date_Fin_Programmee__c = dateFinProgrammee;

            //Mantis 30871 : calcul de la date d'engagement 
            if (demandeLocale.Preacceptation_du_devis__c == true) {
                // Mantis 49384: empêcher le passage à Accepté Client suite réception d'un devis sur une demande en cours
                if (demandelocale.status !='En Cours') {
                    demandeLocale.status='Accepté Client';
                }
                demandeLocale.TOKD_DateValidation__c =system.now();          

            } else {
                // Mantis 49384: empêcher le passage à Validé DSEM suite réception d'un devis sur une demande en cours
                if (demandelocale.status !='En Cours') 
                {
                    demandeLocale.status='Validé DSEM';
                }

                // ## CGU - 2016/07/04 : Mise à jour de la date de validation à l'arrvée du devis pour les demandes en approbation automatique et devis manuel
                if (demandeLocale.TOKD_Approbation_automatique__c != 'Manuel'){
                    demandeLocale.TOKD_DateValidation__c = system.now();
                }
            }

            // ## CGU - 2016/12/26 : Calcul de la date d'engagement à réception du devis pour les demandes Territoire
            if(demandeLocale.TOKD_Realisation__c=='Territoire'){
                Case estime = TOKD_Case_Utils.calcule_DateEngagement(demandeLocale, demandeLocale.TOKD_DateValidation__c);
                demandeLocale.TOKD_Date_engagement_estimee__c = estime.TOKD_Date_engagement__c;
                demandeLocale.TOKD_Date_engagement__c = demandeLocale.TOKD_Date_engagement_estimee__c;
            }


            //Mantis 11144 : Changement du code Projet
            if (demandeLocale.TOKD_Code_projet_baan__c != projet.Id) {
                codeProjetChange = true;
                // Sauvegarde de l'ancien Code Projet
                demandeLocale.TOKD_Ancien_Code_Projet__c = demandeLocale.TOKD_Code_projet_baan__c;

                //Affectation du nouveau Code Projet
                demandeLocale.TOKD_Code_projet_baan__c = projet.Id;

                // Mise à jour de la direction
                demandeLocale.TOKD_Direction__c=projet.Direction__c;

            }

            update demandeLocale;

            // MANTIS 32622- ELE - 30/01/2014 - 
            //Gestion des partages sur la demande locale si le code projet à changé
            if (codeProjetChange == true) {
                //Gestion des partages sur la demande locale
                TOKD_Case_Utils.partagerDemandeLocale(demandeLocale, demandeLocale.TOKD_LIN__c == 'true');
            }

            if (demandeLocale.status=='Validé DSEM') {
                //soumission de la demande locale pour validation devis en utilisant le processus d'approbation Demande_locale_Valide_Dsem
                Approval.ProcessSubmitRequest validationDevis = new Approval.ProcessSubmitRequest();
                validationDevis.setComments('Demande d\'approbation sur le devis');
                validationDevis.setProcessDefinitionNameOrId('Demande_locale_Valide_Dsem');
                validationDevis.setObjectId(demandeLocale.id);
                try{
                Approval.ProcessResult validationDevisResult = Approval.process(validationDevis);
                }
                catch(DmlException e){

                }
            }

        }else{
            //pièce jointe non ajoutée
            result.success = false;        
        }

        //pour ne pas envoyer de mail d'erreur 
        result.success = true;


        return result;

    }

    static testMethod void testTOKD_MessagingDevis() {



        // Create a new email, envelope object and Attachment
        Messaging.InboundEmail email = new Messaging.InboundEmail();
        Messaging.InboundEnvelope env = new Messaging.InboundEnvelope();
        Messaging.InboundEmail.BinaryAttachment inAtt = new Messaging.InboundEmail.BinaryAttachment();

        Case sollicitation =new Case();
        sollicitation.Subject ='testsollicitation';
        sollicitation.Status ='Créé';
        insert sollicitation;
        System.debug('###########sollicitation='+sollicitation);
        Case demandeLocale= [select Id, CaseNumber from Case where Id=:sollicitation.Id LIMIT 1];

        email.subject = sollicitation.Id;
        email.plainTextBody=demandeLocale.CaseNumber+':NomFichier.pdf:28/04/2011:NIL000133:';
        System.debug('###########email.plainTextBody='+email.plainTextBody);
        env.fromAddress = '[email protected]';

        // set the body of the attachment
        inAtt.body = blob.valueOf('test2');
        inAtt.fileName = 'my attachment name';
        inAtt.mimeTypeSubType = 'plain/txt';

        email.binaryAttachments = new Messaging.inboundEmail.BinaryAttachment[] {inAtt }; 

            TOKD_MessagingDevis messagingDevis=new TOKD_MessagingDevis();
        messagingDevis.handleInboundEmail(email, env);

    }



}

This is the trigger:

 trigger TOKD_T13_Case_Before_Insert on Case (before insert) {     
 system.debug('Start Trigger insert Case before : '+trigger.new);
 List<TOKD_Type_de_demande__c> listTypeDemande = [select Id, SLA_Unite__c, SLA__c from TOKD_Type_de_demande__c];
 Map<Id, TOKD_Type_de_demande__c> mapTypeDemande = new Map<Id, TOKD_Type_de_demande__c>();
 for (TOKD_Type_de_demande__c typeDemande : listTypeDemande){
 mapTypeDemande.put(typeDemande.Id, typeDemande);     } 
 for (Case caseTraitement : trigger.new)  { 
 integer delai = 0; 
 double boucle = 1;  
 if (caseTraitement != null){
 system.debug('idTypeDemande : '+caseTraitement.TOKD_Type_de_demande__c);
 system.debug('UniteTypeDemande : '+mapTypeDemande.get(caseTraitement.TOKD_Type_de_demande__c).SLA_Unite__c);
 try{ 
    if (mapTypeDemande.get(caseTraitement.TOKD_Type_de_demande__c).SLA_Unite__c == 'J'){
    boucle = mapTypeDemande.get(caseTraitement.TOKD_Type_de_demande__c).SLA__c+1; 
    }  
    else if 
    (mapTypeDemande.get(caseTraitement.TOKD_Type_de_demande__c).SLA_Unite__c == 'H'){  
    delai = Integer.valueOf(mapTypeDemande.get(caseTraitement.TOKD_Type_de_demande__c).SLA__c);
    boucle = 1; 
    } 
    } 
    catch(Exception e)
    { boucle = 1;
    delai = 0;
    }
    } 
    datetime date_realisation_souhaitee = System.now().date();
    for (double i = 0; i < boucle; i++){
    date_realisation_souhaitee = date_realisation_souhaitee.addHours(24);
    if(date_realisation_souhaitee.format('u') == '6' || date_realisation_souhaitee.format('u') == '7'){
    boucle++;
    }
    }
    datetime date_debut_souhaitee = System.now().date();
    for (double i = 0; i < 1; i++){
    date_debut_souhaitee = date_debut_souhaitee.addHours(24);
    if(date_debut_souhaitee.format('u') == '6' || date_debut_souhaitee.format('u') == '7'){
    i--;
    }
    }
    date_realisation_souhaitee = date_realisation_souhaitee.addHours(delai);
    if(date_realisation_souhaitee.format('u') == '7'){
    date_realisation_souhaitee = date_realisation_souhaitee.addHours(24);
    }
    else if 
    (date_realisation_souhaitee.format('u') == '6')
    {date_realisation_souhaitee = date_realisation_souhaitee.addHours(48);
    } system.debug('date_debut_souhaitee : '+date_debut_souhaitee);
    system.debug('date_realisation_souhaitee : '+date_realisation_souhaitee);
    caseTraitement.TOKD_Date_debut_souhaitee__c = date.valueOf(date_debut_souhaitee); 
    caseTraitement.TOKD_Date_realisation_souhaitee__c = date.valueOf(date_realisation_souhaitee); 
    } }

and the error i have:

Class Name: TOKD_MessagingDevis Method Name: testTOKD_MessagingDevis Error Message: System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, TOKD_T13_Case_Before_Insert: execution of BeforeInsert caused by: System.NullPointerException: Attempt to de-reference a null object Trigger.TOKD_T13_Case_Before_Insert: line 18, column 1: [] Stack Trace: Class.TOKD_MessagingDevis.testTOKD_MessagingDevis: line 207, column 1

1 Answer 1

0

Just by looking at your code, looks like line no. 18 in your trigger is:

delai = Integer.valueOf(mapTypeDemande.get(caseTraitement.TOKD_Type_de_demande__c).SLA__c);

and that is where you are getting the below exception.

System.NullPointerException: Attempt to de-reference a null object

By the way of looking this code, seems like mapTypeDemande should have been populated and that it is not. So your issue here is that the object TOKD_Type_de_demande__c in your sandbox where you are running this code is not populated with the expected values. Which in turn causes the map not to be populated and that the code is fetching the SLA__c field from an empty map which is resulting in that exception. Once that is taken care of, your issue should be resolved.

2
  • ok thanks . i've now a new error: invalid id: test.
    – Lise-Marie
    Sep 26, 2018 at 11:50
  • @Lise-Marie unfortunately it will be difficult to "troubleshoot" this code on this forum with new errors coming up. As for the original question, the best I could analyze by looking at the code, was what I provided. Anything other than that should be opened as a new question with exact issues. However in this case, I will recommend its better to reach out internally within your organization because this is something done by a developer and needs re-factoring and fixes as its not working as implemented. No one here would be really able to fix all issues in a code written by someone else.
    – Jayant Das
    Sep 26, 2018 at 13:37

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .