Man kann dem <z:table>-Element statt einer internen Tabelle auch ein
Objekt mitgeben, das sich bloss wie eine interne Tabelle verhält.
Sprich, es muss der Indexzugriff auf die Zeilen möglich sein, die
Tabelle muss sortierbar sein und eine Beschreibung ihres Zeilentyps
liefern. In
http://bsp.mits.ch/supplements/tableData.htm#zif_index_table
habe ich dieses Konzept ja genauer beschrieben.
Wir stiessen nun auf das Problem, dass die mit dem <z:toolbar>-Element
eingestellte Sortierung nur Aufwärts-, kein Abwärtssortieren erlaubt.
(Der Grund für diese Restriktion ist, dass es zu Release 6.20, als das
MVC-Framework entstand, für den ABAP-Befehl SORT noch keine dynamische
Wahl der Sortierrichtung (also auf- oder absteigend) gab, sondern der
dynamische SORT nur die Angabe von maximal fünf aufsteigend zu
sortierenden Komponenten zuliess. Mittlerweile, d.h. ab Release 7.0,
könnte man für solche Zwecke das Konstrukt SORT ... BY OTAB nutzen.)
Es war aber eine Defaultansicht einer Auftragsliste mit der Sortierung
absteigend nach dem Auftragsdatum erwünscht. Hierzu haben wir die
Datenquelle von
<z:table binding="//sel/gt_ordlist" ... >
auf
<z:table dataObject = "<%=ctx->go_ordlist%>" ... >
geändert. Der Viewcontext ctx enthält ein globales Objekt der Context-
lokalen Klasse lcl_ordlist, die von der Standardimplementierung
ZCL_INDEX_TABLE des Interface ZIF_INDEX_TABLE erbt. Das Objekt wird in
der Methode SET_VIEW instanziiert, die unmittelbar vor dem Durchlaufen
des Views aufgerufen wird:
method zif_view_context~set_view.
...
get reference of go_sel->gt_ordlist into lt_ordlist_ref.
create object go_ordlist
type
lcl_ordlist
exporting
iv_inttab_ref = lt_ordlist_ref
is_selkri = lo_caller->gs_selkri.
...
endmethod.
Nun kann die Standardmethode zum Sortieren einfach redefiniert werden,
und damit hat man die Möglichkeit, ein vom Standardverhalten der
<z:toolbar> abweichendes anwendungsspezifisches Verhalten zu
definieren:
class lcl_ordlist definition inheriting from zcl_index_table.
public section.
methods constructor
importing
iv_inttab_ref type ref to data optional
is_selkri type ZMSS_ORDL_SELKRI
iv_by_reference type flag default 'X'
raising
zcx_error .
methods zif_index_table~sort redefinition.
private section.
data: gt_ordlist type ref to ZMSS_ORDER_LIST_TAB,
gs_selkri type ref to ZMSS_ORDL_SELKRI.
endclass. "lcl_ordlist DEFINITION
method zif_index_table~sort.
case gs_selkri->variant.
when 'ALORD01'.
sort gt_ordlist->* by zzaufnr descending .
when 'ALORD03'.
sort gt_ordlist->* by kunnr ascending
bstdk descending
zzaufnr ascending.
...
endmethod.