AppsWH-Programmierrichtlinien: Beispiele
1. ObjectCombobox
mit Elementen einer Struktur
Beispiel: Selektion eines EK-Bereiches (Struktur "PURCHASING_GROUPS")
Es wird eine ObjectCombobox
angezeigt, gefüllt von Strukturknoten von der ersten Ebene; ein Unterknoten
kann entweder per Selektion in der aufklappbaren Liste oder über einen Knopf
oder per Drag&Drop ausgewählt werden
Widget-Definition:
ObjectCombobox(CX_PURCHASE_ITEM::StructureByID("PURCHASING_GROUPS")~itemClass, ENTIRE,
AUTO_POSITION, ACCEPT_DROP, 90, 20, 311, 150)
[ INITIALIZE: 0 SetSort
"CX_STRUCTURE::mlShortName" SetFormat
ALTERED: ObjectChanged
DROP
:
STRUCTURE_SELECTED: iterate { Dup UpdateObox Select ObjectChanged
break }
]
Flag ENTIRE ist wichtig: es bewirkt, dass nicht nur die
Objekte, die in der aufklappbaren Liste stehen, angezeigt werden (um tiefere
Unterknoten anzeigen zu können). Das Füllen der Liste kann im INITIALIZE-Block
nicht gemacht werden, weil FillWindow-Befehl die gefüllte Liste zurücksetzt.
Selektionsknopf davor:
Button(PurchasingGroupsSelectBtn, 5, 21, 80, 8, T("EK-Bereich", "Purchase group"))
[ SELECT: "PURCHASING_GROUPS" "uniqueID = %s" FindFirst(CX_STRUCTURE) Dup ifnot
{
T("Keine EK-Bereiche definiert", "No purchasing groups defined")
Attention(AbortTXN) cancel
}
Widget(, itemClass) SendMsg(SELECT_STRUCTURE)
]
Makro zum Füllen der aufklappbaren Liste:
Define(InitItemClass)
"PURCHASING_GROUPS" "uniqueID = %s" FindFirst(CX_STRUCTURE) Dup if
{ Get(structures) UpdateObox(, itemClass) }
else Drop
;
Wie oben erwähnt, das Füllen der Liste kann im
INITIALIZE-Block der ObjectCombobox nicht erfolgen und soll extra gemacht
werden.
Aufklappbare Liste füllen:
Define(InitWindowWithoutObject)
...
InitItemClass
;
Define(EditObject)
...
CX_PURCHASE_ITEM Over Inherited if
{
-> purchaseItem
...
purchaseItem FillWindow
InitItemClass
}
...
;