AppsWH-Programmierrichtlinien: Beispiele

1. ObjectCombobox mit Elementen einer Struktur

 

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
    }
  ...
;