Übersicht
In diesem Beispiel möchten wir eine einfache Anwendung erstellen, mit der Bestellanforderungen (BANF) freigegeben werden können (SAP Transaktion ME54N)

Die Schritte dazu sind im Einzelnen:
  1. Automatisches Generieren einer S10 Anwendung auf Basis der Tabelle EBAN

  2. Erweitern der Schnittstelle zum Lesen der Bestellanforderungen,
    so dass nur die zur Kostenstelle des angemeldeten Benutzers angezeigt werden
     
  3. Erweitern der HTML-Tabelle um eine Spalte „Freigeben“, die einen Button pro BANF enthält
    um diese Freizugeben bzw. um die Freigabe wieder zurückzunehmen.
     
  4. Implementieren der ABAP-Methode zum Freigeben einer BANF
1. Schritt: Automatisches Generieren einer S10 Anwendung auf Basis der Tabelle EBAN
Wir starten dazu das Generierungstool (Transaktion /S10/UTIL) und geben die Tabelle EBAN an.

Anschließend wählen wir einige Felder aus, die in der Anwendung angezeigt werden sollen und drücken „Sichern und generieren“:
 

Als Basis haben wir nun eine lauffähige Anwendung, in der Bestellanforderungen aufgelistet werden.

Allerdings sind diese weder einem bestimmten Benutzer zugeordnet (wir verwenden später dazu die Kostenstelle), noch können diese freigegeben werden. Daher werden wir diese Funktionalität in den nächsten Schritten noch hinzufügen.
2. Schritt: Erweitern der Schnittstelle zum Lesen der Bestellanforderungen
Die Kostenstelle kann als Benutzerparameter gespeichert werden. Daher lesen wir diesen Parameter, um ihn später in der Selektion der BANFen zu verwenden:
* select database values and fill table tabeban
  method build_tabeban.

    data: condition type string,
          join      type string,
          search    type string.


    data: para          type tpara-paramid value 'KOS',
          ext_kostl(30) type c,
          user_kostl    type ebkn-kostl.

    get parameter id para field ext_kostl.

    if ext_kostl is initial..
      s10errormessage(  s10localize( 'KOS_MISSING' ) ).
    endif.

    s10userinput( exporting uservalue = conv string( ext_kostl )  
                  changing result = user_kostl ).

Wir benötigen für die SELECT-Anweisung später das interne Format, daher wandeln wir den ermittelten Wert der Kostenstelle mit der S10-Methode s10userinput um.

Die Bedingungen für die Selektion erweitern wir dann um die Abfrage der Kostenstelle:
*   Nur BANF mit zugeordneter Kostenstelle lesen (Tabelle EBKN)
    condition = condition &&
      | and exists ( select  *  from ebkn | &&
      | where banfn = eban~banfn and bnfpo =  eban~bnfpo | &&
      | and kostl = '| && user_kostl && |' ) |.

Zum Lesen der Daten verwenden wir die S10-Methode s10databaseselect, mit der Daten direkt aus der Datenbank in das ABAP-Objekt gelesen werden können:
* read data
    s10databaseselect(
    exporting
      condition = condition
      orderby = 'badat,banfn,statu,matnr,menge,meins,rlwrt,waers,lfdat,txz01,frgzu,frgst'
      changing folder = tabeban ).
3. Schritt: Erweitern der HTML-Tabelle um eine Spalte "Freigeben"
Das Generierungstool hat automatisch die HTML-Seite eban_manager.list.html generiert, die die Liste der Bestellanforderungen anzeigt.

Wir fügen dort eine weitere Spalte "Freigeben" ein, zunächst die Überschrift:
<!-- column headers -->

<!-- ... -->

<!-- Freigeben-->
<div class='colhead' style="width: 120px; float: right;">Freigabe  </div>

Anschließend definieren wir die entsprechende Spalte als HTML-Ausgabefeld.

Das heißt, der HTML-Code für dieses Element wird direkt in einer ABAP-Methode generiert und später vom Browser interpretiert:
<!-- list rows -->
<form class='table' name='tabeban'>

<!-- ... -->

<!-- Freigabe -->
<div class='outputcellhtmldiv' style="width: 120px; float: right;"
     name="button_release_html"></div>

Das Feld wird in der ABAP-Klasse „eban_short“ definiert und eine build-Methode erstellt dort später den HTML-Code, der einen Button anzeigt:
    data: button_release_html type string.

    methods:
      build_button_release_html
        importing
          frgzu               type eban-frgzu
        exporting
          button_release_html type string.

Die Implementierung der Methode:
class eban_short implementation.

  method build_button_release_html.

    if frgzu = 'X'.
      button_release_html = |<button style='background-color:orange;height:20px; width:100px;'| &&  
      | type='button' class='button' onclick='S10Apply("reset_release")'>| &&
       s10localize( 'BANF_DO_RELEASE_RESET' ) && |</button>|.
       
    else.
      button_release_html =  |<button style='background-color:greenyellow; height:20px; |  &&
      | width:100px;' type='button' class='button' onclick='S10Apply("release")'> | &&
        s10localize( 'BANF_DO_RELEASE' ) && |</button>|.
    endif.

  endmethod.

Die Methode prüft den Freigabestatus FRGZU ab, um zu entscheiden, ob ein Button „Freigeben“ oder „Zurücknehmen“ angezeigt werden soll. Ändert sich der Status, wird die build-Methode automatisch neu aufgerufen und die Anzeige bzw. der Button aktualisiert.
4. Schritt: Implementieren der ABAP-Methode zum Freigeben einer BANF
In Schritt 2 wurde im HTML-Code definiert, dass die ABAP-Methode „release“ bzw. „reset_release“ aufgerufen wird, sobald der Benutzer auf den Button drückt.

In der Methode wird die Zeile ermittelt, in der sich dieser Button befindet, um anschließend die Nummer der BANF und die Position an den Funktionsbaustein BAPI_REQUISITION_RELEASE zu übergeben:
  method release.

    data: rownumber type i.
    rownumber = s10contextinfo( )->rownumber.
    read table tabeban index rownumber assigning field-symbol(<c>).

    call function 'BAPI_REQUISITION_RELEASE'
      exporting
        number         = <c>->banfn
        rel_code       = '01'
        item           = <c>->bnfpo
        use_exceptions = 'X'    
      exceptions
        others         = 1.

    if sy-subrc <> 0.
      s10errormessage(
          msgid             =     sy-msgid
          msgno             =     sy-msgno
          par1              =     sy-msgv1
          par2              =     sy-msgv2 ).
    endif.

    call function 'BAPI_TRANSACTION_COMMIT'.

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

    s10infomessage(
      exporting
        text          =    s10localize( 'BANF_RELEASE_DONE' ) ).

  endmethod.
Download
Sie können alle Projektdateien hier herunterladen:
s10_banf_example.zip

Das .ZIP Archiv enthält die HTML-Views sowie eine Textdatei mit dem ABAP Programm "/s10/banf_main". Zum Importieren der HTML-Views können Sie den Report "BSP_UPDATE_MIMEREPOS" verwenden wie in der Dokumentation unter dem Punkt Entwicklungsumgebung" beschrieben.

Bitte passen Sie ggf. noch Nummer des Mandanten in der Datei "user.logon.html" an. Details dazu finden Sie in der Dokumentation unter dem Punkt S10Logon()
 

Komponente: S10 Framework