Función FOR

La función del campo FOR evalúa una expresión y asigna un valore resultante TRUE, FALSE o UNKNOWN

Sintaxis

FOR permite escribir una expresión que permite la repetición de un campo de repetición en todas las instancias. Para cada instancia, procesa una expresión booleana y compara los resultados.

Por ejemplo:
FOR ALL Body.Invoice.Purchases."Item"[] AS I (I.Quantity <= 50)
Nota:
  1. Con el predicado cuantificado, la primera cosa a tener en cuenta son los [] al final de la referencia de campo, después de FOR ALL. Los corchetes definen la repetición en todas las apariciones del campo Item.

    En algunos casos esta sintaxis parece innecesario ya que la información puede obtenerse en el contexto, pero esto se hace por motivos de coherencia con otras partes de la sintaxis.

  2. ASclause asocia el nombre I de la referencia de campo a la instancia actual del campo de repetición. Esto es parecido al concepto de clase del repetidor utilizado en algunos lenguajes orientados a objetos, como C++. La expresión entre paréntesis un predicado que se evalúa para cada instancia del campo Item.

Si especifica la palabra clave ALL, la función se repite en todas las instancias del campo Item dentro de Body.Invoice.Purchases y evalúa el predicado I.Quantity <= 50. Si el predicado se evalúa como:
  • TRUE (si el campo está vacío o para todas las instancias de Item) devuelve TRUE.
  • FALSE (para cualquier instancia de Item) devuelve FALSE.
  • Cualquier otra cosa, devuelve UNKNOWN.
Las palabras clave ANY y SOME son equivalentes. Si utiliza alguna de ellas, la función se repite en todas las instancias del campo Item dentro de Body.Invoice.Purchases y evalúa el predicado I.Quantity <= 50. Si el predicado se evalúa como:
  • FALSE (si el campo está vacío o para todas las instancias de Item) devuelve FALSE.
  • TRUE (para cualquier instancia de Item) devuelve TRUE.
  • Cualquier otra cosa, devuelve UNKNOWN.
Para ilustrar mejor lo anterior, los siguientes pasos se basan en el mensaje descrito en el apartado Mensaje de ejemplo. En la siguientes expresión de filtro:
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Title = 'El compañero XML'),
el subpredicado se evalúa como TRUE. No obstante, la siguiente expresión devuelve FALSE:
FOR ANY
Body.Invoice.Purchases."Item"[] AS I (I.Title = 'Elemental C')
debido a que Elemental C no está incluido en esta factura. Si en esta instancia algunos de los artículos de la factura no incluyen un campo de título del libre, el subpredicado devolverá UNKNOWN, y el predicado cuantificado devolverá el valor UNKNOWN.
Tenga mucho cuidado al manejar la posibilidad de que aparezcan valores nulos. Escriba este filtro con una comprobación explícita de la existencia del campo, como se indica a continuación:
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Book IS NOT NULL AND
I.Book.Title = 'Elemental C')
El predicado IS NOT NULL asegura que si un campo Item no contiene un valor FALSE de Book, se devolverá un valore FALSE desde el subpredicado.

Conceptos relacionados
ESQL

Tareas relacionadas
Desarrollo de ESQL
Acceso a varias ocurrencias desconocidas de un elemento

Referencia relacionada
Preferencia de sintaxis
Mensaje de ejemplo