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ónDontfind() 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étodoDontFind() 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 proyectoGroupSample.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:
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: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.