4D v14.3

Get subrecord key

Página Inicial

 
4D v14.3
Get subrecord key

Get subrecord key 


 

Get subrecord key ( idField ) -> Resultado 
Parâmetro Tipo   Descrição
idField  Campo in "Subtable Relation" or "Longint" type field of a former subtable relation
Resultado  Inteiro longo in Internal key of relation

El comando Get subrecord key facilita la migración del código 4D utilizando subtablas convertidas al código estándar de manipulación de tablas.

Recordatorio: a partir de la versión 11 de 4D, no se soportan subtablas. Cuando  se convierte una base antigua, las subtablas existentes se transforman automáticamente en tablas estándar relacionadas con las tablas originales por una relación automática. La subtabla anterior se convierte en la tabla Muchos y la tabla original es la tabla Uno. En la tabla Uno, el campo subtabla anterior se transforma en un campo especial de tipo "Relación subtabla" y en la tabla Muchos, se añade un campo especial, de tipo "Relación subtabla", llamado "id_anadido_por_convertidor".

Esto permite preservar el funcionamiento de bases de datos convertidas, pero le recomendamos que sustituya los mecanismos de subtablas en sus bases por los que se utilizan para las tablas estándar.

El primer paso en este proceso consiste en eliminar las relaciones automáticas especiales, lo que desactiva de forma permanente los mecanismos heredados de subtablas. Después debe volver a escribir el código asociado. El comando Get subrecord key acompaña a esta reescritura, devolviendo el identificador interno utilizado por la relación. Esta identificación interna hace que la relación real innecesaria y a continuación puede trabajar con la selección de la subtabla anterior incluso cuando la relación ya no está presente.

Veamos por ejemplo la siguiente estructura convertida:

En 4D, el siguiente código aún funciona, pero debe actualizarse:

 ALL SUBRECORDS([Empleados]Hijos)
 $total:=Records in subselection([Empleados]Hijos)
 vNombres:=""
 For($i;1;$total)
    vNombre:=vNombres+[Empleados]Hijos'Nombre+" "
    NEXT SUBRECORD([Empleados]Hijos)
 End for

Ahora puede reemplazar este código por:

 QUERY([Empleados_Hijos];[Empleados_Hijos]id_anadido_por_convertidor=Get subrecord key([Empleados]Hijos))
 $total:=Records in selection([Empleados_Hijos])
 vNombres:=""
 For($i;1;$total)
    vNombres:=vNombres+[Empleados_Hijos]Nombre+" "
    NEXT RECORD([Empleados_Hijos])
 End for

Nota: Get subrecord key devuelve 0 si no hay registro actual cargado durante su ejecución.

La segunda parte de código tiene la ventaja de usar comandos estándar de 4D y funciona de la misma manera si la relación está presente o no. Cuando elimina la relación, el comando devuelve simplemente el valor de la llave almacenada en el campo Entero largo.

En el parámetro campoID, el comando acepta un campo de tipo Relación subtabla (si la relación sigue existiendo) o del tipo Entero largo (si la relación se ha eliminado). En todos los demás casos, se genera un error.

Esto le permite escribir el código de transición. Durante la fase final de actualización de la aplicación, puede eliminar las llamadas a este comando.

 
PROPRIEDADES 

Produto: 4D
Tema: Subregistros
Número 1137

 
HISTÓRIA 

Criado por: 4D v12.1

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v12.4)
Manual de linguagem 4D ( 4D v14 R2)
Manual de linguagem 4D ( 4D v13.5)
Manual de linguagem 4D ( 4D v14.3)

Parent of : Get subrecord key ( 4D v14 R3)