Skip to main content
Al crear un elemento de grupo, la casilla Optional element está desmarcada de forma predeterminada; es decir, el elemento es obligatorio. Durante el emparejamiento de FlexiLayout, se genera una hipótesis no nula para un elemento de grupo obligatorio, incluso si se generan hipótesis nulas para todos sus subelementos. Para comprobar las propiedades de los subelementos de una hipótesis de este tipo, llame al código en sus secciones Advanced. Si el elemento de grupo es opcional, puede generarse para él una hipótesis nula (si no hay hipótesis no nulas con una calidad superior a la de una hipótesis nula).

Por qué fallan las llamadas a un elemento de grupo opcional no detectado

Evite seleccionar la casilla Optional element para los elementos de grupo. La razón es que, si el elemento de grupo está marcado como Optional element y no se detecta (su calidad es inferior a la de una hipótesis nula, o se llama a la función Dontfind() para él), cualquier llamada a cualquiera de sus subelementos provocará errores. Esto se debe a que, en un grupo con una hipótesis nula, no se generan hipótesis para los subelementos. Para evitar este error, primero debe comprobar el elemento de grupo. Si la comprobación IsNull devuelve True, no acceda a ninguno de los subelementos.

Cuándo resulta útil un elemento de grupo opcional

Se necesitan un elemento de grupo opcional y su hipótesis nula cuando todo el grupo de campos no está presente en la imagen, de modo que buscarlo no tiene ningún sentido. Puede acelerar la búsqueda de los elementos llamando al método DontFind() para el elemento de grupo.
Aquí, “llamar” significa escribir código en cualquiera de las secciones de la pestaña Advanced o en las propiedades del bloque de la ventana Expression. Si se llama a las propiedades de un elemento de grupo al configurar las restricciones de búsqueda en Relations, la comprobación de IsNull se realiza automáticamente. Puede verlo si hace clic en Code en la pestaña Advanced.

El proyecto de ejemplo GroupSample.fsp

Esto se muestra en el proyecto GroupSample.fsp (carpeta %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Optional Group). En el cuadro de diálogo de Propiedades del elemento de grupo InvoiceRequisiteGroup, está marcada la casilla Optional element. En la pestaña Advanced, la sección relación avanzada de prebúsqueda contiene el siguiente código:
Este código comprueba la presencia del elemento que identifica el tipo de documento. El elemento FormID, creado antes del elemento de grupo InvoiceRequisiteGroup, busca el texto estático con un valor conocido (“ID2015”). Si el valor del identificador del documento coincide con el valor especificado en la sección Texto a buscar, se genera una hipótesis no nula para el elemento FormID. De lo contrario, no se detecta el texto estático FormID y se le indica a FlexiLayout Studio que no busque el elemento de grupo InvoiceRequisiteGroup. En ese caso, se crea una hipótesis nula para el elemento de grupo opcional InvoiceRequisiteGroup. El proyecto contiene un elemento TotalSumHeader que se utiliza para buscar el nombre del campo de suma. El siguiente código se introduce para el elemento en la sección relación avanzada de prebúsqueda:
Este código significa que la búsqueda del nombre se realizará debajo del campo de fecha definido por el elemento InvoiceDateHeader, que, a su vez, es un subelemento del elemento de grupo InvoiceRequisiteGroup.

Reproducir y corregir el error de hipótesis no definida

Ejecute el procedimiento de emparejamiento de FlexiLayout en ambas páginas del batch. En la página 1, el procedimiento se completa correctamente, pero cuando FlexiLayout se aplica a la página 2, FlexiLayout Studio muestra el siguiente mensaje de error:
Esto sucede porque, en la página 2, el valor del identificador del documento es ID 2589. Como este valor es distinto del especificado en las Propiedades del elemento FormID, la función Dontfind() generó una hipótesis nula para el elemento de grupo InvoiceRequisiteGroup. Como resultado, el código intentó llamar a una hipótesis que no existía. El código correcto debe verse así.
Si comentas el código de la sección relación avanzada de prebúsqueda y seleccionas la casilla de verificación situada junto a la restricción de búsqueda similar del elemento TotalSumHeader en la sección Relations, al hacer clic en Code en la pestaña Advanced verás que el código compilado ya contiene la comprobación IsNull.