// 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 + ";"; }; }
Scripte GuiXT
GuiXT efface le champ de saisie pour le code de société et affiche la page HTML à la place. Les coordonnées de la commande “View” contiennent des valeurs négatives et décimales pour que la partie View soit correctement placée dans l’écran SAP.
Etant donné que l’écran SAP peut venir avec une valeur par défaut pour le code de société (valeur propre à l’utilisateur ou une valeur saisie dans une transaction précédente), il faut ajuster la valeur actuelle du champ F[Société] dans le champ déroulant HTML.
Au premier affichage du champ déroulant, nous allons générer la liste des valeurs en utilisant un fichier séparé inclus (commande include).
Voilà le scripte GuiXT en entier:
del F[Société] -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[Société]“
Génération de la liste des valeurs
Il nous faut un module de fonction ABAP qui lit tous les codes de société avec leurs textes correspondants dans le système SAP. Ceci peut être un module de fonction spécifique que vous créez pour cette tâche ou alors, vous pouvez en utiliser un général comme par exemple la fonction SAP “RFC_READ_TABLE”.
Dans notre cas précis nous allons utiliser une fonction “Z_S10_SEARCHHELP” qui a été écrite par Synactive dans le système Synactive S10 (http://www.synactives10.com/s10forum). Elle lit la liste d’aide de valeurs dans le système SAP et peut facilement être utilisé dans les scriptes GuiXT.
Le scripte lit toutes les valeurs dans une variable texte et envoie ensuite les valeurs à la page HTML. Pour des raisons de performance on va concaténer à chaque fois 100 valeurs en un string unique et qui sera ensuite envoyé.
-> Il n’est pas possible d’envoyer dans un seul string toutes les valeurs d’une très grande liste à cause D’une capacité limitée de la longueur d’une commande GuiXT (4000 caractères). C’est pour cette raison que l’on utilise un groupage de 100 valeurs à la fois.
Voilà le scripte GuiXT “build_select_companycode.txt”:
// Indiquer: initialisé
Set V[ccdropdown_initialized] “X”
// lire les valeurs dans 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
// envoyer 100 valeurs
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
// envoyer les valeurs restantes
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]“