• Gorka Sanz
  • NEWBIE
  • 30 Points
  • Member since 2018

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 5
    Questions
  • 3
    Replies
Hi to all.
I'm new in salesforce. I create a large number of apex classes with their testclasses without problem. But now i have a VF page with its own controller:
Controller
public class QADDatosFACTController {
public String currentRecordId {get;set;}
public String parameterValue {get;set;}
public Account acc{get;set;}
public List<string> QADFACT {get;set;}
public String connQAD {get;set;}
 
    public QADDatosFACTController(ApexPages.StandardController controller) {
        try {
        //recoger el parametro de conexion de QAD
        string vName = 'QAD';
        connQAD =[select ValorTexto__c from Parametros__c where Name = :vName].ValorTexto__c;
        currentRecordId  = ApexPages.CurrentPage().getparameters().get('id');
        acc = [select id ,name, AccountNumber, Type, ID_CLIENTE_QAD__c from Account where id =: currentRecordId ];
        parameterValue = ApexPages.CurrentPage().getparameters().get('nameParam');
        // parseo de ordenes de venta
        httpsIntegracionesCrmDvpClWscrmS.DvpWsCrmPort qad = new httpsIntegracionesCrmDvpClWscrmS.DvpWsCrmPort();
        //httpsIntegracionesCrmDvpClWscrmS.getOvencResponseType resultado = qad.getOvenc ('1693090894a511ad4b8f1119c6a60b59','96792430');
        httpsIntegracionesCrmDvpClWscrmS.getFacVenResponseType resultado = qad.getFacVen (connQAD,acc.ID_CLIENTE_QAD__c);
        string json = resultado.facturas;
        Getfact r = Getfact.parse(json);
        //crear la lista de ordenes de venta
        QADFACT = new List<String> ();
        for(Integer i=1;i<r.facturasRow.size();i++)
        {
           QADFACT.add(r.facturasRow[i].invnbr); 
        }
    }
    catch (Exception e)
        {
            ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.ERROR,'Mensaje sin datos. Posible cliente sin facturas vencidas');
            ApexPages.addMessage(errorMessage);
        }
    }
}

VF Page
<apex:page standardController="Account" extensions="QADDatosFACTController"> 
  <!--All JS Libraries and CSS required for this example-->;
<apex:includeScript value="https://code.jquery.com/jquery-1.11.1.min.js"/>
<apex:includeScript value="https://cdn.datatables.net/1.10.7/js/jquery.dataTables.min.js"/>
<apex:includeScript value="https://www.datatables.net/release-datatables/extensions/FixedColumns/js/dataTables.fixedColumns.js"/>
<apex:stylesheet value="https://cdn.datatables.net/1.10.7/css/jquery.dataTables.css"/>
<apex:stylesheet value="https://www.datatables.net/release-datatables/extensions/FixedColumns/css/dataTables.fixedColumns.css"/>
    <apex:pagemessages />
    <html>
        <body>
            <table id="accTable" class="display" cellspacing="0" width="100%">
                <thead>
                    <th>Factura</th>
                </thead>
                 
                <tbody>
            <!-- Use apex:repeat to render each account record as a row and cell for the table-->
                    <apex:repeat value="{!QADFACT}" var="QAD">
                        <tr>
                            <td>{!QAD}</td>
                        </tr>
                    </apex:repeat>
                </tbody>
            </table>
        </body>
    </html>

This works fine in a sandbox. But i'm not able to create the correct testclass. This is my best effort:
@IsTest
public class testFacturasVencidasController {
 static testMethod void testControladorFactVencidas()
 {//inicio del metodo
    //referencia a la pagina
    test.startTest();
     PageReference pageRef = Page.QAD_Facturas_Vencidas;
    Test.setCurrentPage(pageRef);
     //localizar una cuenta. Usar la que tengo como ejemplo de soap
    list <Account> Cliente =[SELECT Id from Account where LLAVE_CRM__c = '12345678']; 
     //la llamada al controlador
     ApexPages.StandardController sc = new ApexPages.StandardController(Cliente[0]);
     QADDatosFACTController qad = new QADDatosFACTController(sc);
     //List <QADDatosFACTController> lstqad = qad.QADFACT[0];
     List <string> lstqad = qad.QADFACT;
     test.stopTest();
 }

}

What am i doing wrong? I need a bit of help.

Thanks in advance
Hi to all.

I develop a class that search certain Cases and change the owner and another fields.

I debug it and works without problems. But when i create a test class, it doesn't work.

Here is my code:
public class Casos{
    @InvocableMethod
    public static void escalarCasos (){
        datetime dt = system.now();
        date Hoy= system.today();
        //Comprobar si el dia de la semana es sabado o domingo. Si lo es no se escala
        string dia = dt.format('E');
        
        if ((dia!='Sat') && (dia!='Sun')){
            //el dia es escalable
            //como es un dia escalable, ver si es un dia festivo
            integer count= [SELECT COUNT() from FESTIVO__c where Fecha_Festivo__c=:Hoy];
            if (count ==0)
            {
                //no es un dia festivo, por lo que hay que traer los casos
                List<Case> cases = new list<Case>();
                //cases = [SELECT Id, OwnerId, Status, Fecha_Asignacion__c, Type, Nivel_1__c, Nivel_2__c, Nivel_3__c,Nivel_4__c, Nivel_5__c FROM Case WHERE (Status = 'Nuevo' or Status = 'Reanudado') and (Fecha_Asignacion__c !=null)];
                
                cases = [SELECT Id, OwnerId, Status, Fecha_Asignacion__c, Type, Nivel_1__c, Nivel_2__c, Nivel_3__c,Nivel_4__c, Nivel_5__c, Nivel_asignacion__c FROM Case 
                         WHERE (Status = 'Nuevo' or Status = 'Reanudado') and (Fecha_Asignacion__c !=null) and (Nivel_Asignacion__c !=null)
                         and  Fecha_Asignacion__c<:dt - 1];
                count=0;//el contador empieza en cero para las listas
                while (cases.size()>count)
                {
                    //system.debug(cases[count].Fecha_Asignacion__c);
                    string vTipo = cases[count].Type;
                    string vNivel1 = cases[count].Nivel_1__c;
                    string vNivel2 = cases[count].Nivel_2__c;
                    string vNivel3 = cases[count].Nivel_3__c;
                    string vNivel4 = cases[count].Nivel_4__c;
                    string vNivel5 = cases[count].Nivel_5__c;
                    decimal vNivelAsg = cases[count].Nivel_asignacion__c;
                    decimal asig;
                    asig = [Select count() from Asignacion__c where Tipo__c=:vTipo 
                                   and Nivel_1__c=:vNivel1
                                   and Nivel_2__c=:vNivel2 and Nivel_3__c=:vNivel3
                                   and Nivel_4__c=:vNivel4 and Nivel_5__c=:vNivel5
                                   and Nivel_asignacion__c=:vNivelAsg + 1];
                    //system.debug('Conteo Asignacion = ' + asig);
                    if (asig!=0)
                    {
                        //se encontro un nivel
                        string usuario = [select Usuario__c from Asignacion__c
                                         where Tipo__c=:vTipo 
                                   and Nivel_1__c=:vNivel1
                                   and Nivel_2__c=:vNivel2 and Nivel_3__c=:vNivel3
                                   and Nivel_4__c=:vNivel4 and Nivel_5__c=:vNivel5
                                   and Nivel_asignacion__c=:vNivelAsg + 1 limit 1].Usuario__c;
                        //system.debug(usuario);
                        // sacar el identificativo de la funcion de usuario
                        string id_funcion = [Select id, SobjectType, QueueId, Queue.Name from QueueSobject
                                            where Queue.Name=:usuario].QueueId;
                        //aqui hay que hacer update de el ID de owner, el nivel de asignacion y la fecha de asignacion
                        cases[count].Fecha_Asignacion__c=system.now();
                        cases[count].Nivel_Asignacion__c=vNivelAsg + 1;
                        cases[count].OwnerId=id_funcion;
                        cases[count].Es_reanudado__c=true;
                    }
                    count++;
                }
                update cases;

            }
        }
    }
}

and here my test class:
@isTest
private class TestEscalarCasos {
    @isTest static void escalarCasosTest() {
        Casos.escalarCasos();
    }   
}

When i saw the code coverage, always is 31 %, and never go pas the while statment. I'm new in salesforce, what is the problem?

Thanks
Hi.
I have 2 questions. It is possible to have a field in read only until some other field is fill with certain value? And related, it is possible hide or not hide a field with that logic?

Thanks in advance
I'm new in Salesforce.

I create a trigger in Opportunities (very easy...):

trigger ClosedOpportunityTrigger on Opportunity (after insert) {
List<task> carry=New List<task>();
  for(opportunity opp:trigger.new){
  
    task t=new task(
        whatid=opp.id,
        Status = 'Active',
        Subject = 'Seguimiento Automatico',
        ActivityDate = system.today()
     );
    carry.add(t);
  
   }
     insert carry;
}

I Create also a test, very easy and copies:

@isTest
private class TestAccountDeletion {
    @isTest static void TestDeleteAccountWithOneOpportunity() {
        Account acct = new Account(Name='Test Account');
        insert acct;
        test.startTest();
        Opportunity opp = new Opportunity(Name=acct.Name + ' Opportunity',StageName='Prospecting',CloseDate=System.today().addMonths(1),AccountId=acct.Id);
        insert opp;
        test.stopTest();
    }
    
}
Work's fine, without errors and a 100% of code validate.
I create a change set, but i cant validate in production. What is the step missing?

Thanks in advance
Hi.

I'm new in Salesforce.

I create a sandbox and i tried to move my change (some new fields and put that foelds in account page). I create the chage set, y validate it, i implement it and all it's ok.

I review the Account object and my changes are applied. I review the account page and my change are applied. BUT i enter in the application and I don't see my changes!!! What is that I'm doing wrong?

PD - I move from one sandbox to another sandbox

Thanks in advance
Hi to all.

I develop a class that search certain Cases and change the owner and another fields.

I debug it and works without problems. But when i create a test class, it doesn't work.

Here is my code:
public class Casos{
    @InvocableMethod
    public static void escalarCasos (){
        datetime dt = system.now();
        date Hoy= system.today();
        //Comprobar si el dia de la semana es sabado o domingo. Si lo es no se escala
        string dia = dt.format('E');
        
        if ((dia!='Sat') && (dia!='Sun')){
            //el dia es escalable
            //como es un dia escalable, ver si es un dia festivo
            integer count= [SELECT COUNT() from FESTIVO__c where Fecha_Festivo__c=:Hoy];
            if (count ==0)
            {
                //no es un dia festivo, por lo que hay que traer los casos
                List<Case> cases = new list<Case>();
                //cases = [SELECT Id, OwnerId, Status, Fecha_Asignacion__c, Type, Nivel_1__c, Nivel_2__c, Nivel_3__c,Nivel_4__c, Nivel_5__c FROM Case WHERE (Status = 'Nuevo' or Status = 'Reanudado') and (Fecha_Asignacion__c !=null)];
                
                cases = [SELECT Id, OwnerId, Status, Fecha_Asignacion__c, Type, Nivel_1__c, Nivel_2__c, Nivel_3__c,Nivel_4__c, Nivel_5__c, Nivel_asignacion__c FROM Case 
                         WHERE (Status = 'Nuevo' or Status = 'Reanudado') and (Fecha_Asignacion__c !=null) and (Nivel_Asignacion__c !=null)
                         and  Fecha_Asignacion__c<:dt - 1];
                count=0;//el contador empieza en cero para las listas
                while (cases.size()>count)
                {
                    //system.debug(cases[count].Fecha_Asignacion__c);
                    string vTipo = cases[count].Type;
                    string vNivel1 = cases[count].Nivel_1__c;
                    string vNivel2 = cases[count].Nivel_2__c;
                    string vNivel3 = cases[count].Nivel_3__c;
                    string vNivel4 = cases[count].Nivel_4__c;
                    string vNivel5 = cases[count].Nivel_5__c;
                    decimal vNivelAsg = cases[count].Nivel_asignacion__c;
                    decimal asig;
                    asig = [Select count() from Asignacion__c where Tipo__c=:vTipo 
                                   and Nivel_1__c=:vNivel1
                                   and Nivel_2__c=:vNivel2 and Nivel_3__c=:vNivel3
                                   and Nivel_4__c=:vNivel4 and Nivel_5__c=:vNivel5
                                   and Nivel_asignacion__c=:vNivelAsg + 1];
                    //system.debug('Conteo Asignacion = ' + asig);
                    if (asig!=0)
                    {
                        //se encontro un nivel
                        string usuario = [select Usuario__c from Asignacion__c
                                         where Tipo__c=:vTipo 
                                   and Nivel_1__c=:vNivel1
                                   and Nivel_2__c=:vNivel2 and Nivel_3__c=:vNivel3
                                   and Nivel_4__c=:vNivel4 and Nivel_5__c=:vNivel5
                                   and Nivel_asignacion__c=:vNivelAsg + 1 limit 1].Usuario__c;
                        //system.debug(usuario);
                        // sacar el identificativo de la funcion de usuario
                        string id_funcion = [Select id, SobjectType, QueueId, Queue.Name from QueueSobject
                                            where Queue.Name=:usuario].QueueId;
                        //aqui hay que hacer update de el ID de owner, el nivel de asignacion y la fecha de asignacion
                        cases[count].Fecha_Asignacion__c=system.now();
                        cases[count].Nivel_Asignacion__c=vNivelAsg + 1;
                        cases[count].OwnerId=id_funcion;
                        cases[count].Es_reanudado__c=true;
                    }
                    count++;
                }
                update cases;

            }
        }
    }
}

and here my test class:
@isTest
private class TestEscalarCasos {
    @isTest static void escalarCasosTest() {
        Casos.escalarCasos();
    }   
}

When i saw the code coverage, always is 31 %, and never go pas the while statment. I'm new in salesforce, what is the problem?

Thanks
I'm new in Salesforce.

I create a trigger in Opportunities (very easy...):

trigger ClosedOpportunityTrigger on Opportunity (after insert) {
List<task> carry=New List<task>();
  for(opportunity opp:trigger.new){
  
    task t=new task(
        whatid=opp.id,
        Status = 'Active',
        Subject = 'Seguimiento Automatico',
        ActivityDate = system.today()
     );
    carry.add(t);
  
   }
     insert carry;
}

I Create also a test, very easy and copies:

@isTest
private class TestAccountDeletion {
    @isTest static void TestDeleteAccountWithOneOpportunity() {
        Account acct = new Account(Name='Test Account');
        insert acct;
        test.startTest();
        Opportunity opp = new Opportunity(Name=acct.Name + ' Opportunity',StageName='Prospecting',CloseDate=System.today().addMonths(1),AccountId=acct.Id);
        insert opp;
        test.stopTest();
    }
    
}
Work's fine, without errors and a 100% of code validate.
I create a change set, but i cant validate in production. What is the step missing?

Thanks in advance
Hi.

I'm new in Salesforce.

I create a sandbox and i tried to move my change (some new fields and put that foelds in account page). I create the chage set, y validate it, i implement it and all it's ok.

I review the Account object and my changes are applied. I review the account page and my change are applied. BUT i enter in the application and I don't see my changes!!! What is that I'm doing wrong?

PD - I move from one sandbox to another sandbox

Thanks in advance