Objetivos:
- Crear un Tabstrip, y en una pestaña mostrar los socios en una tabla de control
- Seleccionar los socios a modificar con un checkbox
- Ejecutar con un Batch Input la modificación de cada uno de los socios seleccionados a través de un Module Pool creado anteriormente.
|
Objetivo del REPORT |
Datos:
- Base de datos ZBIBLIO_SOCIOS (Ver aquí).
- Module Pool ZBIBLIO_CREAR_MODIF_VISUAL con la transacción ZBIBLIO_01 (Ver aquí)
Creamos un nuevo Report en la SE38.
|
Crear un nuevo Report con la SE38 |
Añadimos una Dynpro 9000 con su correspondiente Status para salir del programa.
|
Añadimos una Dynpro. |
|
Acción de salir para poder cerrar el Dynpro. |
Dentro de la Dynpro 9000 creamos un Tapstrip usando el asistente donde se indicará:
- Nombre del Tapstrip: TS_9000.
- Las secciones del Tapstrip.
- Código de función al pinchar en las secciones.
- Si se desea introducir los modulos en includes.
|
Proceso para crear las pestañas en una Dynpro. |
Al haber indicado tres secciones en el Tabstrip, automáticamente se nos habrá generado tres Dynpros subscreen y la siguiente programación de diálogo con sus correspondientes módulos en el Report:
PROCESS BEFORE OUTPUT.
*&SPWIZARD: PBO FLOW LOGIC FOR TABSTRIP 'TS_9000'
MODULE TS_9000_ACTIVE_TAB_SET.
CALL SUBSCREEN TS_9000_SCA
INCLUDING G_TS_9000-PROG G_TS_9000-SUBSCREEN.
MODULE STATUS_9000.
*
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABSTRIP 'TS_9000'
CALL SUBSCREEN TS_9000_SCA.
MODULE TS_9000_ACTIVE_TAB_GET.
MODULE USER_COMMAND_9000.
Para editar la pestaña de Socios, tendremos que ir al subscreen 9001.
Introducimos una tabla de control y un botón.
|
Añadiendo los campos Input/output referenciando con la base de datos. |
|
Tabla de control y botón resultante en el dynpro 9001. |
A continuación nos interesa saber cuál es la secuencia del Batch Input para ejecutar cada una de las modificaciones seleccionadas.
Para ello vamos a la transacció SM35 y creamos una nueva grabación:
|
Nueva grabación en la transacción SM35. |
|
Nueva grabación para iniciar el proceso |
|
Asignar el nombre de la grabación y la transacción. |
Se habrá ejecutado la transacción indicada anteriormente. A partir de este paso, hay que realizar la modificación de solo un usuario sin hacer un paso de mas, ya que se grabaría. Cuando hayamos acabado, cerramos la transacción y aparecerá una tabla BDCDATA de la grabación:
|
Tabla BDCDATA generada con la grabación. |
Con esta tabla, hay que identificar los cambios a realizar y generarla en nuestro programa para modificar todos los usuarios que hayamos seleccionado con el Checkbox.
Los códigos son los siguientes.
PROCESS BEFORE OUTPUT.
*&SPWIZARD: PBO FLOW LOGIC FOR TABSTRIP 'TS_9000'
MODULE TS_9000_ACTIVE_TAB_SET.
CALL SUBSCREEN TS_9000_SCA
INCLUDING G_TS_9000-PROG G_TS_9000-SUBSCREEN.
MODULE STATUS_9000.
*
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABSTRIP 'TS_9000'
CALL SUBSCREEN TS_9000_SCA.
MODULE TS_9000_ACTIVE_TAB_GET.
MODULE USER_COMMAND_9000.
PROCESS BEFORE OUTPUT.
* MODULE STATUS_0110.
* Copiamos la tabla socios a g_it_socios_aux (una vez)
MODULE load_socios.
* Cargamos la tabla de control linea a linea.
LOOP AT g_it_socios_aux WITH CONTROL ct_9001_socios
CURSOR ct_9001_socios-current_line.
MODULE load_ct_9001.
ENDLOOP.
*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0110.
* Cada vez que se hace un input, se actualiza la tabla de control
LOOP AT g_it_socios_aux.
MODULE update_ct_9001.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Report ZBIBLIO_MODIF_VARIOS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zbiblio_modif_varios.
CONTROLS: ct_9001_socios TYPE TABLEVIEW USING SCREEN 9001.
TABLES: zbiblio_socios.
* Añadimos un campo string (Checkbox) a la tabla interna de socios.
DATA: BEGIN OF g_it_socios_aux OCCURS 0,
flag(1) TYPE c.
INCLUDE STRUCTURE zbiblio_socios.
DATA: END OF g_it_socios_aux.
* Tabla para el Batch Input
DATA: BEGIN OF g_it_bdcdata OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF g_it_bdcdata.
DATA: cb_9001_flag TYPE c.
DATA: g_wa_vuelta TYPE i VALUE 1.
* Llamada a la Dynpro
CALL SCREEN 9000.
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
SET PF-STATUS 'STATUS_9000'.
SET TITLEBAR 'TITLE_9000'.
ENDMODULE. " STATUS_9000 OUTPUT
*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TS_9000'
CONSTANTS: BEGIN OF c_ts_9000,
tab1 LIKE sy-ucomm VALUE 'TS_9000_FC1',
tab2 LIKE sy-ucomm VALUE 'TS_9000_FC2',
tab3 LIKE sy-ucomm VALUE 'TS_9000_FC3',
END OF c_ts_9000.
*&SPWIZARD: DATA FOR TABSTRIP 'TS_9000'
CONTROLS: ts_9000 TYPE TABSTRIP.
DATA: BEGIN OF g_ts_9000,
subscreen LIKE sy-dynnr,
prog LIKE sy-repid VALUE 'ZBIBLIO_MODIF_VARIOS',
pressed_tab LIKE sy-ucomm VALUE c_ts_9000-tab1,
END OF g_ts_9000.
DATA: ok_code_9000 LIKE sy-ucomm.
*&SPWIZARD: OUTPUT MODULE FOR TS 'TS_9000'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE ts_9000_active_tab_set OUTPUT.
ts_9000-activetab = g_ts_9000-pressed_tab.
CASE g_ts_9000-pressed_tab.
WHEN c_ts_9000-tab1.
g_ts_9000-subscreen = '9001'.
WHEN c_ts_9000-tab2.
g_ts_9000-subscreen = '9002'.
WHEN c_ts_9000-tab3.
g_ts_9000-subscreen = '9003'.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE. "TS_9000_ACTIVE_TAB_SET OUTPUT
*&SPWIZARD: INPUT MODULE FOR TS 'TS_9000'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE ts_9000_active_tab_get INPUT.
ok_code_9000 = sy-ucomm.
CASE ok_code_9000.
WHEN c_ts_9000-tab1.
g_ts_9000-pressed_tab = c_ts_9000-tab1.
WHEN c_ts_9000-tab2.
g_ts_9000-pressed_tab = c_ts_9000-tab2.
WHEN c_ts_9000-tab3.
g_ts_9000-pressed_tab = c_ts_9000-tab3.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE. "TS_9000_ACTIVE_TAB_GET INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
CASE ok_code_9000.
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN 'MODIFICAR'.
PERFORM f_modificar_socios.
ENDCASE.
ENDMODULE. " USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*& Module LOAD_SOCIOS OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE load_socios OUTPUT.
IF g_wa_vuelta = 1.
SELECT * FROM zbiblio_socios
INTO CORRESPONDING FIELDS OF TABLE g_it_socios_aux.
g_wa_vuelta = g_wa_vuelta + 1.
ENDIF.
ENDMODULE. " LOAD_SOCIOS OUTPUT
*&---------------------------------------------------------------------*
*& Module LOAD_CT_9001 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE load_ct_9001 OUTPUT.
cb_9001_flag = g_it_socios_aux-flag.
MOVE-CORRESPONDING g_it_socios_aux TO zbiblio_socios.
ENDMODULE. " LOAD_CT_9001 OUTPUT
*&---------------------------------------------------------------------*
*& Module UPDATE_CT_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE update_ct_9001 INPUT.
g_it_socios_aux-flag = cb_9001_flag.
MOVE-CORRESPONDING zbiblio_socios TO g_it_socios_aux.
MODIFY g_it_socios_aux INDEX ct_9001_socios-current_line.
ENDMODULE. " UPDATE_CT_9001 INPUT
*&---------------------------------------------------------------------*
*& Form F_MODIFICAR_SOCIOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_modificar_socios .
LOOP AT g_it_socios_aux.
IF g_it_socios_aux-flag = 'X'.
* Generamos la tabla BDCDATA
PERFORM f_gen_bdcdata USING g_it_socios_aux.
* Ejecutamos el programa con la tabla BDCDATA.
CALL TRANSACTION 'ZBIBLIO_01' USING g_it_bdcdata.
ENDIF.
ENDLOOP.
ENDFORM. " F_MODIFICAR_SOCIOS
*&---------------------------------------------------------------------*
*& Form F_GEN_BDCDATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_SOCIOS_AUX text
*----------------------------------------------------------------------*
FORM f_gen_bdcdata USING p_it_socios_aux LIKE LINE OF g_it_socios_aux.
FREE g_it_bdcdata.
* Dynpro 9000
g_it_bdcdata-program = 'ZBIBLIO_CREAR_MODIF_VISUAL'.
g_it_bdcdata-dynpro = 9000.
g_it_bdcdata-dynbegin = 'X'.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'BDC_OKCODE'.
g_it_bdcdata-fval = '=MODIFICAR'.
APPEND g_it_bdcdata.
* Dynpro 9002
clear g_it_bdcdata.
g_it_bdcdata-program = 'ZBIBLIO_CREAR_MODIF_VISUAL'.
g_it_bdcdata-dynpro = 9002.
g_it_bdcdata-dynbegin = 'X'.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'BDC_CURSOR'.
g_it_bdcdata-fval = 'ZBIBLIO_SOCIOS-COD_SOCIO'.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'BDC_OKCODE'.
g_it_bdcdata-fval = '=ACCION'.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'ZBIBLIO_SOCIOS-COD_SOCIO'.
g_it_bdcdata-fval = p_it_socios_aux-cod_socio.
APPEND g_it_bdcdata.
* Dynpro 9003
clear g_it_bdcdata.
g_it_bdcdata-program = 'ZBIBLIO_CREAR_MODIF_VISUAL'.
g_it_bdcdata-dynpro = 9003.
g_it_bdcdata-dynbegin = 'X'.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'BDC_CURSOR'.
g_it_bdcdata-fval = 'ZBIBLIO_SOCIOS-COD_SOCIO'.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'BDC_OKCODE'.
g_it_bdcdata-fval = '=ACCION'.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'ZBIBLIO_SOCIOS-DNI'.
g_it_bdcdata-fval = p_it_socios_aux-dni.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'ZBIBLIO_SOCIOS-NOMBRE'.
g_it_bdcdata-fval = p_it_socios_aux-nombre.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'ZBIBLIO_SOCIOS-APELLIDO'.
g_it_bdcdata-fval = p_it_socios_aux-apellido.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'ZBIBLIO_SOCIOS-TELEFONO'.
g_it_bdcdata-fval = p_it_socios_aux-telefono.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'ZBIBLIO_SOCIOS-DIR1'.
g_it_bdcdata-fval = p_it_socios_aux-dir1.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-program = 'ZBIBLIO_CREAR_MODIF_VISUAL'.
g_it_bdcdata-dynpro = 9003.
g_it_bdcdata-dynbegin = 'X'.
APPEND g_it_bdcdata.
g_it_bdcdata-fnam = 'BDC_OKCODE'.
g_it_bdcdata-fval = '=CANCEL'.
APPEND g_it_bdcdata.
ENDFORM. " F_GEN_BDCDATA
0 comentarios :
Publicar un comentario