eingabebereiter ALV - Daten aus Dynpro übertragen

Getting started ... Alles für einen gelungenen Start.
30 Beiträge • Vorherige Seite 2 von 2 (current)
30 Beiträge Vorherige Seite 2 von 2 (current)

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von JHM (Top Expert / 1189 / 1 / 196 ) »
kkauerau hat geschrieben: Habt ihr eine Idee, warum der ALV einen Dump bringt, sobald man die zweite Zeile ausfüllen möchte?
Da bräuchte man mehr Details des Dumps...
Gruß Hendrik

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


Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
Hallo.

Hier der Text zum Dump ..
Laufzeitfehler
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
|Datum |Uhrzeit |App.Server | |Mandant|Halten|Laufzeitfehler|Ausnahme|Abgebrochenes Programm |WP-Index|Transaktions-ID |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
|10.04.2017|10:41:22|q4de3csy080_KS2_00| |100 |C |MESSAGE_TYPE_X| |CL_GUI_ALV_GRID===============CP| 4 |63C91DE72288F1A580F6005056883A78|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
Wie bekomme ich den Langtext aus dem System raus?

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
JHM hat geschrieben:Wenn du Prüfungen einbauen willst: z.B. Material in Bestellposition vorhanden, dann gehören diese in das EVENT ON DATA CHANGE. Dann läuft das ganze Fehlerhandling über den ALV, aber das ist nicht unbedingt trivial.
Hallo.

also ... ich habe den EventHandler deaktiviert und alles umgebaut. Das funzt auch. :-)
Jetzt brauche ich den aber wieder, um die eingegebenen Daten zu prüfen ... Was meinst du mit "das ist nicht unbedingt trivial"? - Ich habe den EventHandler im ersten Schritt wieder aktiviert - und schwupps, funktioniert das Codig nicht mehr, d.h. ich habe keine Daten aus dem GRID mehr im ABAP-Teil :-(

Ich bin ratlos ...

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von JHM (Top Expert / 1189 / 1 / 196 ) »
kkauerau hat geschrieben:Jetzt brauche ich den aber wieder, um die eingegebenen Daten zu prüfen ... Was meinst du mit "das ist nicht unbedingt trivial"?
Man muss die Fehlermeldung ins ALV-Log bekommen, dazu muss man aber erst mal die Änderungen auswerten. Dann fängt das Spiel an in dem man prüft ob der User die Fehlerbereinigt hat um diese wieder aus dem Protokoll zu bekommen.
kkauerau hat geschrieben: Ich habe den EventHandler im ersten Schritt wieder aktiviert - und schwupps, funktioniert das Codig nicht mehr, d.h. ich habe keine Daten aus dem GRID mehr im ABAP-Teil :-(
Durch das reine aktiveren eines Events sollte der Datentransport weiter funktionieren oder hast du weiteres Coding im Event-Handler hinterlegt? Wenn ja welches?
Gruß Hendrik

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
Hallo.

Der EventHandler macht folgendes:

Code: Alles auswählen.

 METHOD handle_data_changed.
    PERFORM check_mat_vorhanden.
    PERFORM check_mat_duplikate.
  ENDMETHOD.


FORM check_mat_vorhanden.
  DATA:
    lv_delflag TYPE bapimatall-del_flag,
    lv_return  TYPE bapireturn1,
    lv_stbl    TYPE lvc_s_stbl,
    msg        TYPE string.

  IF gs_position-material EQ '' OR
     gs_position-material EQ ' ' OR
     gs_position-material IS INITIAL.
    msg = 'Bitte prüfen: Feld Material ist ungültig!'.
  ELSE.
    CALL FUNCTION 'BAPI_MATERIAL_EXISTENCECHECK' "Check Existence of Material
      EXPORTING
        material      = gs_position-material  " Material No.
      IMPORTING
        deletion_flag = lv_delflag            " Material is flagged for deletion
        return        = lv_return.            " Return Parameter

    IF lv_return-type EQ 'E'.
      CONCATENATE 'Bitte prüfen: Material ehlerhaft:'
          lv_return-message INTO msg SEPARATED BY space.

    ENDIF.
  ENDIF.

  IF msg IS NOT INITIAL.
    " dem User zeigen, wo genau es klemmt:
    lv_stbl-col = 'X'.
    CALL METHOD go_alv->refresh_table_display
      EXPORTING
        is_stable = lv_stbl.

    MESSAGE msg TYPE lv_return-type.
  ENDIF.

ENDFORM.   

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von JHM (Top Expert / 1189 / 1 / 196 ) »
Wie/wo füllst du gs_position?

Code: Alles auswählen.

 IF gs_position-material EQ '' OR
     gs_position-material EQ ' ' OR
     gs_position-material IS INITIAL.
    msg = 'Bitte prüfen: Feld Material ist ungültig!'.
  ELSE.
ON_DATA_CHANGE kommt mit einem Objekt vom Type CL_ALV_CHANGED_DATA_PROTOCOL um die Ecke. Darin findest du:
MT_MOD_CELLS
MT_DELETED_ROWS
MT_INSERTED_ROWS
Die du Auswerten muss um an die Änderungen des User zu kommen. Dagegen sollte dann auch die Prüfung laufen.

AUTSCH:

Code: Alles auswählen.

    CALL METHOD go_alv->refresh_table_display
      EXPORTING
        is_stable = lv_stbl.

    MESSAGE msg TYPE lv_return-type.
Du darfst den ALV nicht refreshen wenn du im Eventhandler bist! Der Transport der Änderungen vom Frontend sind zu diesem Zeitpunkt noch nicht in die ITAB übertragen worden. Für den Refresh verwendest du den "alten" Stand vor den Useränderungen. Dadurch "überschreibst" du die Useränderungen am FrontEnd.

Die Meldung musst du ins ALV-Fehlerprotokoll stopfen incl. Referenz auf die falsche Zelle:

CL_ALV_CHANGED_DATA_PROTOCOL=>ADD_PROTOCOL_ENTRY I_MSGID
EXPORTING
I_MSGTY
I_MSGNO
I_MSGV1
I_MSGV2
I_MSGV3
I_MSGV4
I_FIELDNAME
I_ROW_ID
I_TABIX

Dann den Eventhandler zu ende laufen lassen und die fehlerhafte Zelle ist rot markiert und eine Fehlermeldung/-protokoll wird angezeigt.
Gruß Hendrik

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
Hallo Hendrik.

Danke für die Tips! Ich habe das Teil umgebaut und es klappt. - Halbwegs zumindest ... Wenn ich 2x im ALV Fehlermeldungen provoziere, stürzt der mir anschließend mit einem Dump ab. - Ist das immer so?

Bild

Oder wo ist mein Fehler diesmal?

Code: Alles auswählen.

  METHOD handle_data_changed.
    DATA lv_msg TYPE bapireturn1.

* auf Vorhandensein des Materials prüfen
    PERFORM check_mat_vorhanden_evt USING er_data_changed->mt_mod_cells
                                    CHANGING lv_msg.
    IF lv_msg IS NOT INITIAL.
      CALL METHOD er_data_changed->add_protocol_entry
        EXPORTING
          i_msgid     = lv_msg-id
          i_msgty     = lv_msg-type
          i_msgno     = lv_msg-number
          i_msgv1     = lv_msg-message
          i_fieldname = 'MATERIAL' .
    ENDIF.
  ENDMETHOD.

FORM check_mat_vorhanden_evt USING lt_mod_cells TYPE lvc_t_modi
                             CHANGING rv_msg TYPE bapireturn1.
  DATA:   ls_mod_cells LIKE LINE OF lt_mod_cells,
          lv_rowid     TYPE         i,
          lv_delflag   TYPE         bapimatall-del_flag,
          lv_return    TYPE         bapireturn1.

  lv_rowid = 1.
  CLEAR: gt_pos_daten, gs_position.

  LOOP AT lt_mod_cells INTO ls_mod_cells.
    IF ls_mod_cells-row_id EQ lv_rowid .
      IF ls_mod_cells-fieldname = 'MATERIAL'.
        gs_position-material = ls_mod_cells-value.
      ENDIF.
    ENDIF.

    IF gs_position-material IS NOT INITIAL.
      APPEND gs_position TO  gt_pos_daten.
      lv_rowid = lv_rowid + 1.

      IF gs_position-material EQ '' OR gs_position-material EQ ' '
                                    OR gs_position-material IS INITIAL.
        rv_msg-message = 'Bitte prüfen: Feld Material ist ungültig!'.
      ELSE.
        CALL FUNCTION 'BAPI_MATERIAL_EXISTENCECHECK' "Check Existence of Material
          EXPORTING
            material      = gs_position-material  " Material No.
          IMPORTING
            deletion_flag = lv_delflag            " Material is flagged for deletion
            return        = lv_return.            " Return Parameter
        IF lv_return-type EQ 'E'.
          rv_msg = lv_return. "-message INTO msg SEPARATED BY space.
        ENDIF.

      ENDIF.
    ENDIF.
  ENDLOOP.
ENDFORM.


Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von a-dead-trousers (Top Expert / 4282 / 214 / 1141 ) »
Wenn ich mir die Codestelle laut Dump (CL_GUI_ALV_GRID===============CM02X) anschaue, finde ich die Methode CL_GUI_ALV_GRID=>SAVE_DATA.
ca. auf Zeile 274 ist ein Coding zu finden, das eine Feldzuweisung mittels FIELDNAME vornimmt und offensichtlich fehlschlägt.

Code: Alles auswählen.

*... This Row does not exist in the data table -> append to output table
          read table mr_data_changed->mt_protocol into ls_msg
                     with key msgty  = 'E'
                              row_id = ls_good_cells-row_id.
          if sy-subrc eq 0.
            assign component ls_msg-fieldname
                             of structure <ls_wa> to <l_field>.
            if sy-subrc ne 0.
              message x000(0k).
            endif.
            clear <l_field>.
          endif.
          append <ls_wa> to <tab1>.
Ergo wird beim Aufruf der Methode ADD_PROTOCOL_ENTRY der falsche Feldname übergeben.
Am Besten du debuggst diese Stelle und schaust dir an was in <ls_wa> überhaupt drinnensteht.

lg ADT

EDIT: Ich glaube du kommst mit der ROWID durcheinander.
Die ROWID ist die Position der Zeile in der Anzeige des ALV-Grid. Das entspricht jedoch nicht dem INDEX in der internen Tabelle, da das Grid ja noch alternativ sortiert sein kann.
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: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
Hallo.

Danke, jetzt läuft es stabiler!
Aber warum färbt er das Feld nicht mit ein?

Bild

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Schicker sieht's übrigens aus, wenn du das Protokoll in einem eigenen Bereich einbettest (sofern Platz vorhanden ist).
Dazu beim CONSTRUCTOR vom ALV-Grid im Parameter i_APPLOGPARENT den Container für das Log angeben.

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
OK; ich versuche es. - Aber warum zeigt der meine eigene Meldung nicht mit in der Liste an? Und warum wird das Feld nicht rot?

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von JHM (Top Expert / 1189 / 1 / 196 ) »
kkauerau hat geschrieben:Aber warum zeigt der meine eigene Meldung nicht mit in der Liste an? Und warum wird das Feld nicht rot?
Weil du dem Protokoll mit teilen musst, welches Feld genau betroffen ist:

Code: Alles auswählen.

CALL METHOD er_data_changed->add_protocol_entry
        EXPORTING
          i_msgid     = lv_msg-id
          i_msgty     = lv_msg-type
          i_msgno     = lv_msg-number
          i_msgv1     = lv_msg-message
          i_fieldname = 'MATERIAL' 
          I_ROW_ID     = ?                        "<- Welche Zeile der Anzeige hat den Fehler.
Die Zeile bekommst du wiederum aus den geänderten Daten:

Code: Alles auswählen.

LOOP AT lt_mod_cells INTO ls_mod_cells WHERE fieldname = 'MATNR'.
IF ls_mod_cells-value EQ '' OR 
  ls_mod_cells-value EQ ' ' OR 
  ls_mod_cells IS INITIAL.
        rv_msg-message = 'Bitte prüfen: Feld Material ist ungültig!'.
ELSE.
 CALL FUNCTION 'BAPI_MATERIAL_EXISTENCECHECK'  ... "hier muss ls_mod_cells in eine MATNR konvertiert werden!
   IF lv_return-type EQ 'E'.
          rv_msg = lv_return. "-message INTO msg SEPARATED BY space.
    ENDIF.
ENDIF

IF rv_msg is not Initial.
CALL METHOD er_data_changed->add_protocol_entry
        EXPORTING
          i_msgid     = lv_msg-id
          i_msgty     = lv_msg-type
          i_msgno     = lv_msg-number
          i_msgv1     = lv_msg-message
          i_fieldname = ls_mod_cells-fieldname
          I_ROW_ID     = ls_mod_cells-row_id     
  CLEAR rv_msg.
ENDIF.
ENDLOOP.
Gruß Hendrik

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
Hallo.
Weil du dem Protokoll mit teilen musst, welches Feld genau betroffen ist:
Danke, danke, danke!
Die Umwandlung der ls-Variable in eine MatNr für den FuBa hab ich schon rausgefunden, aber auf die RowID wäre ich nicht gekommen!

Eine Frage noch: Wenn ich vom EventHandler alles habe erfolgreich prüfen lassen, und keine Fehler mehr auftreten, darf der User speichern. Bei Klick auf den Button wird ok_code mit "SAVE" belegt und der entspr. Code durchlaufen, der prüft, ob der User evtl ein Material doppelt eingegeben hat (das klappt im Event Handler nicht, weil ich da nicht die gesamten inzwischen eingegebenen Daten habe). Falls nicht, können die eingegebenen Daten abgespeichert werden.

Soweit funktioniert das auch, aber irgendiwe immer nur, wenn ich den EventHandler deaktiviert habe. Wenn der aktiv ist, kommen aber keine Daten im ABAP-Teil an *?* Woran kann das liegen?

Ich wäre echt dankbar für weiterführende Hilfestellungen ... Ich komme da nicht mehr mit ...

Danke euch!

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
Hallo nochmal.

Hier mein Coding, evtl hilft das ja, das Problem einzugrenzen:

Code: Alles auswählen.

PROCESS BEFORE OUTPUT.
  MODULE set_pf_status_0200.
  CHAIN.
    FIELD: zlrp_emc_kopf_s-re_datum, zlrp_emc_kopf_s-werks,
           zlrp_emc_kopf_s-buchgs_datum, zlrp_emc_kopf_s-lgort,
           zlrp_emc_kopf_s-lieferant, zlrp_emc_kopf_s-re_nr,
           zlrp_emc_kopf_s-waerg
    MODULE alv_grid_0200. " init ALV und anzeigen
  ENDCHAIN.
  MODULE status_0200.

  MODULE clear_ok_code.

PROCESS AFTER INPUT.
  MODULE user_command_0200 AT EXIT-COMMAND.
  MODULE cmd_save_0200.

Code: Alles auswählen.

MODULE alv_grid_0200 OUTPUT.
  IF go_custom IS INITIAL.
    CREATE OBJECT go_custom
      EXPORTING
        container_name = 'CSTM_CTRL_200'.  " Name of the dynpro CustCtrl name to link this container to
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF.

  CREATE OBJECT go_alv
    EXPORTING
*     i_shellstyle   = 0
*     i_lifetime     =
      i_parent       = go_custom        " Parent-Container
      i_appl_events  = 'X'              " alle Events registrieren
*     i_parentdbg    =
*      i_applogparent = go_cstm_ctrl_fm  " Container für das Fehler-Log
*     i_graphicsparent  =
*     i_name         =
*     i_fcat_complete   = SPACE
*  EXCEPTIONS
*     error_cntl_create = 1
*     error_cntl_init   = 2
*     error_cntl_link   = 3
*     error_dp_create   = 4
*     others         = 5
    .

  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

* Settings for grid...
  lcl_settings=>set_fcat( CHANGING ct_fcat = gt_fcat ).
  lcl_settings=>set_layout( CHANGING cs_layout = gs_layout ).
  lcl_settings=>set_sort( CHANGING ct_sort = gt_sort ) .
  lcl_settings=>set_toolbar( CHANGING ct_toolbar = gt_toolbar_excl ) .

* Edit-Mode aktiv setzen
  CALL METHOD go_alv->set_ready_for_input EXPORTING i_ready_for_input = 1.

  CALL METHOD go_alv->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_modified.
** Ereignisbehandler registrieren
  SET HANDLER lcl_event_handler=>handle_data_changed FOR go_alv.

* ALV darstellen
  CALL METHOD go_alv->set_table_for_first_display
    EXPORTING
      i_buffer_active      = 'X'
      i_bypassing_buffer   = 'X'
      i_save               = 'A'  "U = nur benutzerspezif. Varianten abspeicherbar
      i_default            = 'X'  " Benutzer darf Variante als Default kennzeichnen
      is_layout            = gs_layout
      it_toolbar_excluding = gt_toolbar_excl
    CHANGING
      it_outtab            = gt_pos_daten
      it_fieldcatalog      = gt_fcat
      it_sort              = gt_sort
    EXCEPTIONS
      OTHERS               = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  IF go_custom IS NOT INITIAL.
    go_alv->refresh_table_display( ).
  ENDIF.


ENDMODULE.                 " ALV_GRID_0200  OUTPUT
Der EventHandler und die PAI-Logik:

Code: Alles auswählen.

FORM check_mat_vorhanden_evt USING lt_mod_cells TYPE lvc_t_modi
                             CHANGING rv_msg TYPE bapireturn1.

  DATA:   ls_mod_cells LIKE LINE OF lt_mod_cells,
          lv_merker LIKE  BAPIMATALL-MATERIAL,
          lv_delflag   TYPE         bapimatall-del_flag,
          lv_return    TYPE         bapireturn1.

  LOOP AT lt_mod_cells INTO ls_mod_cells.
      IF ls_mod_cells-fieldname = 'MATERIAL'
         and ls_mod_cells-value IS NOT INITIAL.

      IF ls_mod_cells-value EQ '' OR ls_mod_cells-value EQ ' '
                                  OR ls_mod_cells-value IS INITIAL.
        rv_msg-message = 'Bitte prüfen: Feld Material ist ungültig!'.
        rv_msg-type = 'E'.

      ELSE.
        lv_merker = ls_mod_cells-value.
        CALL FUNCTION 'BAPI_MATERIAL_EXISTENCECHECK' " Check Existence of Material
          EXPORTING
            material      = lv_merker      " Material No.
          IMPORTING
            deletion_flag = lv_delflag     " Material is flagged for deletion
            return        = lv_return.     " Return Parameter

        IF lv_return-type EQ 'E'.
          " CONCATENATE 'Bitte prüfen: Material fehlerhaft:'
          rv_msg = lv_return. "-message INTO msg SEPARATED BY space.
        ENDIF.

      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.


FORM check_mat_duplikate.
* auf doppelt angegebene Materialien prüfen
  DATA: lt_pos_list   LIKE gt_pos_daten,
        lv_cnt        TYPE i,
        lv_cnt_unique TYPE i.

  " zuerst leere Zeilen aus der Vorlage entfernen
  DELETE gt_pos_daten WHERE material = ''.
  DELETE gt_pos_daten WHERE menge = 0.

  " dann Kopie erstellen und um Material-Dubletten bereinigen
  lt_pos_list = gt_pos_daten.
  SORT lt_pos_list BY material.
  DELETE ADJACENT DUPLICATES FROM lt_pos_list COMPARING material.

  lv_cnt = lines( gt_pos_daten ).
  lv_cnt_unique = lines( lt_pos_list ).

  " vergleichen und evtl meckern
  IF lv_cnt_unique NE lv_cnt.
    MESSAGE 'Bitte prüfen: Material ist doppelt vorhanden!' TYPE 'S'.
  ENDIF.

ENDFORM.                    " CHECK_MAT_DUPLIKATE


*&---------------------------------------------------------------------*
*&      Form  FORM_BUCHEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM form_buchen .
  PERFORM form_emc_w_eing_buchen_00.

ENDFORM.                    " FORM_BUCHEN



FORM form_emc_w_eing_buchen_00 .
* alles prüfen
  DATA: lv_techn_best_nr LIKE ct_bel_nr,
        lv_anz_posi      TYPE i.
  CLEAR: gt_ko, gt_po, gt_p_ko, gt_p_po,
*         gs_kopfdaten, gs_position,
         gv_techn_best_nr.

** Variablen aus Dynpro-Feldern in lokale Variable übertragen
  gs_kopfdaten-buchgs_datum = zlrp_emc_kopf_s-buchgs_datum.
  gs_kopfdaten-lgort = zlrp_emc_kopf_s-lgort.
  gs_kopfdaten-lieferant = zlrp_emc_kopf_s-lieferant.
  gs_kopfdaten-re_datum = zlrp_emc_kopf_s-re_datum.
  gs_kopfdaten-re_nr = zlrp_emc_kopf_s-re_nr.
  gs_kopfdaten-waerg = zlrp_emc_kopf_s-waerg.
  gs_kopfdaten-werks = zlrp_emc_kopf_s-werks.

** auf doppelt angegebene Materialien prüfen
  PERFORM check_mat_duplikate.

** Übergabe an Folge-FORM, die die Buchung der techn. Bestellung anstößt
** + Rückgabeparameter: ID der techn. Bestellung
  PERFORM form_emc_w_eing_buchen_01 CHANGING lv_techn_best_nr.
  gv_techn_best_nr = lv_techn_best_nr.

** Buchung der einzenen Wareneingänge anstoßen
  IF gv_techn_best_nr IS INITIAL OR gv_techn_best_nr = '0000000000'.
    gv_subrc = 4.
    " Fehlerhandling !!
  ELSE.
    PERFORM form_emc_w_eing_buchen_02 USING lv_techn_best_nr.
    IF lv_techn_best_nr IS INITIAL OR lv_techn_best_nr = '0000000000'.
      gv_subrc = 4.
      " Fehlerhandling !!
    ELSE.
      DATA: text       TYPE string,
            lv_anz     TYPE string,
            lv_anz_pos TYPE i.
      DESCRIBE TABLE gt_pos_daten LINES lv_anz_pos.
      lv_anz = lv_anz_pos.
      CONCATENATE 'Bestellung ' gv_techn_best_nr ' mit ' lv_anz ' Position(en) '
                  ' wurde erfolgreich angelegt.'
                  INTO text SEPARATED BY space.
      MESSAGE text TYPE 'I'.

    ENDIF.
  ENDIF.

ENDFORM.           



************************************************************************
* lokale Hilfsobjekte
************************************************************************

CLASS lcl_event_handler IMPLEMENTATION.
  METHOD handle_data_changed.   " FOR EVENT data_changed 
    DATA:   ls_mod_cells LIKE LINE OF er_data_changed->mt_mod_cells,
            lv_msg       TYPE         bapireturn1.

* auf Vorhandensein des Materials prüfen
    READ TABLE er_data_changed->mt_mod_cells INTO ls_mod_cells INDEX 1.

    IF ls_mod_cells-fieldname EQ 'MATERIAL'.
      PERFORM check_mat_vorhanden_evt USING er_data_changed->mt_mod_cells
                                      CHANGING lv_msg.
      IF lv_msg IS NOT INITIAL.
        TRY .
           CALL METHOD er_data_changed->add_protocol_entry
                     EXPORTING
                       i_msgid     = lv_msg-id
                       i_msgty     = lv_msg-type
                       i_msgno     = lv_msg-number
                       i_msgv1     = lv_msg-message
*                      i_msgv2     =
*                      i_msgv3     =
*                      i_msgv4     =
                       i_fieldname = ls_mod_cells-fieldname
                       i_row_id    = ls_mod_cells-row_id " Welche Zeile der Anzeige hat den Fehler.
*                      i_tabix     = ls_mod_cells-tabix
                     .
           CATCH CX_ROOT.

           ENDTRY.
      ENDIF.
** auf doppelt angegebene Materialien prüfen
** -> erst nach Drücken auf Speichern, sonst ist immer nur der aktuellste Wert vorhanden

  ENDMETHOD.
ENDCLASS.
Aktuell wird das Modul cmd_save_0200 nicht mehr mit Daten aus dem ALV versorgt, d.h. die Struktur, die im Modul check_mat_duplikate ankommt, ist leer. - Die wird nur gefüllt, wenn der EventHandler deaktiviert ist. - Was ich nicht verstehe ...

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
hier noch ein Screenshot aus dem Debugger ...
Bild

Vergleichbare Themen

0
Antw.
738
Views
Daten aus Dynpro in ALV-Tabelle übertragen
von kkauerau » 11.04.2018 12:41 • Verfasst in ABAP® für Anfänger
3
Antw.
187
Views
Dynamisch Daten übertragen
von retsch » 31.01.2023 10:20 • Verfasst in ABAP® für Anfänger
1
Antw.
4282
Views
Daten von JAVA an ABAP übertragen
von Alexander Moog » 17.09.2008 11:11 • Verfasst in Java & SAP®
8
Antw.
4289
Views
Dynpro 100 Feldinhalt übertragen
von AndreFIAE2014 » 05.12.2016 15:27 • Verfasst in Dialogprogrammierung
1
Antw.
1367
Views
Web Dynpro auf anderes System mit älteren Stack übertragen
von Ippoo » 28.11.2012 17:37 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

SELECT CHAR16 in CHAR12-Feld
vor 10 Stunden von Shortcut IT 3 / 39
alv_grid aktualisieren
vor 10 Stunden von a-dead-trousers gelöst 3 / 76

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

SELECT CHAR16 in CHAR12-Feld
vor 10 Stunden von Shortcut IT 3 / 39
alv_grid aktualisieren
vor 10 Stunden von a-dead-trousers gelöst 3 / 76

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Wochen von Lucyalison 1 / 134
Group Items auf einer Filterbar
vor 5 Wochen von Bright4.5 1 / 170