4D v16.3

Get subrecord key

Home

 
4D v16.3
Get subrecord key

Get subrecord key 


 

Get subrecord key ( IDFeld ) -> Funktionsergebnis 
Parameter Typ   Beschreibung
IDFeld  Feld in Feld vom Typ "Verknüpfung Untertabelle" oder "Lange Ganzzahl" einer früheren Verknüpfung Untertabelle
Funktionsergebnis  Lange Ganzzahl in Interner Schlüssel der Verknüpfung

Die Funktion Get subrecord key vereinfacht die Migration von 4D Code für konvertierte Untertabellen in Standardcode zum Arbeiten mit Tabellen.

Zur Erinnerung: Ab 4D Version 11 werden Untertabellen nicht mehr unterstützt. Wird eine ältere Datenbank konvertiert, werden alle vorhandenen Untertabellen in Standardtabellen umgewandelt, die mit den Originaltabellen über eine automatische Verknüpfung verbunden sind. Die frühere Untertabelle wird die Viele-Tabelle, die Originaltabelle wird die Eine-Tabelle. In der Eine-Tabelle wird das frühere Untertabellenfeld in ein spezielles Feld vom Typ "Untertabelle Verknüpfung" umgewandelt. Im Viele-Feld wird ein spezielles Feld vom Typ "Untertabelle Verknüpfung" mit Namen “id_added_by_converter” hinzugefügt. 

Auf diese Weise können konvertierte Datenbanken weiter funktionieren. Wir empfehlen jedoch dringend, in Ihren konvertierten Datenbanken alle Funktionalitäten mit Untertabellen durch Funktionalitäten für Standardtabellen zu ersetzen.

Im ersten Schritt löschen Sie die spezifischen automatischen Verknüpfungen, was die von Untertabellen geerbten Mechanismen dauerhaft deaktiviert. Danach müssen Sie den zugeordneten Code umschreiben. Hier unterstützt die Funktion Get subrecord key durch Zurückgeben der internen ID solcher Verknüpfungen. Diese interne ID macht die aktuelle Verknüpfung überflüssig und Sie können dann mit der Auswahl der bisherigen Untertabelle sogar arbeiten, wenn die Verknüpfung nicht mehr existiert.

Werfen wir z.B. einen Blick auf folgende konvertierte Struktur:

In 4D funktioniert der folgende Code noch, er muss aber aktualisiert werden:

 ALL SUBRECORDS([Employees]Children)
 $total:=Records in subselection([Employees]Children)
 vFirstnames:=""
 For($i;1;$total)
    vFirstnames:=vFirstnames+[Employees]Children'FirstName+" "
    NEXT SUBRECORD([Employees]Children)
 End for

Sie können diesen Code ersetzen durch:

 QUERY([Employees_Children];[Employees_Children]id_added_by_converter=Get subrecord key([Employees]Children))
 $total:=Records in selection([Employees_Children])
 vFirstnames:=""
 For($i;1;$total)
    vFirstnames:=vFirstnames+[Employees_Children]FirstName+" "
    NEXT RECORD(Employees_Children)
 End for

Hinweis: Get subrecord key gibt 0 zurück, wenn bei der Ausführung kein aktueller Datensatz geladen wird.

Der zweite Teil des Code hat den Vorteil, dass er standardmäßige 4D Befehle verwendet und auf dieselbe Weise funktioniert, egal ob die Verknüpfung besteht oder nicht. Entfernen Sie die Verknüpfung, gibt die Funktion nur den Schlüsselwert zurück, der im Feld Lange Ganzzahl gespeichert wird.

Im Parameter IDFeld akzeptiert die Funktion entweder ein Feld vom Typ Untertabelle Verknüpfung (wenn die Verknüpfung noch existiert) oder vom Typ Lange Ganzzahl (wenn die Verknüpfung entfernt wurde). In allen anderen Fällen wird ein Fehler erzeugt.

Auf diese Weise können Sie Übergangscode schreiben. Im letzten Stadium der Aktualisierung der Anwendung können Sie die Aufrufe dieser Funktion entfernen.

Ab 4D v14 R3 können Sie dem speziellen Feld "id_added_by_converter" auch selbst einen Wert zuweisen. Dieser Wert wurde in bisherigen Releases nur von 4D verwaltet, und Sie mussten Befehle wie _o_CREATE SUBRECORD verwenden, um neue Datensätze in konvertierten Untertabellen hinzuzufügen.

Mit diesem neuen Feature können Sie Ihre alten Datenbanken mit Untertabellen nach und nach konvertieren: Sie können die spezielle Verknüpfung "Untertabelle Verknüpfung" vorerst beibehalten und verknüpfte Datensätze ändern oder hinzufügen, als ob sie normale Datensätze wären. Sind dann all Ihre Methoden aktualisiert, können Sie diese spezielle Verknüpfung durch eine reguläre Verknüpfung ersetzen, ohne Ihren Code zu verändern.

Sie können beispielsweise schreiben:

 CREATE RECORD([Employees])
 [Employees]LastName:="Jonas"
 CREATE RECORD([Employees_Children])
 [Employees_Children]FirstName:="Natascha"
 [Employees_Children]BirthDate:=!24/12/2013!
 [Employees_Children]id_added_by_converter:=Get subrecord key([Employees]Children)
 SAVE RECORD([Employees_Children])
 SAVE RECORD([Employees]

Dieser Code funktioniert für spezielle und reguläre Verknüpfungen gleichermaßen.

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Untertabellen
Nummer: 1137

This command can be run in preemptive processes

 
GESCHICHTE 

Erstellt: 4D v12.1
Geändert: 4D v14 R3

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)