Die Methode s10dropdownlist() wird durch das S10 Framework implizit
aufgerufen, wenn in HTML für ein Klassenattribut "attr" über "attr@dropdownlist"
die dropdown-Liste zu einem Attribut angefordert wird. Beispiel:
HTML
<label
class='label
output'
name='land1'></label><br
/>
<select
class='inputselect'
size="1"
name='land1'
style='width:
240px;'
data-s10dropdownlist='land1@dropdownlist'>
</select>
Das S10 Framework baut die dropdown-Liste automatisch aus den Angaben im
SAP Data Dictionary auf. Sie können in HTML angeben, ob die internen Codes mit
angezeigt werden sollen oder nur die Texte. Beispiel:
HTML
<label
class='label
output'
name='bsark'></label><br
/> <select
class='inputselect'
size="1"
name='bsark'
style='width:
240px;'
data-s10dropdownlist='bsark@dropdownlist'
data-s10options='hidekeys'> </select>
s10dropdownlist() liefert die Werte immer in alphabetischer Reihenfolge
der Schlüssel. Falls Sie die Anzeige der Schlüssel in HTML ausschalten, wird
die Dropdown-Liste nach dem Text sortiert angezeigt:
Die Dropdown-Liste wird als String zurückgeliefert, in dem jeweils der
Schlüssel und der Text durch ein TAB Zeichen und die Einträge durch einen
Zeilenvorschub getrennt sind. Hier die Anzeige der Länderliste im ABAP
Debugger:
Falls die Standard-Dropdownliste zu viele Werte enthält, können Sie eine
Werteliste als Filter mitzugeben. Da der Aufruf von s10dropdownlist() für die
Werteliste in HTML implizit durch das S10 Framework erfolgt, ist hierzu das
Überschreiben der s10dropdownlist() Methode in Ihrer Klasse nötig.
Wir zeigen das Vorgehen anhand der Länderliste und nehmen dazu an, dass
Sie nur eine Auswahl von Ländern in der Dropdownliste zur Auswahl anbieten
wollen.
HTML
<label
class='label
output'
name='land1'></label><br
/>
<select
class='inputselect'
size="1"
name='land1'
style='width:
240px;'
data-s10dropdownlist='countries01@dropdownlist'
data-s10options='hidekeys'>
</select>
ABAP methods: s10dropdownlist redefinition.
* redefinition of s10dropdownlist() for certain attributes method s10dropdownlist.
case to_lower( attrname ). when 'countries01'. ddlstring = super->s10dropdownlist( exporting attrname = 'land1' valuelist = 'AT,AU,BE,CA,CH,DE,FR,IT' ).
* call up super method for all other attributes when others. ddlstring = super->s10dropdownlist( exporting attrname = attrname valuelist = valuelist ). endcase.
endmethod.
Ebenso sind dynamisch erzeugte Listen möglich. Zum Beispiel wäre es bei der
Selektion von Kunden sinnvoll, nur solche Länder anzubieten, in denen es auch
Kunden gibt. Das können wir entweder nochmal mit dem gleichen
Vererbungsmechnismus implementieren oder die Liste ganz ohne s10dropdownlist()
selbst aufbauen. Wir zeigen hier beide Verfahren.
Methode 1 (Redefinition von s10dropdownlist)
HTML
<label
class='label
output'
name='land1'></label><br
/>
<select
class='inputselect'
size="1"
name='land1'
style='width:
240px;'
data-s10dropdownlist='countries02@dropdownlist'
data-s10options='hidekeys'>
</select>
ABAP methods: s10dropdownlist redefinition.
* redefinition of s10dropdownlist() for certain attributes method s10dropdownlist.
case to_lower( attrname ). when 'countries01'. ddlstring = super->s10dropdownlist( exporting attrname = 'land1' valuelist = 'AT,AU,BE,CA,CH,DE,FR,IT' ).
when 'countries02'.
* build up country code list from existing customers data: valuelist02 type string, tabland1
type table of kna1-land1.
select distinct land1 from kna1 into table tabland1. concatenate lines of tabland1 into valuelist02 separated by ','.
ddlstring = super->s10dropdownlist(
exporting attrname = 'land1' valuelist = valuelist02 ).
* call up super method for all other attributes when others. ddlstring = super->s10dropdownlist( exporting attrname = attrname valuelist = valuelist ). endcase.
endmethod.
Methode 2 (ohne s10dropdownlist)
HTML
<label
class='label
output'
name='land1'></label><br
/>
<select
class='inputselect'
size="1"
name='land1'
style='width:
240px;'
data-s10dropdownlist='ddlcountries02'
data-s10options='hidekeys'>
</select>
ABAP
data: ddlcountries02 type string.
methods: build_ddlcountries02
exporting ddlcountries02 type string.
method build_ddlcountries02. clear ddlcountries02.
data: land1 type kna1-land1, landx type t005t-landx.
select distinct kna1~land1 t005t~landx into (land1,landx) from kna1 join t005t on kna1~land1 = t005t~land1 and t005t~spras = sy-langu order by kna1~land1.
ddlcountries02 = ddlcountries02
&& land1 && cl_abap_char_utilities=>horizontal_tab && landx && cl_abap_char_utilities=>cr_lf. endselect. endmethod.
|