Ahora que sabemos como actualizar una tabla Z usando el control tabla de SAP, vamos agregarle un icono de estado que nos permite ver que filas se han modificado.

Para utilizar iconos debemos incluir un pool de tipos, entonces en nuestro top include vamos a agregar esta linea:

type-pools: icon.

Ahora vamos a ingresar al layout del dynpro que creamos en el articulo anterior y vamos a hacer clic sobre el icono Icono Status y luego clic en una columna del control tabla (si no nos quedo en la posición que se muestra en la imagen, podemos arrastrarlo), luego le damos un nombre, en este caso será IT_TABLA_EDIT-ICON (por que así lo definimos en la tabla interna en el articulo anterior).

agregar-icono-control-tabla

Luego debemos agregar un poco de código para activar el icono, para esto vamos a modificar el modulo para procesar las entradas de usuario de modo que al agregar y eliminar se muestre un icono que refleje la acción a ejecutar. El código final será algo parecido a este:

MODULE USER_COMMAND_0002 INPUT.
  DATA: linea_tabla   TYPE  Z015.

  save_ok = ok_code.
  clear ok_code.

  CASE save_ok.
    WHEN 'ADD'. "agregar
      clear it_tabla_edit.
      it_tabla_edit-new = 'X'.
      it_tabla_edit-icon = icon_view_create.
      append it_tabla_edit.
    WHEN 'DEL'.  "eliminar
      LOOP AT it_tabla_edit where mark = 'X'.
        if it_tabla_edit-del =  'X'.
          it_tabla_edit-icon = space.
          it_tabla_edit-del = space.
        else.
          it_tabla_edit-icon = icon_delete.
          it_tabla_edit-del = 'X'.
        endif.
      ENDLOOP.
    WHEN 'SAVE'. "guardar
      "Primero vamos a borrar lo que se marco para borrado
      LOOP AT it_tabla_edit where del = 'X'.
        "Ajustar este delete a su tabla
        delete from Z015 "Se borrara la tabla Z015
        where codigo = it_tabla_edit-codigo.
      ENDLOOP.
      "Limpiar tabla interna
      delete it_Tabla_edit where del = 'X'.

      "Ahora vamos a procesar los nuevos registros...
      LOOP AT it_tabla_edit where new = 'X'.
        move-corresponding it_tabla_edit to linea_tabla.
        INSERT into z015  values linea_tabla .

        clear: it_tabla_edit-new, it_tabla_edit-upd, it_tabla_edit-icon.
        modify it_tabla_edit.
      ENDLOOP.

      "Ahora vamos a procesar las actualizaciones....
      LOOP AT it_tabla_edit where upd = 'X'.
        "Ajustar este delete a su tabla
        update Z015 "Se borrara la tabla Z015
        set estado = it_tabla_edit-estado
        where codigo = it_tabla_edit-codigo.

        clear: it_tabla_edit-upd, it_tabla_edit-icon.
        modify it_tabla_edit.
      ENDLOOP.

    WHEN OTHERS.
  ENDCASE.
ENDMODULE.

También debemos editar el modulo que se activa en el evento ON CHAIN-REQUEST del control tabla e insertar una linea de código como esta:

it_tabla_edit-icon = icon_change.

Ahora al ejecutar el dynpro veremos que el icono refleja si la fila ha sido insertada, modificada o eliminada.

Ejercicio:

Modificar el código para guardar de modo que no puedan guardarse en la base de datos filas sin código o sin descripción, en caso de que falte algún dato mostrar un error al usuario, del mismo modo validar que el código que se ingrese no exista previamente en la tabla.