Funktion Gibt das HTML-Kontextinfo-Objekt zurück
Beispiel mycontextinfo =
s10contextinfo( ).
Aufruf data:
  mycontextinfo type ref to /s10/contextinfo.

mycontextinfo =
  s10contextinfo( ).
Parameter
Name Typ Bedeutung
contextinfo /s10/contextinfo
Aktuelles HTML-Kontextinfo-Objekt
Beschreibung Bei der Ausführung einer ABAP-Methode, die der Benutzer durch eine Aktion in der HTML-Seite ausgelöst hat, kann es erforderlich sein, genauer zu wissen, worauf sich die Aktion bezieht, z.B. auf welche Zeile in einer Tabellenanzeige.

Zu diesem Zweck liefert ein Aufruf von s10contextinfo() ein Objekt zurück, das folgende Informationen über den Ursprung der Aktion in der HTML-Seite enthält:

s10contextinfo( )->fieldname
Das name= Attribut des HTML-Elements, in dem die Aktion ausgelöst wurde, in Kleinbuchstaben.

s10contextinfo( )->fieldvalue
Das aktuelle Wert des HTML-Elements, in dem die Aktion ausgelöst wurde,  in der externen Darstellung, also zum Beispiel eine Kundennummer ohne führende Nullen. Mit der Funktion s10userinput() können Sie sich den Wert in internem Format beschaffen.

s10contextinfo( )->tablename
Der Name der Tabelle, in der die Aktion ausgelöst wurde, in Kleinbuchstaben.

s10contextinfo( )->rownumber
Die Nummer der Tabellenzeile, in der die Aktion ausgelöst wurde.

s10contextinfo( )->elementid
Das id= Attribut des HTML-Elements, in dem die Aktion ausgelöst wurde, oder des nächsten übergeordneten HTML-Elementes mit einer id. Bei Tabellenzellen wird die id dynamisch beim Aufbau der Tabelle in HTML eindeutig pro Zelle gesetzt.

s10contextinfo( )->getvalue()
Die Methode getvalue() stellt s10contextinfo() zur Verfügung, um weitere Werte aus der HTML-Seite abzurufen. Sie können damit genau die Werte abrufen, die in der HTML Seite durch Elemente der Klasse "linkkey" bereitgestellt wurden, z.B.

<span class="output linkkey" name="kunnr" /> </span>

In der HTML-Seite wird dann der aktuelle Wert des Attributs "kunnr" vermerkt und kann später durch s10contextinfo->getvalue( 'kunnr' ) abgerufen werden. Dabei werden alle Elemente mit Klasse "linkkey" berücksichtigt, die in der HTML-Hierarchie auf gleicher Stufe stehen wie das Element, das die Aktion ausgelöst hat. Am besten fügt man die "linkkey" Elemente gleich hinter dem jeweiligen Aktionselement ein.

Die getvalue() Methode liefert die Werte in der externen Darstellung, zum Beispiel wird eine Kundennummer ohne führende Nullen zurückgeliefert. Mit der Methode s10userinput() können Sie sich den Wert in internem Format beschaffen. Oder Sie verwenden s10fromcontextinfo(), was bereits s10contextinfo->getvalue() und s10userinput() kombiniert.

Falls als name= in dem linkkey-Element ein Unterobjekt genannt wird, z.B. name="abc.kunnr", wird der Wert aus dem Atttribut "kunnr" des Objekts "abc" entnommen,  aber unter "kunnr" bereitgestellt, nicht unter "abc.kunnr". Der Grund hierfür ist, daß auch die aufgerufene Methode sich in dem Objekt "abc" befinden kann und der Name Attributname "abc" dort nicht bekannt ist.

Als Beispiel für die Verwendung von s10contextinfo() hier eine Kundenliste, in der man pro Zeile über einen Klick die Kundenadresse anzeigen kann. Unterhalb der Adresse haben wir eine Drucktaste angezeigt, mit dem der Benutzer in einen Änderungsdialog für die Adresse verzweigen kann:

 

Die von der Drucktaste aufgerufene Methode "change_address" benötigt nun die Information, auf welchen Kunden der Liste sich die Aktion bezieht. Deshalb nehmen wir in HTML nach der Definition der Drucktaste die Kundennummer separat mit Klasse "linkkey" auf. Sie wird dort nicht angezeigt, aber der Wert wird automatisch an die aufgerufene Methode übermittelt und kann dort über s10contextinfo() gelesen werden:

HTML
<button type="button" class="button"
    onclick
="S10Apply('change_address')">
      Adresse ändern
</button>

<span class="output linkkey" name="mykna1.kunnr"> </span>

ABAP
method change_address.

* current customer number from HTML contaxt
   s10fromcontextinfo(
        
exporting key 'kunnr'
        
changing result mykna1->kunnr ).

* let the user change the address
    
datamycustomer type ref to /s10/customer.
    
create object mycustomer.
    
mycustomer->address_changemykna1->kunnr ).

endmethod.

 

Damit die geänderte Adresse auch gleich in der Liste angezeigt wird, ist noch etwas mehr zu tun, was an anderer Stelle detailliert erklärt wird. Hier der Vollständigkeit halber aber die gesamte Methode inklusiv Update der Listanzeige:

method change_address.

current customer number from HTML contaxt
   s10fromcontextinfo(
        
exporting key 'kunnr'
        
changing result mykna1->kunnr ).

let the user change the address
    
datamycustomer type ref to /s10/customer.
    
create object mycustomer.
    
mycustomer->address_changemykna1->kunnr ).

read changed address from database
    mykna1
->s10databaseread( ).

* update list display
    
read table tabkna1 
         with
 key table_line->kunnr mykna1->kunnr 
            
assigning field-symbol(<c>).
    <c>
->s10databaseread( ).
    <c>
->s10detailview 'X'.

endmethod.

Damit wird die geänderte Adresse dann gleich angezeigt:

 

Statt der Klasse "linkkey" können wir auch die Nummer der Zeile nutzen, in der der Benutzer geklickt hat. Falls alle benötigten Informationen in der Tabellenzeile zu finden sind, in unserem Fall nur die Kundennummer, ist das sogar etwas einfacher:

 method change_address.

  
datarownumber type i.
  
rownumber s10contextinfo( )->rownumber.
  
read table tabkna1 index rownumber assigning field-symbol(<c>).

let the user change the address
    
datamycustomer type ref to /s10/customer.
    
create object mycustomer.
    
mycustomer->address_change<c>->kunnr ).

read address from database
    mykna1
->kunnr <c>->kunnr.
    mykna1
->s10databaseread( ).

* update list display
    <c>
->s10databaseread( ).
    <c>
->s10detailview 'X'.

  
endmethod.

Das zweimalige Lesen der Adresse, einmal für "mykna1" und einmal für das Objekt <c>,  das der Listzeile entspricht, ist in beiden Varianten der Methode nötig, da sich sowohl in der direkt angezeigten Tabellenzeile als auch in der Detailinformation (nach Klick auf die Listzeile) Adressinformationen angezeigt werden.  Wenn wir zum Beispiel die Zeile

    <c>->s10databaseread( ).

weglassen, würde eine Änderung des Landes nicht in der Liste angezeigt sondern nur in der Detailinfo zur Listzeile.

Komponente S10 Framework