|
Funktionsaufrufe aus einem InputScript heraus sind eine schnelle Möglichkeit, zusätzliche Daten aus dem SAP System zu erhalten. Sie können hierfür sowohl Einzelfelder als auch Tabellen verwenden. Bei dynamischen Daten (wie beispielsweise Texten oder einer größeren Anzahl von Objekten) ist die Verwendung von Tabellen die beste Art, Informationen zwischen SAP System und InputScript zu transportieren.
Hier stellen wir Ihnen zwei Beispiele vor. Beide lassen sich gut als Grundlage für Ihre eigenen Entwicklungen verwenden. Im zweiten Beispiel demonstrieren wir auch die Erstellung “dynamischer” Bildelemente.
|
Beispiel 1: Anzeige der Materialbeschreibung in VA03
In der Transaktion VA03 (Kundenauftrag anzeigen) möchten wir dem Anwender die Möglichkeit geben, durch Doppelklick auf die Materialbezeichnung in der Tabelle die ausführliche Materialbeschreibung anzuzeigen.
Die folgende Technik wird angewandt:
GuiXT script “SAPMV45A.E4001.TXT” // Bei Doppelklick // Text anzeigen? (nach Doppelklick) Text (7,84) “&V[VA03_DisplayTextMatnr]: &V[VA03_DisplayTextDesc]” size=40 -border Set V[VA03_DisplayTextMatnr] “” InputScript “VA03_doubleclick.txt” // Cursor in Spalte “Bezeichnung” (intern nr 6)? Set V[VA03_DisplayTextMatnr] “&cell[Alle Positionen,Material,&V[_tabrow]]” // Ersetze “/2″ mit normalem “Enter” endif Function “ZZ_GUIXT_MATERIAL_TEXT” FUNCTION ZZ_GUIXT_MATERIAL_TEXT. DATA: TNAME LIKE THEAD-TDNAME. data: lt_stream type w3_html occurs 10.
Refresh text.
DATA: LT_SSTEXT LIKE TLINE OCCURS 0.
CALL FUNCTION ‘READ_TEXT’ IF SY-SUBRC EQ 0.
CALL FUNCTION ‘CONVERT_ITF_TO_STREAM_TEXT’ LOOP AT lt_stream INTO text. ENDFUNCTION.
|
Beispiel 2: Produkte vorschlagen bei “Kundenauftrag anlegen” (VA01)
In der Transaktion VA01 (Kundenauftrag anlegen) gibt der Anwender eine Nummer für den Auftraggeber ein. Für diesen Auftraggeber schlagen wird dann einige Produkte aus früheren Aufträgen vor. Wir zeigen diese Produkte als Pushbuttons an, und ein einfacher Mausklick auf einen Pushbutton fügt dann automatisch die Materialnummer und Auftragsmenge in den neuen Auftrag ein. Gleichzeitig zeigen wir in 5 Pushbuttons der letzten 5 Aufträge mit dem Bestelldatum an. Ein Mausklick auf diesen Pushbutton springt zur Anzeige des jeweiligen Auftrags.
Nach Ein
Wenn Sie mehr als 5 Produkte anzeigen möchten, dann können Sie einen oder mehrere Pushbuttons hinzufügen. Wenn Sie eine größere Produktanzahl zeigen möchten, dann ist es empfehlenswert, ein HTML Template mit dem Add-on Viewer zu benutzen. Die Technik, die wir Ihnen hier vorstellen, bleibt im Wesentlichen die gleiche, mit dem Unterschied, dass die Produkt-Buttons mit einer html Tabelle gezeigt werden.
Ein Mausklick auf den Produktbutton fügt die Materialnummer und Auftragsmenge ein; ein Mausklick auf den Auftragsbutton zeigt den Auftrag an (unter Verwendung der Transaktion VA03). Wenn das Fenster nicht mehr benötigt wird, kann der Anwender es mit dem roten Pfeil schließen.
Die Skripte (für ein IDES 4.6D System) sind nicht besonders lang, sie stellen allerdings höhere Ansprüche an die GuiXT Programmierung. Es wird hierbei ein dynamischer Index verwendet. Wenn Sie die Beispielskripte anpassen und verändern, dann beachten Sie bitte folgende Einschränkungen, die bei Tabellen Transfers mit der Call Anweisung gelten:
GuiXT Skript “SAPMV45A.E4001.TXT” if V[VA01_KUNNR=&F[Auftraggeber]] and V[VA01_KUNNR] // close box Text (0,1) “Aufträge”
// Index label next_order
if not V[VA01_VBELN&V[i]] Pushbutton (&V[row],1) “@16\QOrder &V[VA01_VBELN&V[i]]@&V[VA01_AUDAT&V[i]]” “/OVA03″ Process=”DisplayOrder.txt” Set V[i] &V[i] + 1 if V[i<6] label end_of_orders
// Index Text (0,17) “Produkte”
label next_material
if not V[VA01_MATNR&V[i]] Pushbutton (&V[row],17) “@40\Q&V[VA01_ARKTX&V[i]]@&V[VA01_MATNR&V[i]]” process=”AddMaterial.txt” size=(1,16) Text (&V[row],34) “&V[VA01_AMOUNT&V[i]] &V[VA01_VRKME&V[i]]”
Set V[i] &V[i] + 1 if V[i<6] label end_of_materials Pushbutton (7,86) “Frühere Aufträge” Process=”GetOrdersMaterials.txt” InputScript “DisplayOrder.txt” Screen sapmv45a.0102 InputScript “AddMaterial.txt” Set V[i] 1
label next_line // empty? Set cell[Alle Positionen,Material,&V[i]] “&U[MATERIAL]“ Set V[i] &V[i] + 1 Function “ZZ_GUIXT_CUSTOMER_ORDERS” FUNCTION ZZ_GUIXT_CUSTOMER_ORDERS.
refresh: orders, materials. select MATNR KWMENG VRKME ARKTX from vbap read table materials with key vbap-matnr. endselect. InputScript “GetOrdersMaterials.txt” // Save customer number // no customer number? Then no action // Reset order and material table Call “ZZ_GUIXT_CUSTOMER_ORDERS” in.KUNNR=”&U[KUNNR]” table.ORDERS=orders table.MATERIALS=materials
// Index label next_order Set V[VA01_AUDAT&V[i]] “&V[Pos](1-4)/&V[Pos](5-6)/&V[Pos](7-8)” Set V[i] &V[i] + 1
if V[i<6] label materials label next_material if not Q[ok] Set V[VA01_MATNR&V[i]] “&V[Pos](1-18)” Set V[i] &V[i] + 1
if V[i<6] |