8. Okt 2010 

200px-Flag_of_Germany.svg

english readers follow this link

Hierarchische Liste sind beides, ein Objekt zur Gestaltung von Oberflächen und ein Datencontainer. Bis zur V11 konnten wir 255 Zeichen unterbringen und eine lange Ganzzahl als Referenz. Mit der V11 hat 4D den Datencontainer der hierarchischen Liste aufgebohrt. Wozu ist LIST ITEM PARAMETER gut?

Die Handbücher müssen den Befehl beschreiben und sollten warnen, wenn bestimmte Verwendungen Nachteile mit sich bringen. Meist fehlen Hinweise, weshalb der Befehl oder eine Option des Befehls hinzukam.

Verstehen Sie was hiermit gemeint ist?
Eigener Selektor: Sie können auch einen eigenen Text übergeben und ihn mit einem Wert vom Typ Text, Zahl oder Boolean in Selector zuweisen. Dieser Wert wird mit der Zeile in der Liste gespeichert. Über den Befehl GET LIST ITEM PARAMETER können Sie Wert finden.
Auf diese Weise können Sie jede Art von Oberfläche setzen, die hierarchischen Listen zugeordnet ist. Sie können z.B. in einer Liste mit Kundennamen das Alter jeder Person speichern, es jedoch nur anzeigen, wenn der entsprechende Eintrag ausgewählt ist.

Ich bin von LIST ITEM PARAMETER sehr angetan. Ich kann jetzt Extra-Informationen direkt in der hierarchischen Liste unterbringen. D.h. dort wo ich sie brauche und nicht in eigenen Datenstrukturen wie Datensätzen und Arrays.

Sie fragen sich, welche ich Extra-Informationen ich in der hierarchischen Liste unterbringen will? Ein wichtiger Einsatzbereich für hierarchische Listen sind Navigatoren wie die in der DBZ-Komponente. In der Navigator-Liste setze ich den Tabellennamen als listitemtext und die Tabellennummer als listitemref ein. Ein Doppelklick öffnet das Eingabe-Formular der Tabelle. Dazu müßte ich in unsichtbaren ARRAY TEXT(t_Inputform) und ARRAY LONGINT(t_TableNbr) den Namen des Eingabe-Formulare und der Tabellennummer buchführen.

Nach einem Doppelklick suchte ich Find in array(t_TableNbr;$listitemref) und prüfte ob die gefundene Zeilennummer gültig ist. Ist sie gültig setzte ich INPUT FORM (t_Inputform{$foundLine}).

Über LIST ITEM PARAMETER wird die Buchführung einfacher: wird die Liste zusammengestellt wird ein zusätzlicher Parameter eingefügt SET LIST ITEM PARAMETER (list;$itemRef;"inputform";"myNiceMainEditor"). Nach dem Doppelklick entnimmt der umgekehrte Befehl GET LIST ITEM PARAMETER (list;$itemRef;"inputform";$useInputForm) den Parameter aus der Liste. $useInputForm wird "myNiceMainEditor" enthalten, also setze ich INPUT FORM($useInputForm).

Noch ein Bonbon: wird die Liste gesichert werden auch die Parameter gesichert, sowohl in einer Tool Box Liste wie in LIST TO BLOB.

Hurra, das ist eine wichtige Ergänzung der 4D Sprache!

Als mir der Befehl noch neu war, benutzte ich in so:
SET LIST ITEM PARAMETER (list;$itemRef;"inputform";"myNiceMainEditor"). Nur wenige Tage später schrieb ich den Namen des Parameters nicht mehr in den Code, sondern verwendete einen Befehl der Art MySelector_Mngr ("SelectorName_Get";"Inputform") wobei MySelector_Mngr sich ähnlich verhält wie Get localized string.

Dann entdeckte ich, daß der GET LIST ITEM PARAMETER SELECTORNAMES fehlt. Heiliger Bimbam, ich muß über die Selektoren selber buchführen.

hierlistparameter

Ich bin längst davon geheilt, in versteckten Datenstrukturen zusätzliche Informationen zur hierarchischen Liste buchzuführen. Die werde ich in der hierarchischen Liste selber buchführen. Dazu muß ich SET LIST ITEM PARAMETER und GET LIST ITEM PARAMETER in eine eigenen Methode einpacken. Ich werde einen zusätzlichen Parameter einführen und in dessen Wert die Namen der verwendeten Parameter aufheben. Es wurden 150 Zeilen Code incl. der Fehlerbehandlung und defensiver Programmierung.

Jetzt rufe ich HierList_Parameter ("Add";$hl_Sprachen;0;"english";->$interText) um der Liste einen Parameter hinzuzufügen und entnehme einen Parameter über HierList_Parameter ("Get";$hl_Sprachen;0;"english";->$interText).

Zusätzlich gibt mir HierList_Parameter ("ParameterArrays_Get";hl_Files;0;"";->$t_ParamName;->$t_Paramvalue) zwei Arrays zurück, in dem einen den Parameter-Namen und in dem anderen den Parameter-Wert. Dieser Befehl ist besonders praktisch, wenn ich ein XML in einer hierarchischen Liste aufhebe. Dann wird der Attributname eines Elementes zum Selektor und der Attributswert zum Parameterwert.

Wie so oft: fehlt ein Feature in 4D, baue ich es mir selber. Für die investierte Zeit baue ich Extra-Features ein, wie dieses um XML-Attribute zu verwalten.

additionaltext

Ehe ich es vergesse. 4D unterstützt den speziellen Selektor Additional text. Diesen Parameter stellt 4D am rechten Rand des Listeneintrages dar. In Zeiten von Unicode sind viele Symbole und Zeichen verfügbar, die sich hervorragend für Additional text eignen. Wenn nur der Methode-Editor Unicode unterstützte.
Es gibt einen Workaround. Die benötigten Zeichen werden in Xliff untergebracht. Dann kann ich über Get localized string den Parameterwert mit Unicode-zeichen füllen.

Sie möchten den Sourcecode haben? Kein Problem! Überweisen Sie, was es Ihnen wert ist auf mein PayPal-Konto: info@mettre.de. Was ist denn üblich?