Customizing von Steuerelementen in Listen

Produktlinien: Expert
Module: Leistung & CRM
Erstellt: 23.02.2016, Änderung: 12.09.2017
Abschnitt ComboBox-Expression für Stern-Zeile eingefügt
Mehr ansehen

Um via Customizing ein vorhandenes Steuerelement in einer Liste zu überschreiben, muss mit Override das entsprechende Steuerelement angesprochen werden:

Es können aber auch neue Steuerelemente erstellt werden, indem das Feld Steuerelement leergelassen und im Feld Steuerelement XML ein neues Steuerelement erzeugt wird. Dies wird zum Beispiel für gewisse Zusatzfelder gebraucht, wo es kein vordefiniertes Steuerelement gibt. Siehe dazu den Abschnitt Zusatzfelder in Listen anzeigen weiter unten.

Breite einer Spalte ändern

Die Code-Spalte des Steuerelements cmbProjekt verbreitern wir auf 150. Dafür wird die Eigenschaft Width der Spalte Code überschrieben:

<ComboBox Override="cmbProjekt">
    <ComboBox.ColumnDefinitions>
       <ColumnDefinition Override="Code" Width="150" />
    </ComboBox.ColumnDefinitions>
</ComboBox>

Wie die einzelnen Spalten der jeweiligen Steuerelemente heissen, finden Sie im Artikel Steuerelemente.

Eine Spalte verschieben

Die Spalte Betreffend stellen wir als zweite Spalte nach der Code-Spalte dar. Dafür setzen wir die Eigenschaft PlaceAfter:

<ComboBox Override="cmbProjekt">
    <ComboBox.ColumnDefinitions>
         <ColumnDefinition Override="Regarding" PlaceAfter="Code" />
    </ComboBox.ColumnDefinitions>
</ComboBox>

Eine neue Spalte hinzufügen

Eine neue Spalte einfügen geht gleich, nur dass wir diesmal kein Override verwenden. Dadurch ist klar, dass es sich um eine neue Spalte handelt. Als Expression geben wir die entsprechende OCL-Expression ein:

<ComboBox Override="cmbProjekt">
    <ComboBox.ColumnDefinitions>
       <ColumnDefinition Width="110" Expression="projektleiter" />
    </ComboBox.ColumnDefinitions>
</ComboBox>

Ohne Angabe von PlaceBefore oder PlaceAfter wird die neue Spalte zu-hinterst angefügt.

Navigations-​Button ein-​/​ausblenden

In der Combobox kann ein Pfeil eingeblendet werden, mit dem man direkt zum ausgewählten Objekt navigieren kann. Dieses wird dann in einem separaten Tab oder Fenster geöffnet.

Dafür muss ShowNavLinkButton auf "True" gestellt werden:

<ComboBox Override="cmbProjekt"
    ShowNavLinkButton="True" />

Möchten Sie einen Pfeil, der standardmässig eingeblendet ist, nicht anzeigen, stellen Sie ShowNavLinkButton auf "False".

Button Referenz entfernen ein-​/​ausblenden

Neu kann in der Combobox ein Löschbutton x eingeblendet werden. Damit kann eine bereits ausgewählte Referenz wieder entfernt werden.

Dafür muss ShowRemoveButton auf "True" gestellt werden:

<ComboBox Override="cmbTaetigkeit"
    ShowRemoveButton="True" />

Achten Sie darauf, dass Sie diesen Button nur dann einblenden, wenn das Löschen der Referenz nicht zu einem ungültigen Eintrag führt.

Möchten Sie einen Button, der standardmässig eingeblendet ist, nicht anzeigen, stellen Sie ShowRemoveButton auf "False".

Zusatzfelder in Listen anzeigen

Für die Anzeige von Auswahl- und Objekt-Zusatzfeldern gibt es das vordefinierte Steuerelement cmbZusatzfeld.

Um Zusatzfelder eines anderen Typs anzuzeigen, geben Sie nicht ein Steuerelement an, sondern erstellen dieses direkt im Feld Steuerelement XML. Als Beispiel blenden wir ein Dateizusatzfeld auf dem Vorschuss ein. Das Zusatzfeld ist wie folgt erfasst:

In den Listeneinstellungen lautet das entsprechende Steuerelement XML

<PathBox Label="Datei" ValueExpression="zusatzfeld('Datei')" SelectType="FileOpen" />

In der Liste wird daraufhin ein Feld angezeigt, wo die Datei ausgewählt werden kann:

Eine Auflistung, welches Steuerelement Sie für welchen Typ verwenden müssen, finden Sie im Abschnitt XML (Customizing) im Artikel über die Zusatzfelder.

Zusatzfeld ComboBox mit Objektwert <> Zeilenobjekt

Ab Vertec 6.1 ist es möglich, die ComboBox an einen Objektwert zu binden, welcher nicht vom Zeilenobjekt stammt.

Zum Beispiel soll in der Listenspalte einer Projektliste die Auswahl von einem Feld in einer verlinkten Zusatzklasse angeboten werden.

  • Expression:
    getlinks('projektstaende')->oclastype(Zusatzklasse1)
    ->orderby(zusatzfelddate('datum'))
    ->last.zusatzfeldint('status')
  • Steuerelement: cmbZusatzfeld
  • Renderer: rndZusatzfeld

ComboBox-​Expression für Stern-​Zeile

Die ListExpression der ComboBox bezieht sich auf das Zeilen-Objekt in der Liste. Im Falle der Hinzufügen Zeile (Zeile mit dem Stern für neue Einträge) gibt es dieses noch nicht. Daher funktioniert die Popup-Liste in der Sternzeile nur, wenn es sich bei der List-Expression um eine global auswertbare Expression handelt.

Einzelne spezifische ComboBoxen wie beispielsweise die ProjectComboBox haben Code implementiert, welcher im Falle der Sternzeile auf den Container und dessen Parent-Eintrag zugreifen kann. Im Falle von customized Listen-Comboboxen geht das via GhostrowListExpression. Diese kommt immer dann zur Anwendung, wenn die ComboBox in einer Sternzeile eingesetzt ist. Der Context für die Auswertung der Expression ist der Container, welcher die Liste enthält.

Nachfolgend das Beispiel einer ComboBox, die in einer Leistungszeile die Projekte des Bearbeiters der Leistung anzeigt, in der Sternzeile (Ghostrow) die des Parent-Bearbeiters des Containers:

<ComboBox ListExpression="bearbeiter.erfprojekte->orderby(code)" 
    GhostrowListExpression="if parentEintrag->oclIsTypeOf(Projektbearbeiter) then
    parentEintrag->oclAsType(Projektbearbeiter).erfprojekte else 
    TimSession.allinstances->first.login.erfprojekte endif->orderby(code)" />