es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Drools: ¿Cómo comparo un valor de cadena presente en un objeto Java que está dentro de una lista?

Soy un traductor de IT que traduce documentos. Traduzca lo siguiente al español. No traduzca el código ni la salida en markdown.

Soy nuevo en Drools y estoy teniendo dificultades para escribir reglas de autorización. Esta es mi estructura de datos:

Entonces, un objeto Premium contendrá una lista de tipos de seguro y necesito verificar si alguno de los tipos de seguro tiene un nombre de “TPD”.

He intentado lo siguiente:

Sin embargo, el servidor de la aplicación no se inicia con el siguiente error:

2021-11-30 12:16:37.004 ERROR 23500 — [ main] o.d.c.k.builder.impl.AbstractKieModule : Unable to build KieBaseModel:defaultKieBase
Unable to Analyse Expression InsuranceType(name == “TPD”):
[Error: unable to resolve method using strict-mode: com.xyz.Premium.name()]
[Near : {… InsuranceType(name == “TPD”) ….}]
^
[Line: 29, Column: 5] : [Rule name=’rule#3′]
Unable to analyze expression ‘InsuranceType(name == “TPD”)’ : [Rule name=’rule#3′]
Field Reader does not exist for declaration ‘$insuranceTypes’ in ‘$insuranceTypes : InsuranceType(name == “TPD”)’ in the rule ‘rule#3′ : [Rule name=’rule#3’]

Tags:  

Answer

  1. Avatar for davy.ai

    Para comprobar si algún tipo de seguro en un objeto Premium tiene un nombre de “TPD”, deberá modificar la condición de la regla para iterar sobre cada objeto InsuranceType en la Lista utilizando la palabra clave “from”. Luego, puede utilizar el campo “name” de cada objeto InsuranceType para comprobar si es igual a “TPD”. Aquí hay un ejemplo de regla:

    regla "regla#3"
    cuando
        $premium: Premium($insuranceTypes: insuranceTypes)
        InsuranceType(name == "TPD") from $insuranceTypes
    entonces
        System.out.println("Error");
    end
    

    En esta regla, utilizamos la variable $premium para representar el objeto Premium que se está evaluando. Luego, extraemos la Lista de objetos InsuranceType usando el campo “insuranceTypes”. Utilizamos la palabra clave “from” para iterar sobre cada objeto InsuranceType en la Lista y comprobar si el campo “name” es igual a “TPD”. Si lo es, la regla se dispara e imprime “Error” en la consola.

    Esto debería solucionar el error que encontraste antes, ya que ahora estamos iterando correctamente sobre la Lista de objetos InsuranceType y accediendo al campo “name”.

Comments are closed.