Show TOC Anfang des Inhaltsbereichs

Hintergrunddokumentation Eigenschaften von Context-Attributen  Dokument im Navigationsbaum lokalisieren

Für die Performance größerer Web-Dynpro-ABAP-Anwendungen ist die Gestaltung der Contexte von großer Bedeutung. Eine Vielzahl von Context-Knoten und –Attributen hat eine Reduzierung der Performance sowie einen erhöhten Speicherbedarf zur Laufzeit zur Folge. Da eine Reihe von UI-Elemente-Eigenschaften die Bindung an ein Context-Attribut anbieten, kann die Anzahl der Context-Attribute die der UI-Elemente unter Umständen um ein Vielfaches übersteigen.

 

Hinweis Um an dieser Stelle die Implementierung größerer Mengen von Context-Attributen zu verhindern, können alternativ die Eigenschaften genau des Context-Attributs zur Bindung der UI-Elemente-Eigenschaften genutzt werden, an welches die so genannte primäre Eigenschaft des UI-Elements gebunden ist.

 
Primäre Eigenschaften von UI-Elementen

Die Primäre Eigenschaft ist für ein UI-Element von besonderer Wichtigkeit. Andere Eigenschaften des UI-Elements können abhängig sein vom jeweiligen Wert des Context-Attributs, welches an die Primäre Eigenschaft gebunden ist. Die Primäre Eigenschaft ist, sofern für das UI-Element vorhanden, immer die gleiche, beispielsweise für das

      UI-Element InputField  die Eigenschaft value

      UI-Element TextView  die Eigenschaft text

      UI-Element CheckBox  die Eigenschaft checked

 

Es gibt wenige UI-Elemente, die keine Primäre Eigenschaft besitzen, beispielsweise das UI-Element TabStrip.

Das Konzept der Primären Eigenschaften wird auch im Zusammenhang mit der Einbindung von Kurztexten aus dem ABAP Dictionary verwendet. Lesen Sie hierzu das Kapitel Primäre Eigenschaft in der Referenzdokumentation der UI-Elemente.

 

Einige geeignete UI-Elemente-Eigenschaften können nun direkt an das Context-Attribut der zugehörigen Primären Eigenschaft geknüpft werden anstatt an ein separat angelegtes vollwertiges Context-Attribut. Das Web-Dynpro-ABAP-Framework erlaubt eine solche Bindung für die folgenden UI-Elemente-Eigenschaften:

        enabled

        readOnly

        state

        visible

 

Für das Attribut eines Contexts, welches an die Primäre Eigenschaft des UI-Elements gebunden ist, existieren wiederum vier entsprechende Eigenschaften welche programmatisch genutzt werden können. (Die UI-Elemente-Eigenschaften state kann dabei die beiden Zustände required und normal darstellen).

Die Verwendung der Eigenschaften des an die Primäre Eigenschaft eines UI-Elements gebundenen Context-Attributs lässt sich anhand eines Beispiels am besten erläutern:

 

Beispiel In einer Tabellenspalte werden Ankunftszeiten von Flugverbindungen aufgelistet. Der Eintrag für die Ankunftszeit soll änderbar sein solange die Maschine noch nicht gelandet ist, um eventuelle Verspätungen anzeigen zu können. Nach der Landung der Maschine soll der Wert jedoch nicht mehr änderbar sein. Dafür muss die UI-Elemente-Eigenschaft readOnly im Context gebunden werden. Die Eigenschaft value ist die Primäre Eigenschaft des UI-Elements. Der Wert der Eigenschaft readOnly hängt direkt vom Wert des Context-Attributs ab, an welches die Eigenschaft value gebunden ist, da dies die Ankunftszeit für die einzelnen Flüge bereitstellt. 

 

Diese Grafik wird im zugehörigen Text erklärt

Anstatt ein eigenes Context-Attribut anzulegen, dessen Wert direkt abhängt vom jeweiligen Wert des an die Primäre Eigenschaft gebundenen Context-Attributes, können die vier oben genannten UI-Elemente-Eigenschaften direkt an die jeweilige Eigenschaft des an die Primäre Eigenschaft gebundenen Context-Attributs gebunden werden. Für das oben stehende Beispiel bedeutet dies:

 

Beispiel Die Änderbarkeit der einzelnen Tabellenspalten kann zur Laufzeit dadurch gesteuert werden, dass die UI-Elemente-Eigenschaft readOnly an die gleichnamige Attribut-Eigenschaft des Context-Elements ARR_TIME gebunden wird.

 

Auf diese Weise kann die Anzahl der Attribute im Context einer View genau dann drastisch reduzieren, wenn eine oder mehrere der vier oben genannten Eigenschaften in großer Zahl und abhängig vom Wert des jeweiligen „primären Context-Attributs“ verwendet werden.

 

Binden der Context-Attribut-Eigenschaften im View Designer

Die vier ausgezeichneten UI-Elemente-Eigenschaften können in einem Schritt zusammen mit der primären Eigenschaft selbst gebunden werden:

      Durch Anklicken der Binding-Schaltfläche der Eigenschaft ihres ausgewählten UI-Elements  öffnet sich wie gewohnt das Dialogfenster, welches Ihnen den zu dieser View vorhandenen Context mit seinen Elementen zur Bindung anbietet. Wenn es sich bei dieser Eigenschaft um die primäre Eigenschaft des UI-Elements handelt (z.B. der Eigenschaft value eines Eingabefeldes), befindet sich unterhalb der angebotenen Context-Struktur zusätzlich die Schaltfläche Context-Attr. Eigenschaften Bindings.

      Wählen Sie zunächst eines der angebotenen Context-Attribute zur Bindung an die primäre Eigenschaft aus.

      Um nun eine oder mehrere der vier speziellen UI-Element-Eigenschaften entsprechend zu binden, öffnen Sie über die Schaltfläche Context-Attr. Eigenschaften Bindings  ein zweites Dialogfenster.

      In einer Tabelle werden Ihnen die vier Eigenschaften des ausgewählten Context-Attributs zur Bindung an die gleichnamigen Eigenschaften des UI-Elements angeboten.

Achtung In dieser Tabelle kann die UI-Eigenschaft state  beeinflusst werden in dem ein Binding für die Context-Attribut-Eigenschaft required ausgewählt wird. Wird dieses Binding nicht ausgewählt, bleibt der Status des UI-Elements auf dem voreingestellten Wert normal.  

 

Eine zweite Möglichkeit, UI-Elemente-Eigenschaften an entprechende Context-Attribut-Eigenschaften zu binden besteht darin, die Bindung der einzelnen UI-Elemente-Eigenschaften direkt zu editieren.

      Klicken Sie hierzu auf die Binding-Schaltfläche einer der vier UI-Elemente-Eigenschaften enabled, readOnly, state oder visible.

Das Dialogfenster zur Bindung an ein Context-Attribut bietet Ihnen dann über einen Auswahlknopf zwei verschiedene Alternativen der Bindung an:

      Direkt an das ausgewählte Attribut binden:

Wählen Sie ein Context-Attribut zur Bindung für die UI-Elemente-Eigenschaft aus.

      An eine Eigenschaft des ausgewählten Attributs binden:

Wählen Sie zunächst das Context-Attribut aus, an dessen Eigenschaft Sie die UI-Elemente-Eigenschaft binden wollen. Dies ist in der Regel die primäre Eigenschaft des UI-Elements. Wählen Sie im nächsten Schritt die passendeContext-Attribut-Eigenschaft zur Bindung aus.

Das Dialogfenster bietet Ihnen zusätzlich die Möglichkeit an, den Wert des Attributs bzw. der Attribut-Eigenschaft zu invertieren. Dies hat zur Laufzeit zur Folge, dass der jeweils inverse Wert der Attribut-Eigenschaft verwendet wird.

 

Programmatischer Zugriff auf die Eigenschaften von Context-Attributen

Im Interface IF_WD_CONTEXT_ELEMENT ist das Attribut E_PROPERTY definiert. Mit Hilfe der Methode SET_ATTRIBUTE_PROPERTY kann der Wert dieses Attributs dynamisch gesetzt werden.  Die nachfolgende Methode ist der Demo-Anwendung DEMO_CONTEXT_PROP des Pakets SWDP_DEMO entnommen. Die Eigenschaft ReadOnly des UI-Elements ist an die gleichnamige Eigenschaft des Context-Attributs ARRTIME gebunden. Wann immer der Wert der Systemzeit größer ist als der Wert einer Ankunftszeit in der Tabellenspalte, ist dieser Wert nicht mehr änderbar. 

 

METHOD refresh_context .

  DATA: lr_flightnode TYPE REF TO if_wd_context_node,
        lr_elem TYPE REF TO if_wd_context_element,
        l_restrict TYPE wdy_boolean,
        l_arrtime TYPE spfli-arrtime.

* We set the context properties accordingly.


  lr_flightnode = wd_context->get_child_node( wd_this->wdctx_flights ).

  DO.
    lr_elem = lr_flightnode->get_element( sy-index ).
    IF lr_elem IS NOT BOUND.
      EXIT.
    ENDIF.

    lr_elem->get_attribute( EXPORTING name = 'ARRTIME'  IMPORTING  value  = l_arrtime ).

    IF sy-uzeit >= l_arrtime.
      l_restrict = 'X'.
    ELSE.
      l_restrict = space.
    ENDIF.

    CALL METHOD lr_elem->set_attribute_property
      EXPORTING
        attribute_name = 'ARRTIME'
        property       = lr_elem->e_property-read_only
        value          = l_restrict.

 
enddo.

ENDMETHOD.

 

 

Ende des Inhaltsbereichs