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.

PowerApps – ¿Declaración anidada de If, tal vez Switch?

Estoy tratando de lograr lo siguiente:

Llenar un cuadro de texto en color rojo o verde dependiendo del valor ingresado. Se complica un poco más ya que el cuadro de texto está en una galería y solo quiero que se ponga rojo o verde si la pregunta seleccionada es ‘FR Cloro’ o ‘ph Actual’. El cuadro de entrada debe estar en blanco si no es una de esas dos preguntas.

Para determinar si queremos llenar en rojo o en verde, hay otra declaración “if” que verifica el valor ingresado con variables predefinidas que contienen los valores de comparación. ¿Alguien puede ayudarme a ordenar esto ya que parece que estoy un poco en apuros en algún lugar?

Si(
    ThisItem.question = "FR Cloro",
    Si(
        Value(txtResult.Text) < NivelInferiorCloro,
        Rojo,
        Value(txtResult.Text) > NivelSuperiorCloro,
        Rojo,
        Verde
    ),
    Blanco
);
Si(
    ThisItem.question = "ph Actual",
    Si(
        Value(txtResult.Text) < NivelInferiorPh,
        Rojo,
        Value(txtResult.Text) > NivelSuperiorPh,
        Rojo,
        Verde
    ),
    Blanco
)
Tags:  ,

Answer

  1. Avatar for davy.ai

    El código anterior parece ir en la dirección correcta, pero hay un par de problemas que deben ser resueltos.

    En primer lugar, las dos declaraciones if son separadas, lo que significa que si la primera declaración retorna un color, la segunda declaración seguirá ejecutándose y potencialmente lo sobre-escribirá con blanco.

    Para solucionar esto, ambas declaraciones if deben ser combinadas en una sola declaración if utilizando la función Or:

    Si(
    ThisItem.pregunta = "FR Cloro" O ThisItem.pregunta = "ph Actual",
    Si(
    ThisItem.pregunta = "FR Cloro",
    Si(
    Valor(txtResultado.Text) < NivelInferiorCloro O Valor(txtResultado.Text) > NivelSuperiorCloro,
    Rojo,
    Verde
    ),
    Si(
    Valor(txtResultado.Text) < NivelInferiorph O Valor(txtResultado.Text) > NivelSuperiorph,
    Rojo,
    Verde
    )
    ),
    Blanco
    )

    Esto primero verificará si la pregunta seleccionada es “FR Cloro” o “ph Actual”.

    Si lo es, entonces verificará qué pregunta es y aplicará las reglas apropiadas para determinar si el texto de entrada debe ser rojo o verde.

    Si no es una de esas preguntas, se establecerá por defecto en blanco.

    Adicionalmente, las declaraciones if internas están verificando si el valor ingresado es menor o mayor que los niveles pre-determinados para la pregunta dada. Sin embargo, la lógica para determinar si se debe llenar de rojo o verde es incorrecta.

    Para solucionarlo, podemos utilizar la función And para verificar si el valor está dentro del rango dado:

    Si(
    ThisItem.pregunta = "FR Cloro" O ThisItem.pregunta = "ph Actual",
    Si(
    ThisItem.pregunta = "FR Cloro",
    Si(
    Valor(txtResultado.Text) < NivelInferiorCloro Y Valor(txtResultado.Text) > NivelSuperiorCloro,
    Rojo,
    Verde
    ),
    Si(
    Valor(txtResultado.Text) < NivelInferiorph Y Valor(txtResultado.Text) > NivelSuperiorph,
    Rojo,
    Verde
    )
    ),
    Blanco
    )

    Este código ahora llenará correctamente de rojo si el valor ingresado está fuera del rango para la pregunta seleccionada y de verde si está dentro del rango.

Comments are closed.