ABAP : OO ALV no llegar fresco

Sé que mi problema ha sido preguntado cientos de veces.
Pero todavía no puedo encontrar ninguna solución adecuada para mí

  1. Tengo un desplegable, cada vez que me cambio de datos en el desplegable que se carga de nuevos datos basados en la lista desplegable de datos
  2. En el paso uno, yo actualización editable ALV
  3. Cualquier cambio en editable ALV serán salvos (otra acción para el ahorro de la energía)

Mi problema si, Después de guardar, yo no puedo actualizar mi ALV
Pero no es problema si no he pulsado el botón de guardar

Por favor me ayude
Gracias

Código Adjunto
El paso 1 es «cuando SET_P» en este código

NOTA :
alguien de SAP foro me dijo que me mueva función de actualización para PBO, he probado este, pero todavía no

MODULE pbo_1000 OUTPUT.
   IF flag = 0.
     SET PF-STATUS '1000'.
     SET TITLEBAR  '1000'.

     s_name = sy-uname.
     s_date = sy-datum.

     IF s_month IS INITIAL AND s_year IS INITIAL.
       s_month = sy-datum+4(2).
       s_year = sy-datum(4).
     ENDIF.


     PERFORM create_toolbar.
     PERFORM create_catalog.
     PERFORM select_data.

     CREATE OBJECT ob_custom
       EXPORTING
         container_name = 'CCTRL'.
     CREATE OBJECT ob_grid
       EXPORTING
         i_parent      = ob_custom
         i_appl_events = 'X'.


     PERFORM create_dropbox.
     CALL METHOD ob_grid->set_table_for_first_display
       EXPORTING
         i_structure_name     = 'TYPE'
         it_toolbar_excluding = lt_toolbar
         is_layout            = lyt
       CHANGING
         it_fieldcatalog      = fld[]
         it_outtab            = itab[].

     CALL METHOD ob_grid->set_ready_for_input
       EXPORTING
         i_ready_for_input = 1.

     CALL METHOD ob_grid->register_edit_event
       EXPORTING
         i_event_id = cl_gui_alv_grid=>mc_evt_enter.

   ENDIF.
ENDMODULE.   




PAI Module



MODULE user_command_1000 INPUT .
   DATA: v_perio(6) TYPE c.


   CASE sy-ucomm.
     WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
       LEAVE TO SCREEN 0.
     WHEN 'SAVE'.
       PERFORM save_data.
       PERFORM send_email.

     WHEN 'SET_S'.
       flag = 1.
       PERFORM set_status.
       CALL METHOD ob_grid->refresh_table_display
         EXPORTING
           is_stable = stbl.

     WHEN 'SET_P'.
       flag = 1.
       PERFORM select_data.
       CALL METHOD ob_grid->refresh_table_display
         EXPORTING
           is_stable      = stbl.






   ENDCASE.
ENDMODULE. 
InformationsquelleAutor yukou | 2015-03-05

3 Kommentare

  1. 0

    He hecho algo similar en una aplicación que necesita ser actualizada cuando salvó porque en algunos cálculos se tuvo que cambiar en la pantalla. Me puse de parte de el código siguiente en el símbolo del formulario para la ‘REUSE_ALV_GRID_DISPLAY’ módulo de función.

    form user_command using r_ucomm     like sy-ucomm
                            rs_selfield type slis_selfield.
      data: ref_grid type ref to cl_gui_alv_grid, l_valid type c.
    
      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.
      rs_selfield-refresh = 'X'.
    
      ...
    
      if not ref_grid is initial.
        call method ref_grid->refresh_table_display( ) .
      endif.
    
    endform.
    

    Espero que ayude

  2. 0

    Supongo que usted tendrá la CHECK_CHANGED_DATA método denominado como primera cosa en el PAI, que el fuego de los eventos DATA_CHANGED y DATA_CHANGED_FINISHED.

    Pero más importante es, que va a sincronizar el objeto OLE con la instancia de backend y, a continuación, cuando usted llama a la REFRESH_TABLE_DISPLAY sería la actualización de su ALV correctamente. Yo no tengo ningún ejemplo en el momento, pero yo tal vez pruebe la próxima semana cuando tengo acceso al sistema.

    Por la forma en PBO usted no necesita tener la variable bandera puede utilizar comprobar si el ALV objeto ya ha sido inicializado o no y de acuerdo a esto, se pueden crear/actualizar alv. Algo como esto:

    if alvGridRef is NOT bound .
      data(container) = new cl_gui_custom_container( ) .
      data(alvGridRef) = new cl_gui_alv_grid( ) .
    else .
      alvGridRef->refresh_table_display( ) .
    endif .
    
  3. 0

    Usted puede lograr esto mediante el manualmente el desencadenamiento de PBO. Usted dijo que la Edición es de guardar, así que usted puede mostrar sólo el ALV en PBO de nuevo:

    CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
               EXPORTING
                 functioncode           = 'REFRESH'
               EXCEPTIONS
                 function_not_supported = 1 
                 OTHERS                 = 2.
    

    Después de esta acción, sy-ucomm en PBO tiene el valor REFRESH.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea