Reuse ALV User command

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

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

Reuse ALV User command

Beitrag von Niels (ForumUser / 77 / 18 / 9 ) »
Hallo zusammen,

ich gebe eine Tabelle mit dem FuBa Reuse_ALV_GRID_DISPLAY aus. Das Funktioniert auch so weit. Jetzt möchte ich, wenn der User den Speicherbutton drückt, eien routine aufgerufen wird.

Der Code den ich bisher geschrieben habe sieht so aus

Code: Alles auswählen.

FORM call_alv.

v_rep_id = sy-repid.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    I_GRID_TITLE = 'JUHU'
    IT_FIELDCAT = gt_feldkatalog
    i_callback_program        = v_rep_id
    i_callback_pf_status_set  = 'PF'
    i_callback_user_command   = 'USER_COMMAND'
*   is_layout = gs_layout
  TABLES
    T_OUTTAB = lt_test
        .
ENDFORM.

Code: Alles auswählen.

FORM USER_COMMAND USING lv_okcode LIKE sy-ucomm l_selfield
      TYPE slis_selfield.

  lv_okcode = sy-ucomm.

  case lv_okcode.
    WHEN 'SAVE'.
      DATA: ref_grid TYPE REF TO cl_gui_alv_grid.

      IF ref_grid IS INITIAL.
        CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
          IMPORTING
            e_grid = ref_grid.
      ENDIF.

      IF NOT ref_grid IS INITIAL.
        CALL METHOD ref_grid->check_changed_data.
      ENDIF.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.

    ENDCASE.

ENDFORM.
Ich verstehe jetzt nicht wie ich in den Form rein komme oder ist das ein komplett falscher Ansatz mit das in eine Form Routine zu schreiben??
Den status habe ich schon angelegt und auch benannt und Aktiviert.

Vielen Dank schon mal

gruß

Niels

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


Re: Reuse ALV User command

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Ich galub du musst bei I_CALLBACK_PF_STATUS_SET eine Formroutine angeben, welche den Code zum Setzen des GUI Status enthält.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Niels

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Reuse ALV User command

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Niels hat geschrieben:Ich verstehe jetzt nicht wie ich in den Form rein komme oder ist das ein komplett falscher Ansatz mit das in eine Form Routine zu schreiben??
Alles richtig, der ALV ruft die FORM Routine selbst auf, die du beim ALV-Aufruf angegeben hast.

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
Niels

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Reuse ALV User command

Beitrag von Niels (ForumUser / 77 / 18 / 9 ) »
Hallo,

Danke euch beiden für die Antwort. Ich habe den PF Status 'PF' so erstellt

Code: Alles auswählen.

FORM PF USING rt_extab TYPE slis_t_extab.
   SET PF-STATUS 'ZTG_STAT'.
 ENDFORM.  
und es Funktioniert.

hat am Mittwoch noch nicht Funktioniert obwohl ich den PF status da auch schon gesetzt hatte, aber da es jetzt Funktioniert.

Vielen Dank noch mal
Zuletzt geändert von Niels am 28.08.2015 09:56, insgesamt 2-mal geändert.

Re: Reuse ALV User command

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
Niels hat geschrieben:und es Funktioniert.
du solltest aber trotzdem die vom ALV ausgeblendeten Funktionen beim setzten des Status berücksichtigen:

Code: Alles auswählen.

FORM PF USING rt_extab TYPE slis_t_extab.
   SET PF-STATUS 'ZTG_STAT' EXCLUDING rt_extab.
 ENDFORM.  
Sonst werden Funktionen im Status angeboten, die nicht zwingend sinn machen (z.B. Filter löschen, wenn gar kein Filter gesetzt wurde).
Gruß Hendrik

Re: Reuse ALV User command

Beitrag von Niels (ForumUser / 77 / 18 / 9 ) »
Ok Danke dir

Jetzt noch eine andere Frage: Wie kann ich auf die geänderten Werte zugreifen.

Muss ich eine Klasse erstellen wo ich dann die Methode Handle_data_change drinnen definiere oder gibt es noch eine andere Möglichkeit?

Danke schon mal

Re: Reuse ALV User command

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
Niels hat geschrieben:Wie kann ich auf die geänderten Werte zugreifen.
Da hast du das Wichtigste bereits in der FORM UsER_COMMAND enthalten:

Code: Alles auswählen.

DATA: ref_grid TYPE REF TO cl_gui_alv_grid.

      IF ref_grid IS INITIAL.
        CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
          IMPORTING
            e_grid = ref_grid.
      ENDIF.

      IF NOT ref_grid IS INITIAL.
        CALL METHOD ref_grid->check_changed_data 
          importing e_valid = l_valid.
      ENDIF.

     IF l_valid IS INITIAL.
      EXIT.
    ENDIF.
Die geänderten Daten werden nicht automatisch vom FrontEnd ans Backend übertragen. Dies machst du mittels check_changed_data.
In deinem Coding fehlt nur das Handling für den Fall, dass der User etwas "unerlaubtes" eingeben hat. Der ALV informiert den User per Fehlerpopup darüber, du darst dann aber nicht speichern/verarbeiten.

Die geänderten Daten stehen dann in der ITAB, die du dem ALV übergeben hast (=lt_test).
Gruß Hendrik

Re: Reuse ALV User command

Beitrag von Niels (ForumUser / 77 / 18 / 9 ) »
Gibt es nicht eine Tabelle wo die Änderungen drin stehen?
Ich habe ein Programm schon mal geschrieben wo ich auch mit dem handle_data_changed die geänderte daten auslese. Da mache ich einen Loop innerhalb der Methode auf die er_data_change. Das Coding sieht so aus.

Code: Alles auswählen.

 LOOP AT er_data_changed->mt_mod_cells INTO ls_good WHERE fieldname =
   'BISMT'.
...

ENDLOOP.
Da dies ja in einer Methode steht, musste ich dies ja in einer Klasse definieren. Gibt es denn da auch eine Möglichkeit? Wenn ich eine Routine schreibe wo ich schaue ob der Wert geändert wurde in der lt_test, erfinde ich das Rad ja neu. Oder verstehe ich da etwas falsch?

Re: Reuse ALV User command

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
Niels hat geschrieben:Gibt es nicht eine Tabelle wo die Änderungen drin stehen?
Nein, in der lt_test stehen die Daten dann so drin wie am FrontEnd angezeigt.
Niels hat geschrieben: Wenn ich eine Routine schreibe wo ich schaue ob der Wert geändert wurde in der lt_test, erfinde ich das Rad ja neu. Oder verstehe ich da etwas falsch?
Jein, es gibt das Ereignis on_data_change des ALVs. Dort soll aber eigentlich verprobt werden ob die Eingaben korrekt sind. Man kann das Event verwenden, um sich einen Änderungslog aufzubauen. Ob es sinnvoll ist muss man selber entscheiden. Kommt auf die Änderungen an (nur Werte bestehender Sätze ändern, Sätze erfassen oder löschen etc.).

Der REUSE_ALV_GRID_LVC bietet die Möglichkeit eine CALLBACK-Form für ON_DATA_CHANGE zu verarbeiten (Tabelle gt_events).
Dann brauch man sich keine eigen Klasse schreiben.

Code: Alles auswählen.

  gs_events-name = 'DATA_CHANGED'.
  gs_events-form = 'CALLER_EXIT'.
  APPEND gs_events TO gt_events.

FORM caller_exit USING rr_data_changed TYPE REF TO
                 cl_alv_changed_data_protocol.
ENDFORM.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
Niels

Gruß Hendrik

Re: Reuse ALV User command

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
JHM hat geschrieben:Der REUSE_ALV_GRID_LVC bietet die Möglichkeit eine CALLBACK-Form für ON_DATA_CHANGE zu verarbeiten (Tabelle gt_events).
Dann brauch man sich keine eigen Klasse schreiben.

Code: Alles auswählen.

  gs_events-name = 'DATA_CHANGED'.
  gs_events-form = 'CALLER_EXIT'.
  APPEND gs_events TO gt_events.

FORM caller_exit USING rr_data_changed TYPE REF TO
                 cl_alv_changed_data_protocol.
ENDFORM.
Da ich den REUSE-Baustein ewig nicht mehr verwendet habe, mir aber diese Frage gestellt wurde, reiche ich die mal weiter: Gibt es eine abschließende Liste aller Events, die man so aufrufen kann?
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Reuse ALV User command

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
ralf.wenzel hat geschrieben:Gibt es eine abschließende Liste aller Events, die man so aufrufen kann?
Klar -> Include LSLVC_FULLSCREENF01 -> FORM events_get

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
ralf.wenzel

Gruß Hendrik

Seite 1 von 1

Vergleichbare Themen

1
Antw.
911
Views
Reuse ALV makieren
von dkast » 24.05.2018 15:36 • Verfasst in ABAP® für Anfänger
3
Antw.
2433
Views
Reuse ALV und Feld P
von Icke0801 » 19.12.2016 14:01 • Verfasst in Dialogprogrammierung
3
Antw.
2507
Views
ALV (REUSE) aktualisieren
von RiffRaff » 25.03.2005 13:29 • Verfasst in ABAP® Core
5
Antw.
3147
Views
REUSE ALV und Filter
von Google » 06.06.2007 16:12 • Verfasst in ABAP® Core
2
Antw.
1664
Views
Drucken mit ALV (REUSE)
von RiffRaff » 12.05.2005 09:56 • Verfasst in ABAP® Core

Ü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

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

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

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140