Sistema de Gestión de Negocios "Hexa"

Base de datos de conocimiento.

Doc. Ref. 27443
Título: El objeto "Criterio" en Hexa V.9
Autor: Soltec
Última actualización: 03/07/2023


El objeto "Criterio" en Hexa V.9

Existe una clase de objetos en Hexa que permite gestionar criterios SQL de forma más eficaz, de forma que cualquier criterio se puede editar de forma gráfica en un formulario y despuñes ser utilizado como condición SQL en un proceso.

Los objetos de criterios se gestionan en formato JSON a la hora de guardarlos o enviarlos como parámetro a un formulario

Los objetos de criterios están formados por una sucesion de condiciones individuales separadas por "AND" y "OR"

Cada condición individual tiene la siguiente estructura ejemplo:

{"Nombre":"Cliente","Tipo":"Entero","Valor1":"100","Valor2":"199","Inverso":"No"}

Que pasado a SQL supondría:

Cliente >= 100 AND Cliente <= 199

Si el valor de la propiedad fuera "Si", entonces la condición sería la contraria:

Cliente < 100 OR Cliente > 199

Recordar que los tipos de campos en Hexa son: "Entero" (número sin decimales), "Real" (número con decimales), "Contador", "Texto", "Memo" y "Booleano". En el caso de campos tipo texto, se exporesan con sólo el valor1 como el siguiente ejemplo:

{"Nombre":"Estado","Tipo":"Text","Valor1":"Pendiente%","Valor2":"","Inverso":"No"}

Que pasado a SQL supondría:

Estado LIKE 'Pendiente%'

Cada uno de estos objetos se combinan en dos arrays: el interno es una sucesión de condiciones "OR" y el superior, una sucesión de condiciones "AND". Es decir, si tenemos tres criterios individuales crit1, crit2 y crit3, los podríamos combinar como crit1 AND (crit2 OR crit3) de la siguiente forma:

[crit1, [crit2, crit3]]

Por ejemplo, para conseguir la condición:

Cliente=123 AND (Estado='Pendiente' Or Estado='Parcial')

Construiríamos el siguiente objeto (lo ponemos con saltos de línea para que sea más claro):

[
 [
  {"Nombre":"Cliente","Tipo":"Entero","Valor1":"100","Valor2":"199","Inverso":"No"}
 ],
 [
  {"Nombre":"Estado","Tipo":"Text","Valor1":"Pendiente","Valor2":"","Inverso":"No"},
  {"Nombre":"Estado","Tipo":"Text","Valor1":"Parcial","Valor2":"","Inverso":"No"}
 ]
]

Cualquier Hexa-Script en una acción que ejecute un proceso o abra un formulario al que se le deba pasar una condición SQL, puede enviarla en formato SQL o en JSON del objeto "Criterio"

Utilidades y ayudas al tratamiento de objetos "Criterio"

  • El método fpc.JSON2SQL(CondicionSQL) transforma un objeto de criterio serializado en JSON en una condición SQL
  • El método fpc.JSON2Humano(CondicionSQL) transforma un objeto de criterio serializado en JSON en unn texto inteligible humano de la condición.
  • El método fpc.AddCrit(JSONActual, Nombre, Tipo , Valor1 , Valor2 , Inverso) facilita la creación de objetos crit serializados añadiendo al criterio JSONActual un elemento más con los parámetros especificados. Si el nombre del campo es nuevo, lo añade como "AND" y si ya existe, lo añade al existente como "OR"

Ejemplo que incluye los tres métodoc anteriores

Crit = ""
Crit = fpc.AddCrit(Crit, "Cliente", "Entero" , "100" , "199" , "No")
Crit = fpc.AddCrit(Crit, "Estado", "Texto" , "Pendiente" , "" , "No")
Crit = fpc.AddCrit(Crit, "Estado", "Texto" , "Parcial" , "" , "No")
CondSQL = fpc.JSON2SQL(Crit)
Condicion = fpc.JSON2Humano(Crit)

El valor final de Crit será:

[[{"Nombre":"Cliente","Tipo":"Entero","Valor1":"100","Valor2":"199","Inverso":"No"}],[{"Nombre":"Estado","Tipo":"Text","Valor1":"Pendiente","Valor2":"","Inverso":"No"},{"Nombre":"Estado","Tipo":"Text","Valor1":"Parcial","Valor2":"","Inverso":"No"}]]

El valor final de CondSQL será:

((Cliente >= 100 AND Cliente <= 199)) AND ((IsNull (Estado, '') LIKE 'Pendiente') OR (IsNull (Estado, '') LIKE 'Parcial'))

El valor final de Condicion será:

Cliente desde 100 hasta 199
 Estado como 'Pendiente' o  Estado como 'Parcial'

Volver a la búsqueda anterior