Esta es una técnica que permite crear múltiples registros «hijos» desde un «padre» utilizando tan sólo un paso de guión ‘Establecer campo’ y sin abandonar en ningún momento el contexto «padre». Se atribuye la autoría a Ugo Di Luca.

Previamente a introducir la técnica, vamos a repasar el funcionamiento estándar de ‘Permitir la creación de registros en esta tabla a través de esta relación’.

Tenemos dos tablas «Padre» e «Hijo» entre las que establecemos la siguiente relación:

Como vemos hemos seleccionado la opción ‘Permitir la creación de registros e esta tabla a través de esta relación’. Hay dos métodos para crear registros en «Hijo» desde «Padre».

Método 1

Desde un registro de ‘Padre’, que no tenga aún ningún hijo, ejecutamos un paso de guión que establezca un campo (cualquiera) de la tabla ‘Hijo’ (p.ej. Establecer campo [Hijo::Nombre]). Con este sistema creamos el primer hijo y FileMaker nos garantiza que en Hijo::_kf_PadreID vamos a tener la __kp_PadreID del registro desde el cual se ha ejecutado el paso de guión.

Si estando en el mismo __kp_PadreID ejecutamos otro paso de guión que establezca otro campo cualquiera de la tabla ‘Hijo’ (p.ej. Establecer campo [Hijo::Apellido]), FileMaker establecerá el campo del mismo hijo al que le acaba de establecer el nombre, en lugar de crear uno nuevo.

Es decir, cuando desde una TO_1 (Padre) (Table Ocurrence) establecemos un campo en otra TO_2 (Hijo) relacionada habiendo escogido la opción de permitir la creación de registros en TO_2 (Hijo) a través de la relación, creamos un nuevo registro sólo si no existía ningún registro relacionado. En el caso de que ya hubiera uno o varios registros relacionados, el paso de guión Establecer campo actualizará el campo en el primer registro.

Método 2

La creación de registros con este segundo método necesita de la introducción de un portal de ‘Hijo’ dentro de la presentación ‘Padre’. Accediendo a cualquier campo de Hijo que aparezca en el portal en una fila vacía crearemos un nuevo registro relacionado. Con este método si que es posible crear más de un registro relacionado sin abandonar el contexto actual, pero forzosamente debemos introducir un portal en la presentación «Padre».

¡Magic Key…!

Bien, una vez ya sabemos hacer lo básico, vamos a introducir el sistema Magic Key. Este sistema lo que pretende es superar la limitación del método 1 y hacer posible que se creen tantos hijos como sea necesario simplemente utilizando el paso de guión ‘Establecer campo’, sin la necesidad de cambiar de contexto ni de utilizar un portal.

El sistema se apoya en el hecho de que cuando no hay ningún registro relacionado y establecemos un campo del hijo desde una presentación del padre por medio de un guión, crea un registro y ‘rellena’ el contenido de los campos en ambas tablas que se han utilizado en la relación.

Ugo Di Luca debió plantearse algo así…¿Y si pongo un campo en la tabla padre que me aseguro que está vacío al inicio del guión y con este campo establezco la relación con el hijo…?

La técnica requiere de una nueva relación adicional a la creada anteriormente y es la siguiente:

 

Nuestro gráfico de relaciones quedará del siguiente modo:

Utilizaremos un campo global Padre::zg_MagicKey que al empezar el guión deberemos inicializar para que esté vacío mediante Establecer campo [Padre::zg_MagicKey=»»] . Estableceremos una relación entre el campo anterior y Hijo:: __kp_HijoID (definido este campo con cálculo de autointroducción). Veamos que pasaría si desde una presentación basada en padre ejecutáramos un guión que después de dejar vacío el anterior campo global, tuviera un paso de guión que estableciera un campo en la tabla «Hijo». Tal y como pasaba en el método 1, al no haber ningún registro relacionado, crearía el primero y establecería la relación con lo que Padre::zg_MagicKey ya no estaría en blanco, sino que tendría el valor Hijo::__kp_HijoID. Si el guión tuviera más pasos en los que se establecieran campos de Hijo, estos campos serían los del registro creado, pues no se crean nuevos registros. Al volver a ejecutar el guión de crear hijo, puesto que dejamos en blanco el campo global se creará un segundo registro y así sucesivamente.

¿Y qué pasa si Padre::zg_MagicKey no esté en blanco («»)…?

Hemos visto que si Padre::zg_MagicKey está en blanco y establecemos cualquier campo de la tabla Hijo, crearemos un nuevo registro en la tabla Hijo y Padre::zg_MagicKey pasará a tener el valor del campo con el que está relacionado (Hijo::__kp_HijoID) si éste tiene un valor de autointroducción (si no tiene el valor de autointroducción no funcionaría).
Es importante observar que el sistema anterior es bidireccional. Es decir, si teniendo las cosas tal y como hemos explicado en el párrafo anterior, damos a zg::MagicKey un valor que no existe en el campo Hijo::__kp_HijoID de ningún registro, al establecer algún campo de la tabla Hijo, vamos a crear un nuevo registro en Hijo y en Hijo::__kp_HijoID FileMaker nos va a poner el valor de zg::MagicKey.
En definitiva, una técnica curiosa que aplico con mucha frecuencia para crear múltiples registros en tablas relacionadas si cambiar de contexto.
Feliz FileMaking 🙂