gelöst get_selected_rows


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

gelöst get_selected_rows

Beitragvon Andrzej » 15.02.2017, 13:38

Hallo Forum,

ich arbeite an folgender Aufgabe:
ich habe eine Interne Tabelle die in einem ALV ausgegeben wird.
Dort habe ich einen editier button angelegt damit einzelne Einträge anwählbar sind.
Damit hat der Nutzer die Möglichkeit z.b. einen Namen zu ändern.

Ich arbeite hier mit dem Baustein get_selected_rows.
Es funktioniert soweit auch super.

Jedoch wenn ich in der Eingabe Maske des Funktionsbausteins Get_Values, ABBRECHEN wähle.
Und den Vorgang wiederhole arbeitet mein get_selected_rows nicht mehr.

Kann mir jemand da eine Antwort geben wie das get_selected_rows beim wiederholten male arbeitet und wieso er keinen Index liefert.

Vielen Dank

Code: Alles auswählen
FORM edit_student.

  DATA: lt_fields TYPE STANDARD TABLE OF sval,
        ls_fields TYPE sval,
        lv_returncode(1) TYPE c.

*&---------------------------------------------------------------------*
* lokale Variablen für Studentendaten
*&---------------------------------------------------------------------*

  DATA lv_zmatrnr TYPE zadc_t_student-zmatrnr.
  DATA lv_zsname TYPE zadc_t_student-zsname.
  DATA lv_zsvorname TYPE zadc_t_student-zsvorname.
  DATA lv_zsstudiengang TYPE zadc_t_student-zsstudiengang.

*    lokale variablen
  DATA  lt_rows TYPE lvc_t_row.
  DATA  ls_row  TYPE lvc_s_row.


clear lt_rows.
free ls_row.

*&---------------------------------------------------------------------*
* Methode zur Zeilenselektion
*&---------------------------------------------------------------------*

  CALL METHOD grid_r->get_selected_rows
    IMPORTING
      et_index_rows = lt_rows.
*      et_row_no     =



*  SORT lt_rows BY index DESCENDING.

CLEAR wa_studenten.

  LOOP AT lt_rows INTO ls_row.
    READ TABLE it_studenten INTO wa_studenten INDEX ls_row-index .
  ENDLOOP.

  lv_zmatrnr = wa_studenten-zmatrnr.
  lv_zsname = wa_studenten-zsname.
  lv_zsstudiengang = wa_studenten-zsstudiengang.
  lv_zsvorname = wa_studenten-zsvorname.

  ls_fields-tabname = 'ZADC_T_STUDENT'.
  ls_fields-fieldname = 'ZSVORNAME'.
  ls_fields-fieldtext = 'Vorname'.
  ls_fields-field_obl = 'X'.
  ls_fields-value = lv_zsvorname.
  APPEND ls_fields TO lt_fields.

  CLEAR ls_fields.
  ls_fields-tabname = 'ZADC_T_STUDENT'.
  ls_fields-fieldname = 'ZSNAME'.
  ls_fields-fieldtext = 'Nachname'.
  ls_fields-field_obl = 'X' .
  ls_fields-value = lv_zsname.
  APPEND ls_fields TO lt_fields.

  CLEAR ls_fields.
  ls_fields-tabname = 'ZADC_T_STUDENT'.
  ls_fields-fieldname = 'ZSSTUDIENGANG'.
  ls_fields-fieldtext = 'Studiengang'.
  ls_fields-field_obl = 'X' .
  ls_fields-value = lv_zsstudiengang.
  APPEND ls_fields TO lt_fields.


  CALL FUNCTION 'POPUP_GET_VALUES'
    EXPORTING
      no_value_check  = ' '
      popup_title     = 'Bitte geben Sie Ihre Veränderungen ein: '
*     START_COLUMN    = '5'
*     START_ROW       = '5'
    IMPORTING
      returncode      = lv_returncode
    TABLES
      fields          = lt_fields
    EXCEPTIONS
      error_in_fields = 1
      OTHERS          = 2.
  IF lv_returncode = 'A'.
    free grid_r.
    CLEAR ok_code.
* Implement suitable error handling here
    RETURN.
  ENDIF.

* wa_studenten. CLEAR

  LOOP AT lt_fields INTO ls_fields.

    CASE ls_fields-fieldname.
      WHEN 'ZSVORNAME' .
        wa_studenten-zsvorname = ls_fields-value.
        UPDATE zadc_t_student SET zsvorname = ls_fields-value
        WHERE zmatrnr = lv_zmatrnr.
      WHEN 'ZSNAME' .
        wa_studenten-zmatrnr = ls_fields-value.
        UPDATE zadc_t_student SET zsname = ls_fields-value
        WHERE zmatrnr = lv_zmatrnr.
      WHEN 'ZSSTUDIENGANG' .
        wa_studenten-zsstudiengang = ls_fields-value.
        UPDATE zadc_t_student SET zsstudiengang = ls_fields-value
        WHERE zmatrnr = lv_zmatrnr.
      WHEN OTHERS.
    ENDCASE.
  ENDLOOP.

*  CLEAR it_studenten.

  SELECT * FROM zadc_t_student INTO CORRESPONDING FIELDS OF TABLE it_studenten.

  grid_r->refresh_table_display( ).


ENDFORM.                    "edit_student
 
Andrzej
ForumUser
 
Beiträge: 26
Registriert: 16.06.2015, 09:32
Dank erhalten: 0 mal
Ich bin: Student/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: get_selected_rows

Beitragvon Thanatos82 » 15.02.2017, 13:46

Hi,

wenn du auf Abbrechen gehst erhält dein Returncode wohl den Wert 'A'. Damit kommst du in deine IF-Kondition nach dem Funktionsbaustein. In diesem führst du ein FREE grid_r aus. Du zerstörst dein Objekt damit. Siehe F1-Hilfe zu FREE auf Objekten.
Dadurch kann dein get_selected_rows nicht mehr arbeiten weil es das Objekt grid_r nach dem FREE nicht mehr gibt.
Gruß,
der Matze
Thanatos82
Expert
 
Beiträge: 663
Registriert: 13.09.2012, 13:01
Wohnort: Hagen
Dank erhalten: 113 mal
Ich bin: Entwickler/in

Re: get_selected_rows

Beitragvon Andrzej » 15.02.2017, 14:18

vielen dank schon mal für die Antwort.

Habe den Befehl auskommentiert und es funktioniert leider immer noch nicht..
Andrzej
ForumUser
 
Beiträge: 26
Registriert: 16.06.2015, 09:32
Dank erhalten: 0 mal
Ich bin: Student/in

Re: get_selected_rows

Beitragvon Thanatos82 » 15.02.2017, 14:21

Hast du mal gedebuggt?

Schau dir mal an was genau mit den notwendigen Variablen und Objekten passiert und ob sie überhaupt gefüllt sind.
Ohne tiefer ins Detail zu gehen sieht es sonst erstmal nämlich nicht so falsch aus. Hast du eventuell irgendwo anders noch ein FREE grid_r ?
Gruß,
der Matze
Thanatos82
Expert
 
Beiträge: 663
Registriert: 13.09.2012, 13:01
Wohnort: Hagen
Dank erhalten: 113 mal
Ich bin: Entwickler/in

Re: get_selected_rows

Beitragvon Andrzej » 15.02.2017, 14:26

ne das war mein einziger free grid..

wenn ich es debugge läuft er beim erstenmal komplett alles durch.. sobald ich einmal abbreche und nochmal editieren möchte

geht er erst gar nicht in meine loop schleife rein..sondern überspringt diese..

CALL METHOD grid_r->get_selected_rows
IMPORTING
et_index_rows = lt_rows.
* et_row_no =


* SORT lt_rows BY index DESCENDING.

CLEAR wa_studenten.

LOOP AT lt_rows INTO ls_row.
READ TABLE it_studenten INTO wa_studenten INDEX ls_row-index .
ENDLOOP.
Andrzej
ForumUser
 
Beiträge: 26
Registriert: 16.06.2015, 09:32
Dank erhalten: 0 mal
Ich bin: Student/in

Re: get_selected_rows

Beitragvon Thanatos82 » 15.02.2017, 14:36

Ist grid_r vor dem Aufruf get_selected_row denn auch besetzt oder initial?
Wenn das Programm über deinen Loop hinweg geht heißt das ja, dass keine selektierte Zeile gefunden wurde.
Ggf. ist das nur ein Handhabungsfehler?! Hast du nach dem Abbrechen die Zeilen mal neu markiert oder einfach mal andere markiert?

Nochmal für mein Verständnis:
1. du rufst das alles auf
2. anstatt Werte einzutragen gehst du auf "Abbrechen"
3. Wenn du es erneut auffrufst gibt es die Fehler
Gruß,
der Matze
Thanatos82
Expert
 
Beiträge: 663
Registriert: 13.09.2012, 13:01
Wohnort: Hagen
Dank erhalten: 113 mal
Ich bin: Entwickler/in

Re: get_selected_rows

Beitragvon Andrzej » 15.02.2017, 14:45

sobald ich es erneut aufrufe liefert mein get_selected_rows keinen index mehr...

Zum Verständnis:

1. Ich wähle einen Eintrag aus und wähle editieren.
2. es erscheint ein Pop Up mit den Werten die er aus dem ALV sich zieht
3. ich breche diese Maske ab.. (Pop Up get Values)
4. wähle wieder editieren im ALV den fange ich mit einem ok_code ab. Im debugger zeigt er nun keinen ermittelten Index mehr aus dem get_selected_rows
5. geht daher nicht in meinen Loop rein


ich habe im internet von diesem fehler bei get_selected_rows öfters gelesen... wie z.B. hier

https://archive.sap.com/discussions/thread/1515626
Zuletzt geändert von Andrzej am 15.02.2017, 15:09, insgesamt 1-mal geändert.
Andrzej
ForumUser
 
Beiträge: 26
Registriert: 16.06.2015, 09:32
Dank erhalten: 0 mal
Ich bin: Student/in

Re: get_selected_rows

Beitragvon Andrzej » 15.02.2017, 15:05

es scheint mir das die Methode get_selected_rows beim zweiten Nutzen nicht wirklich den Index liefert
Andrzej
ForumUser
 
Beiträge: 26
Registriert: 16.06.2015, 09:32
Dank erhalten: 0 mal
Ich bin: Student/in

Re: get_selected_rows

Beitragvon black_adept » 15.02.2017, 15:16

Hallo,

wenn ich das "FREE GRID" sehe gehe ich mal davon aus, dass du den Grid mehrfach aufbaust ( Breakpoint im Debugger da wo du den Constructor aufrufst ), sonst wäre das ja gar nicht nötig gewesen. Wenn das der Fall sein sollte sorge dafür, dass das Grid nur 1x erzeugt wird - dann wird es wohl auch mit dem get_selected_rows funktionieren.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de
black_adept
Top Expert
 
Beiträge: 2482
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 318 mal
Ich bin: Freiberufler/in

Re: get_selected_rows

Beitragvon Andrzej » 15.02.2017, 15:27

black_adept hat geschrieben:Hallo,

wenn ich das "FREE GRID" sehe gehe ich mal davon aus, dass du den Grid mehrfach aufbaust ( Breakpoint im Debugger da wo du den Constructor aufrufst ), sonst wäre das ja gar nicht nötig gewesen. Wenn das der Fall sein sollte sorge dafür, dass das Grid nur 1x erzeugt wird - dann wird es wohl auch mit dem get_selected_rows funktionieren.


habe das Free Grid rausgenommen...das Objekte erzeuge ich in einem Modul create_control welches ich im PBO des ALV ausführe
Andrzej
ForumUser
 
Beiträge: 26
Registriert: 16.06.2015, 09:32
Dank erhalten: 0 mal
Ich bin: Student/in

Re: get_selected_rows

Beitragvon Andrzej » 15.02.2017, 16:22

Problem ist gelöst..

es lag am Objekt.. ich habe das ganze Programm zuvor aus einer Kopie übernommen daher gab es wohl Probleme mit dem Objekt.. vom Coding her war alles okay..
im Ursprungsprogramm funktioniert ist..
Andrzej
ForumUser
 
Beiträge: 26
Registriert: 16.06.2015, 09:32
Dank erhalten: 0 mal
Ich bin: Student/in


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
Char Feld auf Integer
vor 5 Stunden von black_adept 1 Antw.
Datenbanksatz schon vorhanden?!
vor 10 Stunden von ralf.wenzel 1 Antw.
ALV Summierungsidee
vor 16 Stunden von Studi 0 Antw.
ARCHIVOBJECT_CREATE_FILE
vor 16 Stunden von a-dead-trousers 2 Antw.
Lokal abgelegte Dokumente in Archiv via Archive Link
vor 18 Stunden von wettegg 0 Antw.

  Ähnliche Beiträge beta
Keine Beiträge gefunden - versuche es mit der erweiterten Suche.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

Feedback ...?

Was können wir verbessern? Hinterlasse deine Kontaktdaten, wenn du eine direkte Antwort möchtest.

... Absenden!