ALV Tabelle: Zeile löschen

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

ALV Tabelle: Zeile löschen

Postby Frauke3527 » Wed Nov 23, 2016 2:33 pm

Hallo.

Ich habe ein editierbares ALV gebaut (auf Basis cl_gui_alv_grid) in dem via Methode HANDLE_DATA_CHANGED eine Validierung erfolgt. Wenn eine Zeile einen Fehler enthält soll die Zeile in der internen Tabelle OUTTAB gelöscht werden.

Das klappt.

Allerdings taucht die gelöschte Zeile nach einem Refresh wieder im Grid auf. Sie ist ja in dem Attribut MT_OUTTAB des Grids weiter vorhanden. Wie kriege ich die Zeile denn weg? Eine Methode habe ich nicht entdeckt.

Ciao,
Burkhart.
Frauke3527
...
...
 
Posts: 201
Joined: Sun Mar 06, 2005 6:51 pm

Re: ALV Tabelle: Zeile löschen

Postby Tron » Wed Nov 23, 2016 6:12 pm

Moin.
Meinst Du Zeile oder Spalte ?
Wenn man in der internen Tabelle für das ALV eine Zeile löscht, erfährt das Grid es durch
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.   CALL METHOD Grid->refresh_table_display  
  2. *    EXPORTING
  3. *      IS_STABLE      =
  4. *      I_SOFT_REFRESH =
  5. *    EXCEPTIONS
  6. *      FINISHED       = 1
  7. *      others         = 2
  8.  
  9.  
GeSHi ©


am besten mit is_stable =' X'.

gruß Jens
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Re: ALV Tabelle: Zeile löschen

Postby Frauke3527 » Wed Nov 23, 2016 6:23 pm

Hmm. Das hatte ich bereits versucht. Ohne Erfolg. Allerdings rufe ich die Refresh-Methode in der Methode HANDLE_DATA_CHANGED auf. Könnte das kollidieren?
Frauke3527
...
...
 
Posts: 201
Joined: Sun Mar 06, 2005 6:51 pm

Re: ALV Tabelle: Zeile löschen

Postby Tron » Wed Nov 23, 2016 8:34 pm

...
hier ein Beispiel ALV . Doppelclick auf eine Zeile löscht diese Zeile :wink:
Die Refresh Funktion ist im Event handler und es funktioniert.

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. *&---------------------------------------------------------------------*
  2. *& Report  ZALV_TEMPLATE_TEST                                          *
  3. *&                                                                     *
  4. *&---------------------------------------------------------------------*
  5. *&                                                                     *
  6. *&                                                                     *
  7. *&---------------------------------------------------------------------*
  8.  
  9. REPORT  zalv_template_test.
  10.  
  11. DATA: grid  TYPE REF TO cl_gui_alv_grid,
  12.       ccontainer TYPE REF TO cl_gui_custom_container,
  13.       gs_layout TYPE lvc_s_layo,
  14.       ls_fcat TYPE TABLE OF lvc_s_fcat WITH HEADER LINE.
  15. DATA okcode TYPE sy-ucomm.
  16.  
  17.  
  18.  
  19. DATA gstr TYPE rstrucinfo OCCURS 0 WITH HEADER LINE.
  20.  
  21. DATA sflight TYPE sflight OCCURS 0 WITH HEADER LINE.
  22.  
  23. *---------------------------------------------------------------------*
  24. *       CLASS lcl_event_handler DEFINITION
  25. *---------------------------------------------------------------------*
  26. *
  27. *---------------------------------------------------------------------*
  28. CLASS lcl_event_handler DEFINITION .
  29.   PUBLIC SECTION .
  30.     METHODS:
  31. *--To add new functional buttons to the ALV toolbar
  32. *    handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
  33. *    IMPORTING e_object e_interactive ,
  34. *--To implement user commands
  35. *    handle_user_command
  36. *    FOR EVENT user_command OF cl_gui_alv_grid
  37. *    IMPORTING e_ucomm ,
  38. *--Double-click control
  39.  
  40. handle_double_click
  41. FOR EVENT double_click OF cl_gui_alv_grid
  42. IMPORTING e_row e_column es_row_no.
  43.  
  44.   PRIVATE SECTION.
  45. ENDCLASS.                    "lcl_event_handler DEFINITION
  46.  
  47.  
  48.  
  49. *---------------------------------------------------------------------*
  50. *       CLASS lcl_event_handler IMPLEMENTATION
  51. *---------------------------------------------------------------------*
  52. *
  53. *---------------------------------------------------------------------*
  54. CLASS lcl_event_handler IMPLEMENTATION .
  55. *--Handle Toolbar
  56. *METHOD handle_toolbar.
  57. *PERFORM handle_toolbar USING e_object e_interactive .
  58. *ENDMETHOD .
  59. *--Handle Hotspot Click
  60. *  METHOD handle_hotspot_click .
  61. *    PERFORM handle_hotspot_click USING e_row_id e_column_id es_row_no.
  62. *  ENDMETHOD .                    "handle_hotspot_click
  63. *--Handle Double Click
  64.   METHOD handle_double_click .
  65.     PERFORM handle_double_click USING e_row e_column es_row_no .
  66.   ENDMETHOD .                    "handle_double_click
  67. *--Handle User Command
  68. *METHOD handle_user_command .
  69. *PERFORM handle_user_command USING e_ucomm .
  70. *ENDMETHOD.
  71.  
  72. ENDCLASS.                    "lcl_event_handler IMPLEMENTATION
  73.  
  74.  
  75. DATA gr_event_handler TYPE REF TO lcl_event_handler .
  76.  
  77.  
  78.  
  79.  
  80.  
  81.   SELECT * FROM sflight APPENDING TABLE sflight.
  82.  
  83.  
  84. * When structure get the components
  85.  
  86.   CALL FUNCTION 'GET_COMPONENT_LIST'
  87.     EXPORTING
  88.       program    = sy-repid
  89.       fieldname  = 'SFLIGHT'
  90.     TABLES
  91.       components = gstr.
  92.  
  93.   LOOP AT gstr.
  94.     CLEAR ls_fcat.
  95.     ls_fcat-tabname   = 'SFLIGHT'.
  96.     ls_fcat-fieldname =  gstr-compname.
  97. *  ls_fcat-inttype   = 'C'.
  98.     ls_fcat-inttype   = gstr-type.
  99.     ls_fcat-intlen    = gstr-leng.
  100.     ls_fcat-coltext   = gstr-compname.
  101. *    LS_FCAT-HOTSPOT   = 'X'.
  102. **  ls_fcat-scrtext_s = ls_fcat-fieldname.
  103. **  ls_fcat-scrtext_m = ls_fcat-fieldname.
  104. **  ls_fcat-scrtext_l = ls_fcat-fieldname.
  105.     APPEND ls_fcat.
  106.  
  107.  
  108.  
  109.   CALL SCREEN 100.
  110.   EXIT.
  111. *&---------------------------------------------------------------------*
  112. *&      Module  STATUS_0100  OUTPUT
  113. *&---------------------------------------------------------------------*
  114. *       text
  115. *----------------------------------------------------------------------*
  116. MODULE status_0100 OUTPUT.
  117.  
  118.   IF ccontainer IS INITIAL.
  119.  
  120.     CREATE OBJECT ccontainer
  121.            EXPORTING container_name = 'CONT1'.
  122.  
  123.     CREATE OBJECT grid
  124.            EXPORTING i_parent = ccontainer.
  125.  
  126. *--Creating an instance for the event handler
  127.     CREATE OBJECT gr_event_handler .
  128.  
  129.  
  130. *    PERFORM GETGRID.
  131.     CLEAR gs_layout.
  132.     gs_layout-cwidth_opt = 'X'.
  133.  
  134.     CALL METHOD grid->set_table_for_first_display
  135.       EXPORTING
  136.         is_layout       = gs_layout
  137.       CHANGING
  138.         it_outtab       = sflight[]
  139.         it_fieldcatalog = ls_fcat[].
  140.  
  141. *--Registering handler methods to handle ALV Grid events
  142.  
  143.     SET HANDLER gr_event_handler->handle_double_click FOR grid .
  144.  
  145.   ENDIF.
  146.   SET PF-STATUS 'STAT'.
  147.   SET TITLEBAR 'S1'.
  148.  
  149. ENDMODULE.                 " STATUS_0100  OUTPUT
  150. *&---------------------------------------------------------------------*
  151. *&      Module  USER_COMMAND_0100  INPUT
  152. *&---------------------------------------------------------------------*
  153. *       text
  154. *----------------------------------------------------------------------*
  155. MODULE user_command_0100 INPUT.
  156.  
  157.   CASE okcode.
  158.     WHEN 'ECAN' OR 'GBCK'.
  159.       PERFORM destruct.
  160.       LEAVE TO SCREEN 0.
  161.     WHEN  'GBCK'.
  162.       PERFORM destruct.
  163.       LEAVE TO SCREEN 0.
  164.  
  165. ENDMODULE.                 " USER_COMMAND_0100  INPUT
  166.  
  167. *&--------------------------------------------------------------------*
  168. *&      Form  destruct
  169. *&--------------------------------------------------------------------*
  170. *       text
  171. *---------------------------------------------------------------------*
  172. FORM destruct.
  173.  
  174.   IF NOT grid IS INITIAL.
  175.     FREE grid.
  176.   ENDIF.
  177.  
  178.   IF NOT ccontainer IS INITIAL.
  179.     CALL METHOD ccontainer->free.
  180.     FREE ccontainer.
  181.   ENDIF.
  182. ENDFORM.                    "destruct
  183.  
  184. *&--------------------------------------------------------------------*
  185. *&      Form  handle_hotspot_click
  186. *&--------------------------------------------------------------------*
  187. *       text
  188. *---------------------------------------------------------------------*
  189. *      -->E_ROW_ID   text
  190. *      -->E_COLUMN_IDtext
  191. *      -->ES_ROW_NO  text
  192. *---------------------------------------------------------------------*
  193. FORM handle_double_click USING e_row e_column es_row_no .
  194.   DATA lv_stable TYPE lvc_s_stbl.
  195.  
  196.   lv_stable-row = 'X'.
  197.  
  198.   DELETE sflight INDEX e_row.
  199.  
  200.  
  201.   CALL METHOD grid->refresh_table_display
  202.     EXPORTING
  203.      is_stable = lv_stable
  204. * I_SOFT_REFRESH =
  205.     EXCEPTIONS
  206.      finished = 1
  207.      OTHERS = 2 .
  208.  
GeSHi ©


gruß Jens
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Re: ALV Tabelle: Zeile löschen

Postby Frauke3527 » Thu Nov 24, 2016 8:45 am

Danke für das Beispiel. Immerhin sehe ich jetzt daß die Outtab innerhalb der Methode auch sauber verändert wird. Die ALV-Anzeige wird auch korrekt aktualisiert (wie vorher schon).

Im "normalen" Programmumfeld nach Ende der Methode HANDLE_DATA_CHANGED hat die Outtab allerdings die gerade gelöschte Zeile wieder :-(

Die Outtab habe ich im Programm global definiert. Nun kommt es mir so vor als müsste ich Änderungen an der Outtab innerhalb der Methode irgendwie der Außenwelt mitteilen. Sind denn Änderungen an einer globalen iTab nur in einer Methode gültig?

Ciao
Burkhart
Frauke3527
...
...
 
Posts: 201
Joined: Sun Mar 06, 2005 6:51 pm

Re: ALV Tabelle: Zeile löschen

Postby Tron » Thu Nov 24, 2016 12:59 pm

Moin Burkhart.
Definiert man eine ITAB global, ist diese auch in den Formroutinen verfügbar.
Definiert man eine ITAB global und nochmal mit gleichem Namen lokal, "gewinnt" die lokale Version !
Beispiel
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. *&---------------------------------------------------------------------*
  2. *& Report  ZTEST_LOKA_GLOBAL
  3. *&
  4. *&---------------------------------------------------------------------*
  5. *&
  6. *&
  7. *&---------------------------------------------------------------------*
  8. REPORT ztest_loka_global.
  9.  
  10. DATA lt_sflight TYPE TABLE OF sflight.
  11.  
  12. SELECT * FROM sflight INTO TABLE lt_sflight.
  13.  
  14. PERFORM test.
  15.  
  16.  
  17.  
  18. FORM test.
  19.   DATA lt_sflight TYPE TABLE OF sflight.
  20.  
  21.   SELECT * FROM sflight INTO TABLE lt_sflight UP TO 2 ROWS.
  22.  
  23.  
GeSHi ©


innerhalb der Form ist die Globale Version der lt_sflight nicht verfügbar !
Nach der Rückkehr aus der Form ist alles so, wie vor dem Aufruf !

Das legt die Vermutung nahe, dass Du es gerade mit so einer Konstellation zu tun hast.

hoffe es ist verständlich ..

gruß Jens
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Re: ALV Tabelle: Zeile löschen

Postby Jasper645 » Fri Feb 24, 2017 6:48 am

Nordlicht hat geschrieben:Hallo.

Ich habe ein editierbares ALV gebaut (auf Basis cl_gui_alv_grid) in dem via Methode HANDLE_DATA_CHANGED eine ValidierungRachat de crédit erfolgt. Wenn eine Zeile einen Fehler enthält soll die Zeile in der internen Tabelle OUTTAB gelöscht werden.

Das klappt.

Allerdings taucht die gelöschte Zeile nach einem Refresh wieder im Grid auf. Sie ist ja in dem Attribut MT_OUTTAB des Grids weiter vorhanden. Wie kriege ich die Zeile denn weg? Eine Methode habe ich nicht entdeckt.

Ciao,
Burkhart.

C'est vraiment agréable
Jasper645
.
.
 
Posts: 1
Joined: Fri Feb 24, 2017 6:48 am


Return to ABAP Objects®

Who is online

Users browsing this forum: No registered users and 1 guest