Refresh ALV OO luego de Modificación

Hola, tengo una consulta sobre alv oo, despliego la info al darle click al boton de modificar la idea es que se blanquee el campo nro de orden que tenia un valor y debe quedar en blanco, actualmente lo hace pero solo lo efectua en la tabla Z pero en el alv no lo veo reflejado solo si me salgo y vuelvo a entrar, luego que hago el update estoy lamando al method: CALL METHOD g_grid->refresh_table_display, pero no se si debo hacer otro paso antes, si me pueden dar algun apoyo al respecto se lo agradeceria.

LOOP AT ti_ztsfxdata_or INTO wa_modif WHERE sel EQ 'X'.
         UPDATE ztsfxdata_or
             SET aufnr = ' '
           WHERE snig  EQ wa_modif-snig
             AND aufnr EQ wa_modif-aufnr
             AND fecha EQ wa_modif-fecha.

          READ TABLE ti_ztsfxdata_or WITH  KEY  snig  = wa_modif-snig
                                                aufnr = wa_modif-aufnr
                                                fecha = wa_modif-fecha.
          MODIFY ti_ztsfxdata_or FROM wa_modif INDEX sy-tabix.


          CALL METHOD g_grid->register_edit_event
           EXPORTING
              i_event_id = cl_gui_alv_grid=>mc_evt_modified.
              CREATE OBJECT g_event_receiver.
          CALL METHOD g_grid->refresh_table_display.

      ENDLOOP.

Hola @aalvarez2605
Yo sacaría el refresh del ALV fuera del LOOP, una vez tenga todos los cambios en la tabla para evitar n llamadas.
Los eventos del ALV los colocaría al momento de su creación.
Y para refrescar el front-end coloca cl_gui_cfw=>flush luego del refresh.
Saludos!

2 Me gusta

Hola gracias por tu respuesta, cuando me dices el refrescar front-end eso sustituiria al refresh normal o es aparte del refresh. Este es mi primer alv oo y no estoy muy ducha con los terminos.
Muchas Gracias.

Ana

Hola Ana! Bienvenida a OO :grinning:
No, colocas el g_grid->refresh_table_display igualmente. Esto te sirve para actualizar el outtab (la tabla del ALV) y luego colocas el cl_gui_cfw=>flush, para que te actualice el front-end.
Es decir, con g_grid->refresh_table_display actualizarías el backend y luego con cl_gui_cfw=>flush actualizarías el frond-end (sapgui).

2 Me gusta

Hola Amiga, fijate actualmente la informacion la tengo asi:

La idea es que seleccione el o los registros en el campo procesar y la informacion que aparece en el campo nro de orden se blanquee, es decir quede asi luego de darle al boton modificar.

El programa me actualiza en mi tabla Z ( es deir blanque el campo nro de orden) pero en el alv no lo hace inmediatamen te sino que tengo que salirme entrar nuevamente para ver la midificacion. El codigo lo tengo asi:

image

Selecciono Modificar y voy al form.

image

Aqui actualizo la tabla Z blanqueando el campo nro de orden.Y luego es que quiero que se refleje ese cambio en el alv.

image

Pero no se que me esta faltando para lograrlo.

Ya que no se borra o refresca la informacion solo si me salgo y entro nuevamente es que veo que se realizar el update.

Que podria ajustar??

Muchas Gracias

Ana

Hola @aalvarez2605 buen día,
Dentro del loop limpias la variable aufnr?, solo veo que actualizas la tabla Z en BD.
Un consejo, en los loops utiliza field-symbols esto mejora el rendimiento. :wink:
Saludos!

Ok Muchas Gracias, tomare el consejo…

Hola @aalvarez2605, tengo un problema muy similar al tuyo pero no lo he logrado resolver aun. Por favor avísame si lograste hacer lo que querías. Igualmente te aviso si logro hacerlo.

Saludos

Hola @aalvarez2605. Ya logré refrescar el ALV OO luego de modificar una tabla base de datos. Lo que hice fue llamar de nuevo al ALV, esto se hace llamando el método SET_TABLE_FOR_FIRST_DISPLAY de la clase CL_GUI_ALV_GRID y el método SET_TOOLBAR_INTERACTIVE de la misma clase… Te envío una pantallazo

Captura1

Lo importante es que modifiques en el mismo programa la tabla interna que le pasas al método, en mi caso es <fs_t_tlist>, a ese FS le iba borrando los registros que iba modificando para que no salieran cuando se volviera a generar el ALV.

Espero te sirva! Saludos

Muchas Gracias Amigo por la informacion

@aalvarez2605, este tema está cerrado?
Recuerda marcar el mensaje que haya solucionado el tema con :ballot_box_with_check:

Hola,

Si te sirve yo lo hago de esta forma sin invocar el método “set_table_for first_display”. Esto lo coloco en el meto HANDLE_DATA_CHANGED del ALV OO.

call method er_data_changed->modify_cell
            exporting
              i_row_id    = 1 "Numero de fila
              i_tabix     = sl_t_modi-tabix
              i_fieldname = 'campo' "Nombre del campo que deseas modificar
              i_value     = '' "Valor que se le asigna al campo.

donde el er_data_changed es del tipo CL_ALV_CHANGED_DATA_PROTOCOL.

Saludos.

1 me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.