Anzeige einer Entity selection

Ich befürchte, es ist noch nicht die letzte Stolperstelle:

Ich habe eine Methode:

C_OBJECT($zeList)
$zeList:=ds.Dokumente.all()
DOC_DisplayList ($zeList)

in der DOC_DisplayList öffne ich einen Dialog mit
DIALOG(“Anzeige”;$1) // in $1 ist auch meine Entity selection.

Auf dem Formular ist eine Listbox, DOC_Liste, mit zwei Spalten, Form.name und Form.vorname.

Wie und an welcher Stelle verknüpfe ich die Entity selection mit der Listbox?

Ich hatte jetzt VOR dem Aufruf von DIALOG den Befehl gesetzt

Form.DOC_Liste:=$1 , da wird aber nichts angezeigt,obwohl in $1 5 Entities sind.

Danke

W:

Das sollte zwar so auch gehen, limitiert die Möglichkeiten aber sehr.

Form kann/sollte alle Objekte beinhalten die in dem Formular benötigt werden. Auch die, die dann als Ergebnis zurückgegeben werden sollen.

C_OBJECT($zeList;$form)
$zeList:=ds.Dokumente.all()
$form:=New Object(“Dokumente”;$zeList)
$form.weitereDaten:=.xxxx
DOC_DisplayList ($form)

Im Formular der Listbox als Datenquelle nun Form.Dokumente zuweisen
Dann zwei Spalten. Den Spalten als Datenquelle
this.name
und
this.vorname

Die Listbox hat somit die übergebene Auswahl.
Für jede angezeigte Zeile wird der Zeile die entsprechende Entity bzw Objekt einer Collection übergeben. Auf diese kann per “this” zugegriffen werden.

Form.name kann nicht gehen, weil Form kein Attribut Name enthält, sondern viele…
Man muss angeben welches davon.
ohne die zusätzliche Verwendung von Form.Dokumente wie oben beschrieben, würden Sie der Listbox als Quelle direkt Form zuweisen - und den Spalten This.name und This.vorname

Geht auch, aber Form kann dann eben nur ein einziges Objekt verwenden, das schränkt zu sehr ein.

Ah. Liste klappt.

D.h. das in $1 übergebene Object steht automatisch in der Form. - Notation innerhalb der Formular - Kontextes zur Verfügung?

Ziemlich gut…

Danke

Wolfgang Kunckel

D.h. das in $1 übergebene Object steht automatisch in der Form. - Notation innerhalb der Formular - Kontextes zur Verfügung?

ja, das ist eigentlich der Trick…

Angenommen in Ihrer Liste wollen Sie per Doppelklick den Datensatz Dokumente in einem neuen Fenster anzeigen.
“Früher” hätte Sie dafür einen neuen Prozess genommen.

Jetzt
$form:=Form.ListBoxCurrentSelected // der list box zugewiesene Eigenschaft für aktuell ausgewählte Zeile, ist die Entity, also aktuelles Dokument
Dialog(…;$form;*)

Im damit geöffneten Formular dann Form.Name, Form.Datum, etc gibt Zugriff auf die einzelnen Felder.

Ich persönlich würde das nochmals einpacken, also Form.Dokument.Name, damit ich da auch mehr reinpacken kann.

Der * bei Dialog erlaubt dem Code weiterzuarbeiten. Der Anwender kann also 1, 2 oder 10 Fenster öffnen, alle im gleichen Prozess. Da keine Prozessvariablen belegt werden sondern alles über $form läuft, gibt es keine Kollision.

Anders als früher, ich weiß, wenn man das aber man verstanden hat, öffnet es neue Welten…

Mit Verlaub - das ist ziemlich klasse.

Sag ich doch: 4D macht wieder Spaß!

:smiley:

Wolfgang Kunckel