Methode GET_SELECTED_ROWS

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
21 Beiträge • Seite 1 von 2 (current) Nächste
21 Beiträge Seite 1 von 2 (current) Nächste

Methode GET_SELECTED_ROWS

Beitrag von Torsten ( / / 0 / 3 ) »
Kann man die Methode GET_SELECTED_ROWS auch in einem Subscreen aufrufen?
Es funktioniert dort nämlich nicht! Parameter i_rows
ist immer leer!

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Was willst Du eigentlich machen?

Beitrag von Jürgen.H (ForumUser / 23 / 0 / 0 ) »
Die Methode Get_selected_Rows gehört zu einer Klasse.
Sie wirk für die Zeilen, die mit dieser Klasse dargestellt werden.
Du müsstest also etwas deutlicher werden und eventuell etwas Code einfügen
Success

Jürgen

Beitrag von Torsten ( / / 0 / 3 ) »
Hallo Jürgen,
anbei das Erzeugen des Objektes und die dazugehörige Methode, wo die Methode GET_SELECTED_ROWS aufgerufen wird. Ich hoffe das reicht!

FORM create_alv_grid_aufpos.

DATA: fields TYPE lvc_t_fcat.


i_layout_struc-sel_mode = 'A'.

CREATE OBJECT container
EXPORTING
container_name = 'CONTAINER'.

CREATE OBJECT grid1
EXPORTING
i_parent = container.

SELECT *
INTO TABLE lcl_event_receiver_aupos=>iptab
FROM zbts_provap
WHERE pronr EQ zbts_scd-vbeln.

CALL METHOD grid1->set_table_for_first_display
EXPORTING
i_structure_name = 'ZBTS_PROVAP'
i_default = 'X'
i_save = 'X'
is_layout = i_layout_struc
CHANGING
it_outtab =
lcl_event_receiver_aupos=>iptab.

CALL METHOD grid1->get_frontend_fieldcatalog
IMPORTING
et_fieldcatalog = fields.
*
CALL METHOD cl_gui_cfw=>flush.


CALL METHOD grid1->set_frontend_fieldcatalog
EXPORTING
it_fieldcatalog = fields.

SET HANDLER lcl_event_receiver_aupos=>handle_user_command lcl_event_receiver_aupos=>handle_menu_button lcl_event_receiver_aupos=>handle_toolbar
*lcl_event_receiver=>handle_double_klick
FOR ALL INSTANCES.
* Den Toolbar aktivieren, dies löst das Ereignis Toolbar aus

CALL METHOD grid1->set_toolbar_interactive.

ENDFORM. " create_alv_grid_aufpos
-------------------------------------------
CLASS...
.....
METHOD handle_user_command.
* Reaktion auf den User-Command
DATA: i_rows TYPE lvc_t_row.
DATA: row LIKE LINE OF i_rows.
DATA: l_iptab TYPE TABLE OF zbts_provap.
FIELD-SYMBOLS: <fs> LIKE LINE OF iptab.

* Ermitteln der ausgewählten Zeile
CALL METHOD grid1->get_selected_rows
IMPORTING
ET_INDEX_ROWS = i_rows.
* Zuerst Flushen
CALL METHOD cl_gui_cfw=>flush.
CLEAR row.
READ TABLE i_rows INTO row INDEX 1.
IF sy-subrc NE 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = sy-title
txt1 = 'Bitte zuerst eine Zeile
markieren!'
txt2 = ' '.
EXIT.
ENDIF.
CASE e_ucomm.
WHEN 'INBEA'.
* Ermitteln der ausgewählten Zeile
CALL METHOD grid1->get_selected_rows
IMPORTING
et_index_rows = i_rows.

LOOP AT iptab ASSIGNING <fs>.
READ TABLE iptab ASSIGNING <fs> INDEX
row-index.
<fs>-inbea = 'X'.
MODIFY iptab FROM <fs> INDEX row-index.
ENDLOOP.
WHEN 'AUBEA'.

LOOP AT iptab ASSIGNING <fs>.
READ TABLE iptab ASSIGNING <fs> INDEX
row-index.
CLEAR <fs>-inbea.
MODIFY iptab FROM <fs> INDEX row-index.
ENDLOOP.

ENDCASE.
ENDMETHOD.
ENDCLASS.

Beitrag von Maestro ( / / 0 / 3 ) »
Hi Torsten,
hab dein coding überflogen...
1. Folgende Methode kann einen sy-subrc ne 0 werfen:

Code: Alles auswählen.

* Zuerst Flushen 
CALL METHOD cl_gui_cfw=>flush. 
Solltest auf jeden fall abfangen.

2. warum rufst du denn im fall von

Code: Alles auswählen.

WHEN 'INBEA'. 
wieder die methode grid1->get_selected_rows ?

Tanti saluti di
Maestro

Beitrag von Torsten ( / / 0 / 3 ) »
Hallo,

das mit dem 2. Aufruf brauche ich natürlich nicht. Da hast du recht. Nur ich komme bis dahin gar nicht, da die Tabelle i_rows trotz Markierung leer ist. Das "Flushen" passiert ja auch erst danach!
Ich weiß jetzt nur nicht, ob es an dem Subscreen liegt, wo ich das Grid_Control aufrufe, oder nicht??

Beitrag von Gast ( / / 0 / 3 ) »
Torsten hat geschrieben:Hallo,

das mit dem 2. Aufruf brauche ich natürlich nicht. Da hast du recht. Nur ich komme bis dahin gar nicht, da die Tabelle i_rows trotz Markierung leer ist. Das "Flushen" passiert ja auch erst danach!
Ich weiß jetzt nur nicht, ob es an dem Subscreen liegt, wo ich das Grid_Control aufrufe, oder nicht??
Nachdem Du etwas von subscreen erzählst - ich aber den Aufruf von Deiner Form nicht sehe. Kann es sein, dass Du mit jedem PBO eine neue Instanz Deines ALV-Grids erzeugst?
Möglicherweise würde dies erklären, warum die Markierten Bereiche verloren gehen.
Grüße
Christian

Beitrag von Torsten ( / / 0 / 3 ) »
Hallo,

also ich erzeuge das Grid in einem PAI-Modul, wie man unten erkennt.

PAI-Modul:

MODULE user_command_0200 INPUT.

...

WHEN 'POSI'.
tab1-activetab = 'POSI'.
scrnr = '0230'.

perform create_alv_grid_aufpos.
...


Was auch komisch ist, daß man bei einem normalen Programm ohne Subscreen "Scrollen" kann während
man im Programm mit Subscreen gar nicht diese
Möglichkeit hat. Das Scrollen müßte doch defaultmäßig
genauso erscheinen, wenn der Container zu klein ist?!

Beitrag von Gast ( / / 0 / 3 ) »
Torsten hat geschrieben:Hallo,

also ich erzeuge das Grid in einem PAI-Modul, wie man unten erkennt.

PAI-Modul:

MODULE user_command_0200 INPUT.

...

WHEN 'POSI'.
tab1-activetab = 'POSI'.
scrnr = '0230'.

perform create_alv_grid_aufpos.
...


Was auch komisch ist, daß man bei einem normalen Programm ohne Subscreen "Scrollen" kann während
man im Programm mit Subscreen gar nicht diese
Möglichkeit hat. Das Scrollen müßte doch defaultmäßig
genauso erscheinen, wenn der Container zu klein ist?!
soweit ich sehen kann, ist der Aufruf nicht gekapselt. Mit jedem Aufruf der Form erzeugst Du ein neue Instanz. Ich vermute, dass beim prozessieren des Eventhandlers bereits die neue Instanz erzeugt wird. Das solltest Du per Debugging prüfen.
Um zu vermeiden, dass immer neu instanziert wird, würde ich in der Form vor dem Create prüfen, ob grid initial ist.

Was den subscreen angeht, so schau Dir mal die Eigenschaften im Dynpro an - da gibt es glaube ich auch eine Scroll eigenschaft, glaube ich.
Christian

Beitrag von Torsten ( / / 0 / 3 ) »
Also das mit dem Scrollen klappt jetzt. Mußte man aber bei den Eigenschaften des Container einstellen und nicht beim Dynpro! Trotzdem danke dafür.

Das mit dem Erkennen der markierten Zeilen klappt aber immer noch nicht, auch wenn ich die Abfrage, ob grid1 initial ist, dort eingebaut habe.
Ich frage das Markieren der Zeilen doch bei einem selber eingebauten Button, wo ein Fkt.Code hinterlegt ist, ab. Da wird doch eh kein neues Grid erzeugt, da dieser Fkt.Codeaufruf doch als Event gesehen wird?! Oder was meinst du?

Beitrag von deDieter ( / / 0 / 3 ) »
Servus,
lässt sich ja ziemlich schwer beurteilen wo bei dir der fehler ist.
Schon mal probiert das event explizit fürn deinen grid zu registrieren?
du machst es ja gerade so:

Code: Alles auswählen.

SET HANDLER lcl_event_receiver_aupos=>handle_user_command lcl_event_receiver_aupos=>handle_menu_button lcl_event_receiver_aupos=>handle_toolbar 
*lcl_event_receiver=>handle_double_klick 
FOR ALL INSTANCES. 
was mir spontan einfällt ist folgendes:

Code: Alles auswählen.

SET HANDLER lcl_event_receiver_aupos=>handle_user_command FOR grid1. 
SET HANDLER lcl_event_receiver_aupos=>handle_menu_button FOR grid1. 
SET HANDLER lcl_event_receiver_aupos=>handle_toolbar FOR grid1. 
gruß deDieter

Beitrag von Torsten ( / / 0 / 3 ) »
Hallo Dieter,

leider negativ!

Vielleicht nochmal eine kurze Beschreibung:
Mein Dialogprogramm besteht aus 5 Tabstrips.
Auf jedem dieser Tabellenreiter ist jeweils
1 Subscreen!
Jedes dieser Tabstrips hat einen Fkt.Code.
Auf dem 2. Tabstrip (Fkt.Code POSI) soll das
Grid aufgerufen werden. Ich erzeuge das Grid
im PAI-Modul des ersten Tabstrips bei der Abfrage auf den Fkt.Code Posi. Das Grid erscheint. Der
von mir erzeugte Button auch(was ja auch ein Event ist), nur beim Abfragen auf markierte Zeilen liefert
er eine leere Tabelle irows!

Falls dir trotzdem noch was einfallen sollte, so
laß es mich wissen :!: .

Trotzdem schon mal danke bis hierher!

Beitrag von mabri (ForumUser / 34 / 0 / 0 ) »
Hallo Thorsten,

nachfolgend die relevanten Stellen aus meinem code, bei dem ich das von dir gewünschte Ergebniss erhalte.

Code: Alles auswählen.

***********************************************************************
* Klassen Definition für Ereignisse in der GUI-INSTANZ
***********************************************************************
CLASS lcl_event DEFINITION.
  PUBLIC SECTION.
  CLASS-METHODS:
      on_toolbar
         FOR EVENT toolbar              OF cl_gui_alv_grid
         IMPORTING e_object,
      on_user_command
         FOR EVENT user_command         OF cl_gui_alv_grid
         IMPORTING e_ucomm.
ENDCLASS.
CLASS lcl_event IMPLEMENTATION.
* Der Toolbar wird ein eigenes Button hinzugefügt
  METHOD on_toolbar.
    DATA: wa_knopf TYPE stb_button.
    wa_knopf-icon = icon_flight.
    wa_knopf-function = 'USER'.
    APPEND wa_knopf TO e_object->mt_toolbar.
  ENDMETHOD.
* Benutzer hat das eigenes Button ausgwählt
  METHOD on_user_command.
    DATA: it_row_ind TYPE lvc_t_row,
          it_row_no  TYPE lvc_t_roid.
    DATA: wa_row_ind TYPE lvc_s_row,
          wa_row_no  TYPE lvc_s_roid.
    CASE e_ucomm.
      WHEN 'USER'.
* Die Methode mit der Instanz des ALV mit den markierten Zeilen aufrufen
            CALL METHOD r_alvg->get_selected_rows
                 IMPORTING
                  et_index_rows =  it_row_ind
                  et_row_no     =  it_row_no.
* Jetzt enthalten beide Tabellen die Indexe der markierten Zeilen
  ENDCASE.
  ENDMETHOD.
ENDCLASS.
.
.
.
* Beim erzeugen des ALV in dem Zeilen markiert werden
MODULE init_process OUTPUT.

* Einmal Erstellung der Container Instanz
  CHECK r_cont IS INITIAL.

  CREATE OBJECT r_cont
    EXPORTING
       container_name = 'CONT'.
    IF sy-subrc <> 0.
       MESSAGE a999 WITH 'Fehler beim Erzeugen des Containers'.
    ENDIF.

* Einmal Erstellung der ALV Instanz
  CHECK r_alvg IS INITIAL.

  CREATE OBJECT r_alvg
    EXPORTING
      i_parent  = r_cont.
    IF sy-subrc  <> 0.
       MESSAGE a999 WITH 'Fehler beim Erzeugen des ALVGRID'.
    ENDIF.

* Registrieren der Ereignisse
  SET HANDLER: lcl_event=>on_toolbar              FOR r_alvg,
               lcl_event=>on_user_command         FOR r_alvg.

* Erster Aufruf ALV
  PERFORM alv_fieldcat.
  PERFORM alv_layout.
  CALL METHOD r_alvg->set_table_for_first_display
    EXPORTING
       i_save                        = 'A'
       is_layout                     = wa_layo
    CHANGING
       it_outtab                     = it_list
       it_fieldcatalog               = it_fieldcat
    EXCEPTIONS
       invalid_parameter_combination = 1
       program_error                 = 2
       too_many_lines                = 3
       OTHERS                        = 4.
    IF sy-subrc <> 0.
       MESSAGE a999 WITH 'Fehler beim Aufruf des ALVGRID'.
    ENDIF.

ENDMODULE.                 " status_0100  OUTPUT

Beitrag von Torsten ( / / 0 / 3 ) »
Ich habe rausbekommen, woran das Nichterkennen der Markierungen lag.
Ich habe ja ein Dialogprogramm mit 5 Tabellenreitern.
1. Reiter: Fkt.Code= ALLG Subscreen = SUBDATEN Scrnr: 220!
2. Reiter: Fkt.Code= POSI SUBSCREEN = POSITION
Scrnr: 230!
3. Reiter: Fkt.Code= FAKT Subscreen = Faktura
Scrnr: 240!
...

Ich habe in meinem Programm folgenden Aufruf im Dynpro 200, welches meine Subscreens aufruft.

PROCESS BEFORE OUTPUT.
* MODULE STATUS_0200.
*
MODULE INIT200.

CALL SUBSCREEN SUBDATEN INCLUDING 'ZBTS_ONLINE_TA' scrnr.


PROCESS AFTER INPUT.

CALL SUBSCREEN SUBDATEN.


MODULE USER_COMMAND_0200.
--------------------------------------

Im User-Command 200 dann:

CASE sy-ucomm.

WHEN 'ENTE'.

WHEN 'ALLG'.
tab1-activetab = 'ALLG'.
scrnr = '0220'.

WHEN 'POSI'.
tab1-activetab = 'POSI'.
scrnr = '0230'.

PERFORM create_alv_grid_aufpos.

------------------------------------------------

Das Grid wird ja im 2. Reiter erzeugt.
Wenn ich den Aufruf im Dynpro oben auf
CALL SUBSCREEN POSITION INCLUDING 'ZBTS_ONLINE_TA' '0230'.
erkennt das Grid die Markierung!
Frage: Es ist ja eigentlich logisch, daß ich den Subscreen POSITION für das Grid nutzen muß, obwohl ich eigentlich nicht verstehe, wie so das Grid angezeigt werden kann. Nur wie bekomm ich es denn hin, den Subscreen dynamisch aufzurufen! Man kann bei der Dynprosprache ja nicht mit IF und ELSE arbeiten. Kann man vielleicht den Subscreen durch eine Variable ersetzen.

Beitrag von Gast ( / / 0 / 3 ) »
Sorry schon ewgig nichts mehr mit Subscreens gemacht - aber prozessiert ein subscreen nicht ein eigenes PBO - dann würde ich den Perform für das ALV dort einbauen.
Grüße
Christian

Beitrag von Gast ( / / 0 / 3 ) »
Hallo Christian,

das habe ich leider schon ausprobiert! Dann erkennt das GRID die Markirung wieder nicht :cry: !!!

Vergleichbare Themen

2
Antw.
4208
Views
ALV - Selected Rows funktioniert nur ein Mal
von SaskuAc » 27.11.2018 07:04 • Verfasst in Dialogprogrammierung
1
Antw.
1980
Views
get selected Rows mit delete Anweisung
von JohnLocklay » 27.10.2016 09:08 • Verfasst in ABAP® Core
0
Antw.
1764
Views
TRACE: Erseter FETCH bei UP TO N Rows extrem hoch
von c0lt.seavers » 27.10.2008 11:38 • Verfasst in ABAP® Core
2
Antw.
1812
Views
Join 2er Tabellen ohne doppelter Rows in der Ergebnistabelle
von Bitfummler » 08.06.2006 15:09 • Verfasst in ABAP® Core
4
Antw.
10981
Views
Performance: SELECT UP TO 1 ROWS vs. SELECT SINGLE
von roman1983 » 04.09.2008 14:29 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

LSMW-Problem
vor 2 Tagen von mazu gelöst 5 / 986
ATC Finding in Smartforms
vor 6 Tagen von sap_enthusiast 2 / 957

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

LSMW-Problem
vor 2 Tagen von mazu gelöst 5 / 986
ATC Finding in Smartforms
vor 6 Tagen von sap_enthusiast 2 / 957

Unbeantwortete Forenbeiträge

SFP/SEGW - Fehler beim Rendering
letzen Monat von Manfred K. 1 / 86369
Benutzerdefinierte Felder PSP
January 2026 von Rabea1103 1 / 139621