Summary

Wondering what 4D-pointers inside objects are good for? For me pointers inside objects are temporary value to make things easier for the developer. If I need to store pointing-values, I’d use table-/fieldnumbers and or names depending on later usage.

4D erlaubt Pointer in Objekten. Niemand sonst als 4D kann mit diesen Pointern etwas anfangen. Warum also Pointer? Für mich sind Pointer in Objekten praktisch, weil ich auf kommode Weise die Keys, die der Empfänger meines Objektes erwartet, meinen Datenstrukturen zuweisen kann.


Ich benutze Pointer in Objekten, wenn ich den Befehl Selection to JSON verwenden will.

recordsJSON:=Selection to JSON([GEONAMES])
liefert je Datensatz ein Objekt, dessen Keys den Feldnamen entsprechen und die Values den Feldinhalten. Meine Feldnamen sind nicht für jeden Empfänger des Objektes die passenden Keys. Deshalb erzeuge ich zuerst ein Template-Objekt mit den erwarteten Keys und weise diesen die Pointern auf das Feld zu. Das sieht dann so aus:

OB SET($template_O;“name“;->[GEONAMES]GN_Name)
OB SET($template_O;“Latitude“;->[GEONAMES]GN_lat_R)
OB SET($template_O;“Longitude“;->[GEONAMES]GN_long_R)
OB SET($template_O;“country“;->[GEONAMES]GN_countryCode)
OB SET($template_O;“featureClass“;->[GEONAMES]GN_featureClass)

und schließlich nutze ich das Template-Objekt, um das auszuliefernde JSON zu erzeugen:
recordsJSON:=Selection to JSON([GEONAMES];$template_O)

und in diesem Fall, einige Orte in Ungarn zu markieren:

Orte in Ungarn auf Openstreetmap-Karte

Orte in Ungarn auf Openstreetmap-Karte



I use pointers in objects, when I’m going to use the command Selection to JSON.

recordsJSON:=Selection to JSON([GEONAMES])
delivers an object per record. The object-keys are the field names and the object-values are the field-values. My fieldnames are of no meaning for the recipient, I need to use their keys. That’s the reason I use a template-object to generate that JSON from the selection. Looks like this:

OB SET($template_O;“name“;->[GEONAMES]GN_Name)
OB SET($template_O;“Latitude“;->[GEONAMES]GN_lat_R)
OB SET($template_O;“Longitude“;->[GEONAMES]GN_long_R)
OB SET($template_O;“country“;->[GEONAMES]GN_countryCode)
OB SET($template_O;“featureClass“;->[GEONAMES]GN_featureClass)

and finally I use that template-object to generate that JSON which is to be delivered:
recordsJSON:=Selection to JSON([GEONAMES];$template_O)

in this case I’m showing some villages in Hungary:

Orte in Ungarn auf Openstreetmap-Karte

Villages in Hungary on Openstreetmap-map