cancel
Showing results for 
Search instead for 
Did you mean: 

I have a Querybuilder that works fine in android but it does nothing in IOS

EYari
Explorer
0 Kudos
148

 i have the following rule as a QueryOption in an ObjectTable:

import EstadoFormTextoACodigo from "./EstadoFormTextoACodigo";
/**
 * Construye un QueryOptions dinámico que filtra eventos según los correos de los participantes y el correo del usuario logueado.
 * @Param {IClientAPI} clientAPI
 */
export default async function FiltradoEventosEvaluador(clientAPI) {
    // Filtro para listar los eventos donde el usuario Logueado es el evaluador
    let pageProxy = clientAPI.getPageProxy();
    let appClientDataFn = pageProxy.getAppClientData();
    let rolSelected = appClientDataFn.rolNomSelected;
    let idPerRolSelected = appClientDataFn.idPerRol;
    let searchEventos = clientAPI.searchString;
    console.log("search eventos",searchEventos)
    if (searchEventos && searchEventos!=""){
        let queryBuilder = clientAPI.dataQueryBuilder();
        queryBuilder.expand('idFlota','idFlota($expand=idFilial)','idFormularioB','idFormularioB($expand=idNotaFinal)','idFormularioB($expand=idTipoFormulario)','eventoUsu','eventoUsu($expand=idPerRol)','eventoUsu($expand=idPerRol($expand=idPersona))','perRol','perRol($expand=idPersona)');
        if(rolSelected == "Evaluador")
            {
                let filterIni = `estadoEvento ne 0 and idEvaluador eq '${idPerRolSelected}'`;
                console.log(filterIni)
                let filterSearch = queryBuilder.filterTerm(`${filterIni} and (contains(tolower(idFlota/idFilial/nombreFilial),tolower('${searchEventos}')) or contains(tolower(idFlota/nombreFlota),tolower('${searchEventos}')) or contains(tolower(idFormularioB/idTipoFormulario/nombreTipoFormulario),tolower('${searchEventos}')) or contains(tolower(idFormularioB/nombreFormulario),tolower('${searchEventos}')) or contains(fechaEvento,'${searchEventos}') or contains(tolower(eventoUsu/idPerRol/idPersona/nombre),tolower('${searchEventos}')) or contains(tolower(eventoUsu/idPerRol/idPersona/apellido),tolower('${searchEventos}')) or contains(estadoEvento,'${EstadoFormTextoACodigo(clientAPI,searchEventos)}') or contains(tolower(idFormularioB/idNotaFinal/nombreNota),tolower('${searchEventos}')))`)
                console.log(filterSearch)
                queryBuilder.filter(filterSearch);
                queryBuilder.orderBy('estadoEvento asc');
                console.log('query Builder', queryBuilder.debugString)
                return queryBuilder;
            }
        else if(rolSelected == "Builder")
        {
                let filterIni = `estadoEvento ne 0`;
                console.log(filterIni)
                let filterSearch = queryBuilder.filterTerm(`${filterIni} and (contains(tolower(idFlota/idFilial/nombreFilial),tolower('${searchEventos}')) or contains(tolower(idFlota/nombreFlota),tolower('${searchEventos}')) or contains(tolower(idFormularioB/idTipoFormulario/nombreTipoFormulario),tolower('${searchEventos}')) or contains(tolower(idFormularioB/nombreFormulario),tolower('${searchEventos}')) or contains(fechaEvento,'${searchEventos}') or contains(tolower(eventoUsu/idPerRol/idPersona/nombre),tolower('${searchEventos}')) or contains(tolower(eventoUsu/idPerRol/idPersona/apellido),tolower('${searchEventos}')) or contains(estadoEvento,'${EstadoFormTextoACodigo(clientAPI,searchEventos)}') or contains(tolower(idFormularioB/idNotaFinal/nombreNota),tolower('${searchEventos}')))`)
                console.log(filterSearch)
                queryBuilder.filter(filterSearch);
                queryBuilder.orderBy('estadoEvento asc');
                console.log('query Builder', queryBuilder.debugString)
                return `$expand=idFlota,idFlota($expand=idFilial),idFormularioB,idFormularioB($expand=idNotaFinal),idFormularioB($expand=idTipoFormulario),eventoUsu,eventoUsu($expand=idPerRol),eventoUsu($expand=idPerRol($expand=idPersona)),perRol,perRol($expand=idPersona)&$filter=estadoEvento ne 0 and (contains(tolower(idFlota/idFilial/nombreFilial),tolower('${searchEventos}')) or contains(tolower(idFlota/nombreFlota),tolower('${searchEventos}')) or contains(tolower(idFormularioB/idTipoFormulario/nombreTipoFormulario),tolower('${searchEventos}')) or contains(tolower(idFormularioB/nombreFormulario),tolower('${searchEventos}')) or contains(fechaEvento,'${searchEventos}') or contains(tolower(eventoUsu/idPerRol/idPersona/nombre),tolower('${searchEventos}')) or contains(tolower(eventoUsu/idPerRol/idPersona/apellido),tolower('${searchEventos}')) or contains(estadoEvento,'${EstadoFormTextoACodigo(clientAPI,searchEventos)}') or contains(tolower(idFormularioB/idNotaFinal/nombreNota),tolower('${searchEventos}')))&$orderby=estadoEvento asc`
            }
    }else{
        if(rolSelected == "Evaluador")
            {
                return `$expand=idFlota,idFlota($expand=idFilial),idFormularioB,idFormularioB($expand=idNotaFinal),idFormularioB($expand=idTipoFormulario),eventoUsu,eventoUsu($expand=idPerRol),eventoUsu($expand=idPerRol($expand=idPersona)),perRol,perRol($expand=idPersona)&$filter=estadoEvento ne 0 and idEvaluador eq '${idPerRolSelected}'&$orderby=estadoEvento asc`;
            }
        else if(rolSelected == "Builder")
            {
                return `$expand=idFlota,idFlota($expand=idFilial),idFormularioB,idFormularioB($expand=idNotaFinal),idFormularioB($expand=idTipoFormulario),eventoUsu,eventoUsu($expand=idPerRol),eventoUsu($expand=idPerRol($expand=idPersona)),perRol,perRol($expand=idPersona)&$filter=estadoEvento ne 0&$orderby=estadoEvento asc`;
            }
    }

    // console.log("------------------- IDPERROL ------------------------");
    // console.log(idPerRolSelected);
    // console.log("------------------- ROLLLLLLLLLLLLL ------------------------");
    // console.log(rolSelected);


    
}

 

 

The lines 15-37 work as a filter when the searchString has a value. In lines 15-26 you can find the original queryBuilder that works on Android and filters all the columns and is not case sensitive, but does nothing on IOS. In line 37 i wrote the whole queryBuilder as a string, this implementation works partially, only on the columns nombreFlota and nombreFormulario and is case sensitive. So i want to ask, is there a way for any of these two implementations to work as intended in IOS? what would i have to change?

Accepted Solutions (0)

Answers (1)

Answers (1)

bill_froelich
Product and Topic Expert
Product and Topic Expert
0 Kudos

I suspect you will need to adjust the filter parameters to properly match with your OData server data types. 

I see you have opened a support ticket for this issue as well.  We will respond further via the ticket.