// Receive company codes from SAP and generate drop-down list function DoAcceptOptions() { var f = document.getElementById(‘cc’); var optlist = f.options; var opt = document.getElementById(‘optionstring’); var s = new Array(); s = opt.value.split(“~~~”); for (var i = 0; i<s.length-1; i +=2) { optlist[optlist.length] = new Option(s[i+1], s[i]); }; }; // Send changed value to SAP screen function cc_select(f) { if (f && typeof(f.value) == 'string') { window.location = "SAP://Company Code:" + f.value + ";"; }; }

 

GuiXT Skript

Im GuiXT Script löschen wir das Eingabefeld für den Buchungskreis und zeigen stattdessen die HTML Seite an. Die Koordinaten im View Befehl haben negative Werte mit Dezimalstellen, damit der View Bereich an der richtigen Stelle im SAP Bildschirm dargestellt wird.

Dar der SAP Bildschirm mit einem Defaultwert für den Buchungskreis erscheinen kann (benutzerspezifischer Wert oder ein Eingabewert aus einer vorherigen Transaktion), müssen wir den aktuellen Wert des Feldes F[Buchungskreis] in das HTML Drop-down Feld übertragen.

Wir generieren die Werteliste beim ersten Anzeigen des Drop-down Feldes mithilfe einer separaten include Datei.

Hier das vollständige GuiXT Skript:

del F[Buchungskreis] -value
View (-0.5,63.4) (0.5,97.4) “ccdropdown.html” returnwindow=”hwnd_fb01_cc_dropdown” id=”fb01_ccdropdown”

if not V[ccdropdown_initialized]
  include “build_select_companycode.txt”
endif

Set HTML[select_cc] “&F[Buchungskreis]“

 

Generierung der Werteliste

Wir benötigen einen ABAP Funktionsbaustein, der alle Buchungskreise mit den dazugehörigen Texten aus dem SAP System liest. Dies kann ein eigens für diese Zwecke geschriebener Baustein sein, oder Sie benutzen einen allgemeinen Baustein wie zum Beispiel die SAP Funktion “RFC_READ_TABLE”.

In unserem Fall hier benutzen wir die Funktion “Z_S10_SEARCHHELP”, die Synactive im Rahmen des Synactive S10 Systems (http://www.synactives10.com/s10forum) geschrieben hat. Sie liest die Wertehilfe aus dem SAP System und kann sehr einfach in GuiXT Skripten benutzt werden. 

Das Skript liest alle Werte in eine Textvariable ein und sendet die Werte an die HTML Seite. Aus Performancegründen werden jeweils bis zu 100 Einträge zu einen einzigen String zusammengefügt und weitergeleitet.

-> Bei sehr langen Listen ist es wegen der Längenbegrenzung der GuiXT Befehle (4000 Zeichen) nicht möglich, alle Werte in einem einzigen String zu senden.  Deshalb die Einteilung in Blöcke mit jeweils 100 Werten. 

GuiXT Skript “build_select_companycode.txt”:


// Kennzeichnen: initialisiert
Set V[ccdropdown_initialized] “X”

// Lesen der Werte aus SAP
Call “Z_S10_SEARCHHELP” in.SEARCHHELP=”H_T001″ in.COLUMNS=”BUKRS(4),BUTXT(25)” table.DATA=”data”

set V[i] 1
set V[k] 1
set V[cc_option] “”
set Text[options] “”

label cc_next

CopyText fromText=”data” toString=”line” line=&V[i]
if not Q[ok]
  goto cc_done
endif

Set V[cc_code] “&V[line](1-4)”
Set V[cc_text] “&V[line](5-29)”
Set V[cc_option] “&V[cc_code]~~~&V[cc_code] &V[cc_text]~~~”

CopyText fromString=”cc_option” toText=”options” -append

Set V[i] &V[i] + 1
Set V[k] &V[k] + 1
 

// Senden von 100 Einträgen
if V[k=100]
  CopyText fromText=”options” toString=”cc_option”
  set Text[options] “”
  Set HTML[text_optionstring] “&V[cc_option]“
  connectHTML click=”button_AcceptOptions” window=”&V[hwnd_fb01_cc_dropdown]“
  Set V[k] 1
endif

goto cc_next

label cc_done
 

// Senden der übrigen Einträge
CopyText fromText=”options” toString=”cc_option”
set Text[options] “”
Set HTML[text_optionstring] “&V[cc_option]“

connectHTML click=”button_AcceptOptions” window=”&V[hwnd_fb01_cc_dropdown]“

 

Dynamische Drop-down Eingabefelder (1)