Aus einem InputScript können Sie mit Call Funktionsbausteine des SAP-Systems aufrufen, insbesondere die "BAPI" Bausteine (Business API), die von SAP zum Lesen und Speichern von Daten vorgesehen sind. Bei den im vorangehenden Tutorial beschriebenen Einbildtransaktionen kann man das Speichern der Daten statt durch Scripting der entsprechenden SAP-Transaktion auch in manchen Fällen über den Aufruf eines BAPI implementieren. Das hat Vor- und Nachteile:
Vorteile
Nachteile
|
GuiXT Maske zur Schnellerfassung einer Störmeldung zum Equipment |
Wir verwenden
die BAPIs
Zusätzlich ist dann bei der Funktion "Prüfen" das direkte Lesen des Equipment-textes aus der Datenbank nötig, der bei der Scripting-Lösung aus der Transaktion IW21 abgegriffen wird.
Das GuiXT Script zum Definieren der Schnellerfassungs-Oberfläche ist identisch mit dem vorangehenden Tutorial. Ebenfalls identisch sind die Plausibilitätsprüfungen für die eingegebenen Werte. Das Abspeichern selbst geschieht dann durch BAPI-Aufrufe:
// -----------------------------------------------------
// IW21 Schnellerfassung (Prüfen/Sichern)
// Datei "iw21_simple_save.txt"
// Lösung über BAPI-Aufrufe
// -----------------------------------------------------
Parameter MODE // C=Check S=Save
// Plausibilitätsprüfungen
// Equipment angegeben?
if not V[iw21_equnr]
SetCursor V[iw21_equnr]
Return "E: Bitte Equipment eingeben" -statusline
endif
// Kurztext angegeben?
if not V[iw21_qmtxt]
SetCursor V[iw21_qmtxt]
Return "E: Bitte Kurztext eingeben" -statusline
endif
// Datum angegeben?
if not V[iw21_ausvn]
SetCursor V[iw21_ausvn]
Return "E: Bitte Datum prüfen" -statusline
endif
// Datumsformat korrekt?
CheckDate "&V[iw21_ausvn]"
if not Q[ok]
SetCursor V[iw21_ausvn]
Return "E: Bitte Datum prüfen" -statusline
endif
// Equipmenttext lesen
Set V[table] "EQKT"
Set V[condition] "EQUNR = @EQUNR AND SPRAS = '&V[_language]' "
Set V[fields] "EQKTX"
Set V[domname1] "EQUNR"
Set V[domvalue1] "&V[iw21_equnr]"
// Tabelle zur Rückgabe der Datenbankwerte
CreateTable V[eqkttab] eqkt
Call "/GUIXT/DBSELECT" cache="transaction" _
export.TABLE="table" _
export.CONDITION="condition" _
export.FIELDS="fields" _
export.DOMNAME1="domname1" _
export.DOMvalue1="domvalue1" _
import.VALUES="eqkttab"
// Equipmenttext übertragen
Set V[iw21_eqktx] "&V[eqkttab.eqkt.1]"
// gefunden? sonst Fehlermeldung
if not V[eqkttab.eqkt.1]
SetCursor V[iw21_equnr]
Return "E: Equipment &V[iw21_equnr] nicht gefunden" -statusline
endif
// Meldungsart
Set V[iw21_qmart] "M2"
// Meldungskopf
CreateStructure V[iw21_notifheader] equipment short_text strmlfndate strmlfntime priority
Set V[iw21_notifheader.equipment] "&V[iw21_equnr]"
Set V[iw21_notifheader.short_text] "&V[iw21_qmtxt]"
Set V[iw21_notifheader.strmlfndate] "&V[iw21_ausvn]"
Set V[iw21_notifheader.strmlfntime] "&V[iw21_auztv]"
Set V[iw21_notifheader.short_text] "&V[iw21_qmtxt]"
Set V[iw21_notifheader.priority] "&V[iw21_priok]"
// Langtext kopieren in BAPI-Format
CreateTable V[bapilongtext] objtype objkey format_col text_line
// Zeilenindex für Langtextzeilen
Set V[k] 1
label copy_text_line
CopyText fromText="iw21_longtext" toString=line line=&V[k]
if q[ok]
Set V[bapilongtext.objtype.&V[k]] "QMEL"
Set V[bapilongtext.format_col.&V[k]] "/"
Set V[bapilongtext.text_line.&V[k]] "&V[line]"
Set V[k] &V[k] + 1
goto copy_text_line
endif
// Strukturen/Tabellen für BAPI-AUfruf mit den benötigten Feldern
CreateStructure V[iw21_notifheader_export] notif_no
CreateStructure V[bapireturn] type message
CreateTable V[bapireturntab] include=V[bapireturn]
Call "BAPI_ALM_NOTIF_CREATE" _
export.NOTIF_TYPE="iw21_qmart" _
export.NOTIFHEADER="iw21_notifheader" _
export.LONGTEXTS="bapilongtext" _
import.NOTIFHEADER_EXPORT="iw21_notifheader_export" _
import.RETURN="bapireturntab"
// Fehlermeldungen aus BAPI?
ReadRow V[bapireturn] table=V[bapireturntab] key="E"
if Q[ok]
Return "E: &V[bapireturn.message]" -statusline
endif
// Meldungsnummer
Set V[qmnum] "&V[iw21_notifheader_export.notif_no]"
// Speichern der Meldung
Call "BAPI_ALM_NOTIF_SAVE" _
export.NUMBER="qmnum" _
import.RETURN="bapireturntab"
// Fehlermeldungen aus BAPI?
ReadRow V[bapireturn] table=V[bapireturntab] key="E"
if Q[ok]
Return "E: &V[bapireturn.message]" -statusline
endif
// nur Prüfen?
if U[MODE=C]
Call "BAPI_TRANSACTION_ROLLBACK"
Return "S: Eingabedaten geprüft" -statusline
endif
Call "BAPI_TRANSACTION_COMMIT"
// Eingabedaten zurücksetzen
Clear V[iw21_*]
Clear text[iw21_longtext]
// Auf Schnellerfassung bleiben
Set V[iw21_simple] "X"
Return "S: Meldung erzeugt: &V[qmnum]" -statusline