Objetivos:
Añadimos una Dynpro 9000 con su correspondiente Status para salir del programa.
Dentro de la Dynpro 9000 creamos un Tapstrip usando el asistente donde se indicará:
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:
Para editar la pestaña de Socios, tendremos que ir al subscreen 9001.
Introducimos una tabla de control y un botón.
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:
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:
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.
- 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:
Creamos un nuevo Report en la SE38.Crear un nuevo Report con la SE38 |
Añadimos una Dynpro. |
Acción de salir para poder cerrar el Dynpro. |
- 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. |
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. |
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. |
Tabla BDCDATA generada con la grabación. |
Los códigos son los siguientes.
- Dynpro 9000
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.
- Dynpro 9001 (Subscreen)
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
*&---------------------------------------------------------------------* *& 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