ALV:Validierung von Daten nach Einfügen aus Zwischenspeicher

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

ALV:Validierung von Daten nach Einfügen aus Zwischenspeicher

Beitrag von Legxis (Specialist / 160 / 90 / 28 ) »
Hallo zusammen,

ich habe hier einen editierbaren ALV und daneben eine Drucktaste, mit der man Daten aus dem Zwischenspeicher in den ALV einfügen kann.
Nachdem die Daten eingefügt sind wird jedoch nicht data_changed gerufen, was bedeutet, dass diese nicht validiert werden. Und selbst wenn man danach Enter drückt passiert dies nicht, da man ja dann nichts an den Daten geändert hat.
Meine Frage ist also, wie ich das lösen könnte. Ist es möglich, data_changed manuell zu rufen, indem man den change protocol selber schreibt? Oder gibt es sonst noch Möglichkeiten?
Im Moment sieht mein Code so aus:

Deklarationen:

Code: Alles auswählen.

* Tabellentypen
TYPES: BEGIN OF ty_itab,
  matnr TYPE matnr,   
  menge TYPE bstmg,  
  werks TYPE ewerk,  
END OF ty_itab.

* interne Tabellen
DATA: t_selektion  TYPE STANDARD TABLE OF ty_selektion.

* ALV Variablen
DATA: go_grid_param    TYPE REF TO cl_gui_alv_grid,
      go_grid_ausgabe  TYPE REF TO cl_gui_alv_grid,
      go_cont_param    TYPE REF TO cl_gui_custom_container,
      go_cont_ausgabe  TYPE REF TO cl_gui_custom_container,
      gt_fcat_param    TYPE lvc_t_fcat,
      gt_fcat_ausgabe  TYPE lvc_t_fcat,
      save_ok          LIKE sy-ucomm,
      ok_code          LIKE sy-ucomm.

* Klassen Variablen
CLASS cl_event_handler DEFINITION DEFERRED.
DATA  go_event_handler TYPE REF TO cl_event_handler.
ALV Aufbau:

Code: Alles auswählen.

FORM alv_param_init.

  DATA: ls_layout  TYPE lvc_s_layo,
        ls_variant TYPE disvariant,
        ls_stable TYPE lvc_s_stbl.

* nur ausführen, wenn das ALV noch nicht existiert (notwendig, falls man vom Folgedynpro zurückklickt)
  IF go_cont_param IS INITIAL.

*   Dynpro Status zuordnen
    SET PF-STATUS 'STATUS'.

*   Custom Container erstellen
    CREATE OBJECT go_cont_param
      EXPORTING
        container_name = 'PARAM_2000'.

*   Grid dem Container zuordnen
    CREATE OBJECT go_grid_param
      EXPORTING
        i_parent = go_cont_param.

*   Event Handlers erstellen
    CREATE OBJECT go_event_handler.
    SET HANDLER go_event_handler->handle_toolbar_param          FOR go_grid_param.
    SET HANDLER go_event_handler->handle_context_menu_param     FOR go_grid_param.
    SET HANDLER go_event_handler->handle_data_changed_param     FOR go_grid_param.
    SET HANDLER go_event_handler->handle_change_finish_param    FOR go_grid_param.

*   Titel
    ls_layout-grid_title = text(001).

*   Mehrfachselektionen
    ls_layout-sel_mode = 'A'.

*   Alle Spalten editierbar machen
    ls_layout-edit = 'X'.

    ls_layout-val_data = 'X'.

*   Layout-Variante des Users laden
    ls_variant-report   = sy-repid.
    ls_variant-username = sy-uname.

*   Fieldcatalogue erstellen
    PERFORM fcat_param_erstellen.

*   Grid erstellen
    CALL METHOD go_grid_param->set_table_for_first_display
      EXPORTING
        is_layout            = ls_layout
        is_variant           = ls_variant
        i_save               = 'A'
      CHANGING
        it_fieldcatalog      = gt_fcat_param
        it_outtab            = t_itab.

*   Editierbare Zeilen aktivieren
    CALL METHOD go_grid_param->set_ready_for_input
      EXPORTING
        i_ready_for_input = 1.

*   Enter als Möglichkeit registrieren, data_changed zu rufen
    CALL METHOD go_grid_param->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_enter.

* Wenn es ALV bereits gibt, dann aktualisieren
  ELSE.

    ls_stable = 'XX'.

    CALL METHOD go_grid_param->refresh_table_display(
      EXPORTING
        is_stable  =  ls_stable ).

  ENDIF.

ENDFORM.                    "alv_param_init
PAI:

Code: Alles auswählen.

FORM user_command_2000.

* Falls der Benutzer etwas geändert hat ohne es vorher zu bestätigen
* wird zuerst data_changed gerufen, bevor die Eingabe verarbeitet wird
  CALL METHOD go_grid_param->check_changed_data.

  save_ok = ok_code.
  CLEAR ok_code.

* Verarbeiten der Benutzereingabe
  CASE save_ok.

*   Programm verlassen, wenn entsprechende Buttons gedrückt wurden
    WHEN 'BACK' OR 'CANCEL' OR 'EXIT'.
      LEAVE PROGRAM.

*   Bei entsprechendem Buttondruck Daten aus dem Zwischenspeicher in ALV einfügen
    WHEN '2000'.

      PERFORM tab_param_einfuegen.

*   Bei entsprechendem Buttondruck das nächste Dynpro öffnen
    WHEN '3000'.

      ...

  ENDCASE.

ENDFORM.                    "user_command_2000
Daten aus Zwischenspeicher einfügen:

Code: Alles auswählen.

FORM tab_param_einfuegen.

  TYPES: BEGIN OF ty_clipdata,
    data TYPE c LENGTH 500,
  END OF ty_clipdata.

  CONSTANTS: h_split TYPE c VALUE cl_bcs_convert=>gc_tab.    " # Zeichen

  DATA: t_clipdata   TYPE STANDARD TABLE OF ty_clipdata,
        wa_clipdata  TYPE ty_clipdata,
        t_clipzeile  TYPE STANDARD TABLE OF ty_clipdata,
        wa_clipzeile TYPE ty_clipdata.

  FIELD-SYMBOLS: <fs_itab> TYPE ty_itab,
                 <fs_feld>      TYPE ANY.

  DATA: ls_stable TYPE lvc_s_stbl.

  CLEAR: wa_clipdata, wa_clipzeile.

  cl_gui_frontend_services=>clipboard_import(
      IMPORTING
         data                 = t_clipdata
       EXCEPTIONS
         cntl_error           = 1
         error_no_gui         = 2
         not_supported_by_gui = 3
         OTHERS               = 4 ).

  IF sy-subrc <> 0.
    MESSAGE 'Error beim Importieren der Daten aus dem Zwischenspeicher.' TYPE 'E'.
    EXIT.
  ENDIF.

  LOOP AT t_clipdata INTO wa_clipdata.
    SPLIT wa_clipdata AT h_split INTO TABLE t_clipzeile.
    APPEND INITIAL LINE TO t_itab ASSIGNING <fs_itab>.
    LOOP AT t_clipzeile INTO wa_clipzeile.
      ASSIGN COMPONENT sy-tabix OF STRUCTURE <fs_itab> TO <fs_feld>.
      IF sy-subrc = 0.
        <fs_feld> = wa_clipzeile-data.
      ENDIF.
    ENDLOOP.
  ENDLOOP.

ENDFORM.                    "tab_param_einfuegen
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )

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


Re: ALV:Validierung von Daten nach Einfügen aus Zwischenspei

Beitrag von Legxis (Specialist / 160 / 90 / 28 ) »
Tut mir leid das ich nochmal nachfrage, aber weiß denn hier niemand was zu? Ich wäre sehr dankbar für Hilfe
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )

Seite 1 von 1

Vergleichbare Themen

1
Antw.
894
Views
Einfügen eines ZExits in einer Validierung
von DarkBlue » 15.12.2005 10:39 • Verfasst in ABAP® Core
4
Antw.
2403
Views
Welche Strategie verfolgen zur Validierung von Daten?
von Nordlicht » 21.03.2007 08:55 • Verfasst in Dialogprogrammierung
1
Antw.
2915
Views
Daten aus SAP in Excel einfügen
von bs112 » 24.02.2017 10:31 • Verfasst in ABAP® für Anfänger
1
Antw.
1635
Views
Daten in ALV einfügen - CL_GUI_ALV_GRID
von RIG » 11.09.2019 16:08 • Verfasst in ABAP Objects®
1
Antw.
3936
Views
Table Control, Daten einfügen, verändern oder löschen??
von Buerger » 19.10.2009 05:27 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag

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

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.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141