Ü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. 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 |