ALV-Grid, Referenz der "Datentabelle" bekommen

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

ALV-Grid, Referenz der "Datentabelle" bekommen

Postby Maja967 » Wed Jan 04, 2012 11:19 am

Hallo,

beim Erzeugen eines ALV, wird die Tabelle mit den darzustellen Daten mit übergeben.
Gib es die Möglichkeit vom ALV eine Referenz auf diese Tabelle zurückzubekommen ??? Oder bleibt mir nichts anderes wie das ganze in einen Perfom zu packen:

case ref_alv.

when alv1. c_ref = get reference of it_1000.
when alv2. c_ref = get reference of it_2000.
.......
endcase.

thx
Maja967
...
...
 
Posts: 229
Joined: Tue Nov 29, 2005 2:44 pm

Re: ALV-Grid, Referenz der "Datentabelle" bekommen

Postby Jonny2227 » Wed Jan 04, 2012 2:59 pm

Sali,

wozu willst du denn die interne Referenz der daten ? Du hast doch deine interne Tabelle IT_1000 und IT_2000 - welche nach der Änderung der Daten z.Bsp. diese enthält ?!
Was willst du genau tun ?

Gruss Jens
Jonny2227
....
....
 
Posts: 605
Joined: Wed Mar 01, 2006 3:16 pm

Re: ALV-Grid, Referenz der "Datentabelle" bekommen

Postby Maja967 » Wed Jan 04, 2012 3:40 pm

Hi,

ich möchte nicht nochmals in einem Perform via CASE die "Datentabelle" hart verdrahten.

BSP: User markiert bestimmte Zeile, drückt button um diese zu löschen bzw anders weiterzuverarbeiten.

Im Programm:

- via get_selected_rows bekomme ich die indexe der markierten zeilen.
- über die Indexe ermittle ich nun alle zeilen aus der internen Datentabelle
Hierfür muß ich nun nun folgendes einbauen
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. case ref_alv.
  2.  
  3. when alv1. c_ref = get reference of it_1000.
  4. when alv2. c_ref = get reference of it_2000.
  5. .......
  6.  
GeSHi ©


-->> leichter wäre sowas wie: ref_alv->get_reference_of_datatabel
somit wäre mein Funktion "wartungsärmer".

thx



Ich meine beim Erstellen des ALV`s muß sich das ALV die Referenz auf seine Daten merken, bsp wenn im ALV sortiert wird, dann wird auch die Internete Datentabelle mitsortiert.
Maja967
...
...
 
Posts: 229
Joined: Tue Nov 29, 2005 2:44 pm

Re: ALV-Grid, Referenz der "Datentabelle" bekommen

Postby Jonny2227 » Wed Jan 04, 2012 4:34 pm

Sali,

also wenn du die Standard Funktion zum Löschen nutzt - musst du ja gar nichts machen - insofern der ALV editierbar ist bzw. diese Funktion - Löschen - anbietet.
Nutzt du die Klasse CL_GUI_ALV_GRID oder welche ?

Gruss Jens
Jonny2227
....
....
 
Posts: 605
Joined: Wed Mar 01, 2006 3:16 pm

Re: ALV-Grid, Referenz der "Datentabelle" bekommen

Postby Maja967 » Wed Jan 04, 2012 4:42 pm

kein Standard, eigener Button über den die Löschfunc ausgeführt wird
kein Reuse ALV, sondern CL_GUI_ALV_GRID.
Maja967
...
...
 
Posts: 229
Joined: Tue Nov 29, 2005 2:44 pm

Re: ALV-Grid, Referenz der "Datentabelle" bekommen

Postby Jonny2227 » Wed Jan 04, 2012 5:07 pm

Sali,

warum nutzt du nicht die Standard ösch Funktion dazu - dann brauchst du dich darum nicht kümmern ?

Gruss Jens

Du hast 2 ALV Referenzen - also zwei verscheidene 2 ALV auf dem Dynpro oder ? Sind die beide immer aktiv - sprich instanziiert ?
Jonny2227
....
....
 
Posts: 605
Joined: Wed Mar 01, 2006 3:16 pm

Re: ALV-Grid, Referenz der "Datentabelle" bekommen

Postby Maja967 » Wed Jan 04, 2012 5:21 pm

Standard-Löschfunktion


Selbst ist der Entwickler *g .... ne im Ernst : durch die "Eigenentwicklung" lernt man mehr !

---


unterschiedliche Dynpros mit jeweils einem ALV-Grid drin. Die Löschfunktionalität soll bei 10 von 8 ALV`s "durchlaufen" werden. dh ein Funktion die das händelt (selektierte ermitteln, löschen im ALV + Löschen auf der DB etc). Hab mir die öffentlichen Methoden / Attribute des ALV-Grid Klasse durchgeschaut und nichts gefunden ... wird dann wohl nicht möglich sein, die Referenz auf die "Datentabelle" von ALV-Objekt zu bekommen ... *seufz dann halt doch Fall Unterscheidung via CASE.

thx again
Maja967
...
...
 
Posts: 229
Joined: Tue Nov 29, 2005 2:44 pm

Re: ALV-Grid, Referenz der "Datentabelle" bekommen

Postby Jonny2227 » Wed Jan 04, 2012 5:43 pm

Sali,

also den Case kannst du ja dann anhand der Dynpronummer - sy-dynnr gestalten.
Was ich nicht verstehe - warum willst du die interne Tabelle einer Referenz Variable zuordnen - denn damit du die Daten dann bearbeiten kannst müsstest du ja die Tabelle wieder dereferenzieren ? Du hast Dynpro Nummer - dazu dann die ITAB -> beim, löschen bsp. schmeist du in deinem Eventhandler aus genau dieser ITAB die Daten raus machst einen Display Refresh und fertig ist die Sache !

- 1. eventhandler für user_command programmieren
- 2. die selektierten Zeilen ermitteln
- 3. aus der entsprechenden ITAB die Daten raus schmeissen (bsp. Löschen)
case sy-dynnr.

endcase.
- 4. Display refresh

Gruss Jens
Jonny2227
....
....
 
Posts: 605
Joined: Wed Mar 01, 2006 3:16 pm

Re: ALV-Grid, Referenz der "Datentabelle" bekommen

Postby Ilja583 » Wed Jan 04, 2012 8:09 pm

Hallo cut1,

was du letztliich brauchst ist der Zugriff auf das Attribut MT_OUTTAB von cl_gui_alv grid. Aber das ist dummerweise protected.
Somit sehe ich 2 Möglichkeiten das zu realisieren was du möchtest.

1. Möglichkeit: Statt des cl_gui_alv_grid legst du dir eine eigene von cl_gui_alv_grid abgeleitete Klasse an, die eine public Methode bereitstellt um MT_OUTTAB nach außen zu reichen oder du schreibst deine Löschmethode gleich in die neue Klasse rein und verwendest dann in deinem Programm die erweiterte Klasse statt des Standard Grids.

2. Möglichkeit: Lt. Doku behauptet SAP dass man nicht auf protected Attribute von außen zugreifen kann. Aber es gibt einen "Trick", mit dem das in sehr vielen Fällen eben doch geht. (Und da SAP das selber ziemlich tief in ihrem Control-Framework selber verwenden schätze ich mal, dass das auch so schnell nicht geändert wird ). Für diesen Fall schau dir mal den folgenden Thread auf yaabb.de an
http://www.yaabb.de/viewtopic.php?t=2328
Ilja583
.....
.....
 
Posts: 1372
Joined: Wed Jan 08, 2003 3:00 pm

Re: ALV-Grid, Referenz der "Datentabelle" bekommen

Postby Maja967 » Thu Jan 05, 2012 10:15 am

@Jens
danke für den "PAP", so in etwa hatte ich mir das auch vorgestellt, nur halt ohne das CASE (wegen erneuter verdrahtung der OUTTAB). Was spricht gegen dereferenzieren ??? Bei "Dynamisch" habe ich ja keine andere Chance .... kann ja auch auf einen generischen Tabellentyp (ANY, INDEX) dereferenzieren, somit wiederum keine erneute Verdrahtung ... oder ist das zu Laufzeit intensiv ?

@Black_Adept
*g ... ich vergaß den OO-Ansatz ...

thx cut1
Maja967
...
...
 
Posts: 229
Joined: Tue Nov 29, 2005 2:44 pm


Return to ABAP Objects®

Who is online

Users browsing this forum: No registered users and 8 guests