✒️ABAP / La ejecución de la transacción de diálogo Por Oscar Rodriguez Villate

Selector Alummnos / Empresas

ABAP La ejecución de la transacción de diálogo

ABAP La ejecución de la transacción de diálogo

EJECUCION DE UN PROGRAMA DE DIALOGO

El programa principal tiene 4 includes

INCLUDE: zprueba_dialogo_top, "para declarar datos zprueba_dialogo_pbo, "almacenar codigo del pbo zprueba_dialogo_pai, "almacenar codigo del pai zprueba_dialogo_sub. "para almacenar todo el codigo propio de la tabla de control
en cada dynpro esta:
PROCESS BFORE OUTPUT
MODULE STATUS_0XXX
MODULE CARGAR_CAMPOS_0XXX. PROCESS AFTER INPUT.
MODULE EXIT_0XXX AT EXIT-COMMAND. MODULE USER_COMMAND_0XXX.

Procesamiento de la dynpro 0200 Miramos su layout Ahora analizamos los módulos de la dynpro 0200 El que setea el status gui y el título de la dynpro El modulo del PBO cargar_tc_0200 carga la tabla de control con los campos que se seleccionan de la tabla de usuarios a partir del dni introducido en la dynpro 0100 Acá vemos la lógica que se genera automáticamente para el tratamiento de la tabla de control El modulo exit_0200 vuelve a la dynpro anterior El módulo PAI User-command_0200 analiza la acción realizada por el usuario, si presiono cancelar vuelve a la dynpro 0100, si presiono Modificar valida que si haya seleccionado una fila de la tabla de control, si esto se cumple llama a la dynpro 0300, sino emite un mensaje de error Logia de procesamiento 0300 Miramos el modulo status 0300 Es el que setea el status gui y el título de la dynpro El modulo del PBO 0300 La que se encarga de llenar la pantalla con datos El modulo del PAI 0300 llama a la dynpro anterior El modulo del PAI user_command_0300 analiza la acción realizada por el usuario, si presiona cancelar vuelve a la dynpro 0100, si presiona modificar ejecutara un popap para confirmar la modificaión si responde si modificara la tabla bases de datos

*&---------------------------------------------------------------------* *& Module Pool ZPRUEBA_DIALOGO *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* PROGRAM zprueba_dialogo. INCLUDE: zprueba_dialogo_top, zprueba_dialogo_pbo, zprueba_dialogo_pai, zprueba_dialogo_sub. *&---------------------------------------------------------------------* *& Include ZPRUEBA_DIALOGO_TOP *&---------------------------------------------------------------------* TYPE-POOLS: slis. DATA: BEGIN OF ti_usuarios OCCURS 0, marca(1) TYPE c, dni TYPE z_dni, nombre_ape TYPE z_nombre_ape, estado_usu TYPE z_estado_usu, direccion TYPE z_direccion, codigo_postal TYPE z_codigo_postal, f_nacimiento TYPE z_fnacimiento, estado_civil TYPE z_estado_civil, END OF ti_usuarios. DATA: st_usuarios LIKE LINE OF ti_usuarios, ti_botones TYPE slis_t_extab. DATA: BEGIN OF ti_usuarios_aux OCCURS 0, dni TYPE z_dni, nombre_ape TYPE z_nombre_ape, estado_usu TYPE z_estado_usu, direccion TYPE z_direccion, codigo_postal TYPE z_codigo_postal, f_nacimiento TYPE z_fnacimiento, estado_civil TYPE z_estado_civil, END OF ti_usuarios_aux. DATA: st_usuarios_aux LIKE LINE OF ti_usuarios_aux. DATA: BEGIN OF wa_screen_0100, dni TYPE z_dni, END OF wa_screen_0100. DATA: v_ucomm TYPE sy-ucomm, v_dni LIKE wa_screen_0100-dni, v_cantidad TYPE i, v_answer(1) TYPE c, st_tabla_usuarios TYPE ztabla_usuarios. DATA: BEGIN OF wa_screen_0300, dni TYPE z_dni, nombre_ape TYPE z_nombre_ape, estado_usu TYPE z_estado_usu, direccion TYPE z_direccion, codigo_postal TYPE z_codigo_postal, f_nacimiento TYPE z_fnacimiento, estado_civil TYPE z_estado_civil, END OF wa_screen_0300. *&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_USUARIOS' ITSELF CONTROLS: tc_usuarios TYPE TABLEVIEW USING SCREEN 0200. *&SPWIZARD: LINES OF TABLECONTROL 'TC_USUARIOS' DATA: g_tc_usuarios_lines LIKE sy-loopc. DATA: ok_code LIKE sy-ucomm. *&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TS_USUARIOS' CONSTANTS: BEGIN OF c_ts_usuarios, tab1 LIKE sy-ucomm VALUE 'TS_USUARIOS_FC1', tab2 LIKE sy-ucomm VALUE 'TS_USUARIOS_FC2', tab3 LIKE sy-ucomm VALUE 'TS_USUARIOS_FC3', END OF c_ts_usuarios. *&SPWIZARD: DATA FOR TABSTRIP 'TS_USUARIOS' CONTROLS: ts_usuarios TYPE TABSTRIP. DATA: BEGIN OF g_ts_usuarios, subscreen LIKE sy-dynnr, prog LIKE sy-repid VALUE 'ZPRUEBA_DIALOGO', pressed_tab LIKE sy-ucomm VALUE c_ts_usuarios-tab1, END OF g_ts_usuarios. *&---------------------------------------------------------------------* *& Include ZPRUEBA_DIALOGO_PBO *&---------------------------------------------------------------------* *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_USUARIOS'. DO NOT CHANGE THIS LINE! *&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR MODULE tc_usuarios_change_tc_attr OUTPUT. DESCRIBE TABLE ti_usuarios LINES tc_usuarios-lines. ENDMODULE. "TC_USUARIOS_CHANGE_TC_ATTR OUTPUT *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_USUARIOS'. DO NOT CHANGE THIS LINE! *&SPWIZARD: GET LINES OF TABLECONTROL MODULE tc_usuarios_get_lines OUTPUT. g_tc_usuarios_lines = sy-loopc. ENDMODULE. "TC_USUARIOS_GET_LINES OUTPUT *&---------------------------------------------------------------------* *& Module STATUS_0200 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE status_0200 OUTPUT. SET PF-STATUS '0200'. SET TITLEBAR '0200'. ENDMODULE. " STATUS_0200 OUTPUT *&---------------------------------------------------------------------* *& Module STATUS_0300 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE status_0300 OUTPUT. SET PF-STATUS '0300'. SET TITLEBAR '0300'. ENDMODULE. " STATUS_0300 OUTPUT *&SPWIZARD: OUTPUT MODULE FOR TS 'TS_USUARIOS'. DO NOT CHANGE THIS LINE! *&SPWIZARD: SETS ACTIVE TAB MODULE ts_usuarios_active_tab_set OUTPUT. ts_usuarios-activetab = g_ts_usuarios-pressed_tab. CASE g_ts_usuarios-pressed_tab. WHEN c_ts_usuarios-tab1. g_ts_usuarios-subscreen = '0101'. WHEN c_ts_usuarios-tab2. g_ts_usuarios-subscreen = '0102'. WHEN c_ts_usuarios-tab3. g_ts_usuarios-subscreen = '0103'. WHEN OTHERS. *&SPWIZARD: DO NOTHING ENDCASE. ENDMODULE. "TS_USUARIOS_ACTIVE_TAB_SET OUTPUT *&---------------------------------------------------------------------* *& Module STATUS_0100 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE status_0100 OUTPUT. SET PF-STATUS '0100'. SET TITLEBAR '0100'. ENDMODULE. " STATUS_0100 OUTPUT *&---------------------------------------------------------------------* *& Module CARGAR_TC_0200 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE cargar_tc_0200 OUTPUT. CLEAR: ti_usuarios_aux, st_usuarios, ti_usuarios. REFRESH: ti_usuarios_aux, ti_usuarios. IF NOT wa_screen_0100-dni IS INITIAL. * Recupero solo el dni introducido SELECT dni nombre_ape estado_usu direccion codigo_postal f_nacimiento estado_civil FROM ztabla_usuarios INTO TABLE ti_usuarios_aux WHERE dni EQ wa_screen_0100-dni. ELSE. * Recupero todos los DNIs SELECT dni nombre_ape estado_usu direccion codigo_postal f_nacimiento estado_civil FROM ztabla_usuarios INTO TABLE ti_usuarios_aux. ENDIF. * Pasamos el contenido a la tabla del TC LOOP AT ti_usuarios_aux INTO st_usuarios_aux. CLEAR st_usuarios. st_usuarios-dni = st_usuarios_aux-dni. st_usuarios-nombre_ape = st_usuarios_aux-nombre_ape. st_usuarios-estado_usu = st_usuarios_aux-estado_usu. st_usuarios-direccion = st_usuarios_aux-direccion. st_usuarios-codigo_postal = st_usuarios_aux-codigo_postal. st_usuarios-f_nacimiento = st_usuarios_aux-f_nacimiento. st_usuarios-estado_civil = st_usuarios_aux-estado_civil. APPEND st_usuarios TO ti_usuarios. ENDLOOP. ENDMODULE. " CARGAR_TC_0200 OUTPUT *&---------------------------------------------------------------------* *& Module EXIT_0300 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE exit_0300 INPUT. CALL SCREEN 0200. ENDMODULE. " EXIT_0300 INPUT *&---------------------------------------------------------------------* *& Module CARGAR_CAMPOS_0300 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE cargar_campos_0300 OUTPUT. READ TABLE ti_usuarios INTO st_usuarios WITH KEY marca = 'X'. IF sy-subrc EQ 0. CLEAR wa_screen_0300. wa_screen_0300-dni = st_usuarios-dni. wa_screen_0300-nombre_ape = st_usuarios-nombre_ape. wa_screen_0300-estado_usu = st_usuarios-estado_usu. wa_screen_0300-direccion = st_usuarios-direccion. wa_screen_0300-f_nacimiento = st_usuarios-f_nacimiento. wa_screen_0300-estado_civil = st_usuarios-estado_civil. ENDIF. ENDMODULE. " CARGAR_CAMPOS_0300 OUTPUT *&---------------------------------------------------------------------* *& Include ZPRUEBA_DIALOGO_PAI *&---------------------------------------------------------------------* *&SPWIZARD: INPUT MODUL FOR TC 'TC_USUARIOS'. DO NOT CHANGE THIS LINE! *&SPWIZARD: MARK TABLE MODULE tc_usuarios_mark INPUT. DATA: g_tc_usuarios_wa2 LIKE LINE OF ti_usuarios. IF tc_usuarios-line_sel_mode = 1 AND st_usuarios-marca = 'X'. LOOP AT ti_usuarios INTO g_tc_usuarios_wa2 WHERE marca = 'X'. g_tc_usuarios_wa2-marca = ''. MODIFY ti_usuarios FROM g_tc_usuarios_wa2 TRANSPORTING marca. ENDLOOP. ENDIF. MODIFY ti_usuarios FROM st_usuarios INDEX tc_usuarios-current_line TRANSPORTING marca. ENDMODULE. "TC_USUARIOS_MARK INPUT *&SPWIZARD: INPUT MODULE FOR TC 'TC_USUARIOS'. DO NOT CHANGE THIS LINE! *&SPWIZARD: PROCESS USER COMMAND MODULE tc_usuarios_user_command INPUT. ok_code = sy-ucomm. PERFORM user_ok_tc USING 'TC_USUARIOS' 'TI_USUARIOS' 'MARCA' CHANGING ok_code. sy-ucomm = ok_code. ENDMODULE. "TC_USUARIOS_USER_COMMAND INPUT *&---------------------------------------------------------------------* *& Module USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE user_command_0100 INPUT. MOVE ok_code TO v_ucomm. CLEAR ok_code. CASE v_ucomm. * Borrar DNI WHEN 'BORRAR'. CLEAR wa_screen_0100-dni. WHEN 'BUSCAR_USU'. CALL SCREEN 0200 STARTING AT 5 1 ENDING AT 130 25. ENDCASE. ENDMODULE. " USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* *& Module USER_COMMAND_0200 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE user_command_0200 INPUT. MOVE ok_code TO v_ucomm. CLEAR ok_code. CASE v_ucomm. WHEN 'CANCELAR'. CALL SCREEN 0100. WHEN 'MODIFICAR'. * Sumarizo la cantidad de filas seleccionadas CLEAR v_cantidad. LOOP AT ti_usuarios INTO st_usuarios WHERE marca EQ 'X'. ADD 1 TO v_cantidad. ENDLOOP. IF v_cantidad IS INITIAL. MESSAGE e003(z_prueba) WITH 'Debe seleccionar al menos un registro'. ELSEIF v_cantidad EQ 1. CALL SCREEN 0300. ENDIF. ENDCASE. ENDMODULE. " USER_COMMAND_0200 INPUT *&---------------------------------------------------------------------* *& Module USER_COMMAND_0300 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE user_command_0300 INPUT. MOVE ok_code TO v_ucomm. CLEAR ok_code. CASE v_ucomm. WHEN 'CANCELAR'. CALL SCREEN 0100. WHEN 'CONFIRMAR'. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = 'Confirmación' text_question = 'Está seguro que desea modificar?' text_button_1 = 'Si' text_button_2 = 'No' display_cancel_button = ' ' IMPORTING answer = v_answer EXCEPTIONS text_not_found = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. IF v_answer EQ '1'. CLEAR st_tabla_usuarios. st_tabla_usuarios-mandt = sy-mandt. st_tabla_usuarios-dni = wa_screen_0300-dni. st_tabla_usuarios-nombre_ape = wa_screen_0300-nombre_ape. st_tabla_usuarios-estado_usu = wa_screen_0300-estado_usu. st_tabla_usuarios-direccion = wa_screen_0300-direccion. st_tabla_usuarios-f_nacimiento = wa_screen_0300-f_nacimiento. st_tabla_usuarios-estado_civil = wa_screen_0300-estado_civil. MODIFY ztabla_usuarios FROM st_tabla_usuarios. IF sy-subrc EQ 0. COMMIT WORK AND WAIT. MESSAGE s003(z_prueba) WITH 'Los datos han sido modificados correctamente'. CALL SCREEN 0100. ELSE. ROLLBACK WORK. ENDIF. ENDIF. ENDIF. ENDCASE. ENDMODULE. " USER_COMMAND_0300 INPUT *&SPWIZARD: INPUT MODULE FOR TS 'TS_USUARIOS'. DO NOT CHANGE THIS LINE! *&SPWIZARD: GETS ACTIVE TAB MODULE ts_usuarios_active_tab_get INPUT. ok_code = sy-ucomm. CASE ok_code. WHEN c_ts_usuarios-tab1. g_ts_usuarios-pressed_tab = c_ts_usuarios-tab1. WHEN c_ts_usuarios-tab2. g_ts_usuarios-pressed_tab = c_ts_usuarios-tab2. WHEN c_ts_usuarios-tab3. g_ts_usuarios-pressed_tab = c_ts_usuarios-tab3. WHEN OTHERS. *&SPWIZARD: DO NOTHING ENDCASE. ENDMODULE. "TS_USUARIOS_ACTIVE_TAB_GET INPUT *&---------------------------------------------------------------------* *& Module EXIT INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE exit_0100 INPUT. LEAVE PROGRAM. ENDMODULE. " EXIT INPUT *&---------------------------------------------------------------------* *& Module VALIDAR_DNI_0100 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE validar_dni_0100 INPUT. IF NOT wa_screen_0100-dni IS INITIAL. CLEAR v_dni. SELECT SINGLE dni FROM ztabla_usuarios INTO v_dni WHERE dni = wa_screen_0100-dni. IF sy-subrc NE 0. MESSAGE e003(z_prueba) WITH 'El DNI introducido no existe'. ENDIF. ENDIF. ENDMODULE. " VALIDAR_DNI_0100 INPUT *&---------------------------------------------------------------------* *& Module EXIT_0200 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE exit_0200 INPUT. LEAVE TO SCREEN 0100. ENDMODULE. " EXIT_0200 INPUT *&---------------------------------------------------------------------* *& Include ZPRUEBA_DIALOGO_SUB *&---------------------------------------------------------------------* *----------------------------------------------------------------------* * INCLUDE TABLECONTROL_FORMS * *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form USER_OK_TC * *&---------------------------------------------------------------------* FORM USER_OK_TC USING P_TC_NAME TYPE DYNFNAM P_TABLE_NAME P_MARK_NAME CHANGING P_OK LIKE SY-UCOMM. *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* DATA: L_OK TYPE SY-UCOMM, L_OFFSET TYPE I. *&SPWIZARD: END OF LOCAL DATA------------------------------------------* *&SPWIZARD: Table control specific operations * *&SPWIZARD: evaluate TC name and operations * SEARCH P_OK FOR P_TC_NAME. IF SY-SUBRC <> 0. EXIT. ENDIF. L_OFFSET = STRLEN( P_TC_NAME ) 1. L_OK = P_OK L_OFFSET. *&SPWIZARD: execute general and TC specific operations * CASE L_OK. WHEN 'INSR'. "insert row PERFORM FCODE_INSERT_ROW USING P_TC_NAME P_TABLE_NAME. CLEAR P_OK. WHEN 'DELE'. "delete row PERFORM FCODE_DELETE_ROW USING P_TC_NAME P_TABLE_NAME P_MARK_NAME. CLEAR P_OK. WHEN 'P--' OR "top of list 'P-' OR "previous page 'P ' OR "next page 'P '. "bottom of list PERFORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME L_OK. CLEAR P_OK. * WHEN 'L--'. "total left * PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME. * * WHEN 'L-'. "column left * PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME. * * WHEN 'R '. "column right * PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME. * * WHEN 'R '. "total right * PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME. * WHEN 'MARK'. "mark all filled lines PERFORM FCODE_TC_MARK_LINES USING P_TC_NAME P_TABLE_NAME P_MARK_NAME . CLEAR P_OK. WHEN 'DMRK'. "demark all filled lines PERFORM FCODE_TC_DEMARK_LINES USING P_TC_NAME P_TABLE_NAME P_MARK_NAME . CLEAR P_OK. * WHEN 'SASCEND' OR * 'SDESCEND'. "sort column * PERFORM FCODE_SORT_TC USING P_TC_NAME * l_ok. ENDCASE. ENDFORM. " USER_OK_TC *&---------------------------------------------------------------------* *& Form FCODE_INSERT_ROW * *&---------------------------------------------------------------------* FORM fcode_insert_row USING P_TC_NAME TYPE DYNFNAM P_TABLE_NAME . *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* DATA L_LINES_NAME LIKE FELD-NAME. DATA L_SELLINE LIKE SY-STEPL. DATA L_LASTLINE TYPE I. DATA L_LINE TYPE I. DATA L_TABLE_NAME LIKE FELD-NAME. FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL. FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE. FIELD-SYMBOLS <LINES> TYPE I. *&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>. *&SPWIZARD: get the table, which belongs to the tc * CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline *&SPWIZARD: get looplines of TableControl * CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_LINES_NAME. ASSIGN (L_LINES_NAME) TO <LINES>. *&SPWIZARD: get current line * GET CURSOR LINE L_SELLINE. IF SY-SUBRC <> 0. " append line to table L_SELLINE = <TC>-LINES 1. *&SPWIZARD: set top line * IF L_SELLINE > <LINES>. <TC>-TOP_LINE = L_SELLINE - <LINES> 1 . ELSE. <TC>-TOP_LINE = 1. ENDIF. ELSE. " insert line into table L_SELLINE = <TC>-TOP_LINE L_SELLINE - 1. L_LASTLINE = <TC>-TOP_LINE <LINES> - 1. ENDIF. *&SPWIZARD: set new cursor line * L_LINE = L_SELLINE - <TC>-TOP_LINE 1. *&SPWIZARD: insert initial line * INSERT INITIAL LINE INTO <TABLE> INDEX L_SELLINE. <TC>-LINES = <TC>-LINES 1. *&SPWIZARD: set cursor * SET CURSOR LINE L_LINE. ENDFORM. " FCODE_INSERT_ROW *&---------------------------------------------------------------------* *& Form FCODE_DELETE_ROW * *&---------------------------------------------------------------------* FORM fcode_delete_row USING P_TC_NAME TYPE DYNFNAM P_TABLE_NAME P_MARK_NAME . *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* DATA L_TABLE_NAME LIKE FELD-NAME. FIELD-SYMBOLS <TC> TYPE cxtab_control. FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE. FIELD-SYMBOLS <WA>. FIELD-SYMBOLS <MARK_FIELD>. *&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>. *&SPWIZARD: get the table, which belongs to the tc * CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline *&SPWIZARD: delete marked lines * DESCRIBE TABLE <TABLE> LINES <TC>-LINES. LOOP AT <TABLE> ASSIGNING <WA>. *&SPWIZARD: access to the component 'FLAG' of the table header * ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>. IF <MARK_FIELD> = 'X'. DELETE <TABLE> INDEX SYST-TABIX. IF SY-SUBRC = 0. <TC>-LINES = <TC>-LINES - 1. ENDIF. ENDIF. ENDLOOP. ENDFORM. " FCODE_DELETE_ROW *&---------------------------------------------------------------------* *& Form COMPUTE_SCROLLING_IN_TC *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_TC_NAME name of tablecontrol * -->P_OK ok code *----------------------------------------------------------------------* FORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME P_OK. *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* DATA L_TC_NEW_TOP_LINE TYPE I. DATA L_TC_NAME LIKE FELD-NAME. DATA L_TC_LINES_NAME LIKE FELD-NAME. DATA L_TC_FIELD_NAME LIKE FELD-NAME. FIELD-SYMBOLS <TC> TYPE cxtab_control. FIELD-SYMBOLS <LINES> TYPE I. *&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>. *&SPWIZARD: get looplines of TableControl * CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_TC_LINES_NAME. ASSIGN (L_TC_LINES_NAME) TO <LINES>. *&SPWIZARD: is no line filled? * IF <TC>-LINES = 0. *&SPWIZARD: yes, ... * L_TC_NEW_TOP_LINE = 1. ELSE. *&SPWIZARD: no, ... * CALL FUNCTION 'SCROLLING_IN_TABLE' EXPORTING ENTRY_ACT = <TC>-TOP_LINE ENTRY_FROM = 1 ENTRY_TO = <TC>-LINES LAST_PAGE_FULL = 'X' LOOPS = <LINES> OK_CODE = P_OK OVERLAPPING = 'X' IMPORTING ENTRY_NEW = L_TC_NEW_TOP_LINE EXCEPTIONS * NO_ENTRY_OR_PAGE_ACT = 01 * NO_ENTRY_TO = 02 * NO_OK_CODE_OR_PAGE_GO = 03 OTHERS = 0. ENDIF. *&SPWIZARD: get actual tc and column * GET CURSOR FIELD L_TC_FIELD_NAME AREA L_TC_NAME. IF SYST-SUBRC = 0. IF L_TC_NAME = P_TC_NAME. *&SPWIZARD: et actual column * SET CURSOR FIELD L_TC_FIELD_NAME LINE 1. ENDIF. ENDIF. *&SPWIZARD: set the new top line * <TC>-TOP_LINE = L_TC_NEW_TOP_LINE. ENDFORM. " COMPUTE_SCROLLING_IN_TC *&---------------------------------------------------------------------* *& Form FCODE_TC_MARK_LINES *&---------------------------------------------------------------------* * marks all TableControl lines *----------------------------------------------------------------------* * -->P_TC_NAME name of tablecontrol *----------------------------------------------------------------------* FORM FCODE_TC_MARK_LINES USING P_TC_NAME P_TABLE_NAME P_MARK_NAME. *&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------* DATA L_TABLE_NAME LIKE FELD-NAME. FIELD-SYMBOLS <TC> TYPE cxtab_control. FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE. FIELD-SYMBOLS <WA>. FIELD-SYMBOLS <MARK_FIELD>. *&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>. *&SPWIZARD: get the table, which belongs to the tc * CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline *&SPWIZARD: mark all filled lines * LOOP AT <TABLE> ASSIGNING <WA>. *&SPWIZARD: access to the component 'FLAG' of the table header * ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>. <MARK_FIELD> = 'X'. ENDLOOP. ENDFORM. "fcode_tc_mark_lines *&---------------------------------------------------------------------* *& Form FCODE_TC_DEMARK_LINES *&---------------------------------------------------------------------* * demarks all TableControl lines *----------------------------------------------------------------------* * -->P_TC_NAME name of tablecontrol *----------------------------------------------------------------------* FORM FCODE_TC_DEMARK_LINES USING P_TC_NAME P_TABLE_NAME P_MARK_NAME . *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* DATA L_TABLE_NAME LIKE FELD-NAME. FIELD-SYMBOLS <TC> TYPE cxtab_control. FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE. FIELD-SYMBOLS <WA>. FIELD-SYMBOLS <MARK_FIELD>. *&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>. *&SPWIZARD: get the table, which belongs to the tc * CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline *&SPWIZARD: demark all filled lines * LOOP AT <TABLE> ASSIGNING <WA>. *&SPWIZARD: access to the component 'FLAG' of the table header * ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>. <MARK_FIELD> = SPACE. ENDLOOP. ENDFORM. "fcode_tc_mark_lines


 

Escanear / Compartir

 

 


Sobre el autor

Publicación académica de Oscar Guillermo Rodriguez Villate, en su ámbito de estudios para la Carrera Consultor ABAP Nivel Avanzado.

SAP Expert


Oscar Guillermo Rodriguez Villate

Profesión: Ingeniero de Sistemas - Colombia - Legajo: WM49P

✒️Autor de: 103 Publicaciones Académicas

🎓Egresado de los módulos:

Disponibilidad Laboral: FullTime

Certificación Académica de Oscar Rodriguez

✒️+Comunidad Académica CVOSOFT

Continúe aprendiendo sobre el tema "La ejecución de la transacción de diálogo" de la mano de nuestros alumnos.

SAP Master


La ejecución de la transacción de diálogo Repaso de la programación de la transacción Se repasó todo lo realizado en la unidad sobre la programación de una transacción de diálogo en ABAP. El programa trabajado es Zprogram_bajo_diálogo, diseñado para la interacción online del usuario mediante varias pantallas (dimpors). La transacción cuenta con varias pantallas (0100, 0200, 0300), cada una con funciones específicas: selección de DNI, visualización/modificación de usuarios, y edición de registros. Se implementaron y revisaron objetos como status gui, títulos en cada dimpro, la transacción...

Acceder a esta publicación

Creado y Compartido por: Juan Ignacio Romero

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Expert



En SAP, una transacción de diálogo es el flujo interactivo que permite a un usuario ejecutar funciones de negocio mediante pantallas (dynpros) y lógica ABAP asociada. A diferencia de procesos en segundo plano, la transacción de diálogo se caracteriza por ciclos cortos de interacción usuario‑sistema, tiempos de respuesta medidos y validaciones inmediatas. Inicio y validaciones iniciales. El proceso comienza cuando el usuario introduce un código de transacción (t‑code) en la barra de comandos o accede desde un menú/Fiori Launchpad a su equivalente GUI. El sistema realiza verificaciones como S_TCODE (autorización para ejecutar la transacción) y, si corresponde, precarga...

Acceder a esta publicación

Creado y Compartido por: David Ibarra / Disponibilidad Laboral: FullTime + Carta Presentación

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

La lección "9º: La ejecución de la transacción de diálogo" se centra en la demostración y el repaso de la programación de una transacción de diálogo en ABAP, consolidando los conceptos y objetos creados a lo largo de la unidad. Se explora el flujo de interacción del usuario con un programa online que utiliza múltiples pantallas. Repaso de la Programación de la Transacción de Diálogo Este punto revisa los elementos clave y el código ABAP desarrollado para construir la transacción de diálogo, enfatizando la naturaleza interactiva y online de este tipo de programas. • Propósito del Programa de Diálogo:...

Acceder a esta publicación

Creado y Compartido por: Roberto Fluder Ahumada

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Expert


Es un tipo de programa ABAP que consiste en una serie de pantallas o dynpros por las que el usuario va navegando a medida que se produce la ejecución del programa. Cada pantalla o dynpro tiene una lógica asociada. Dicha lógica se separa entre lo que sucede antes que la pantalla se visualiza y lo que sucede después que el usuario presiona algun botón en la pantalla. Lo que sucede antes que se visualice la pantalla se denomina PBO (Procesamiento Antes de la Salida) y lo que sucede después que el usuario realiza alguna acción como presionar un botón se denomina PAI (Procesamiento Después de la Entrada).

Acceder a esta publicación

Creado y Compartido por: Jose Medina / Disponibilidad Laboral: FullTime + Carta Presentación

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Expert


La ejecución de la transacción de diálogo Repaso de todas las unidades: transaccion de dialogo. Programa ejemplo zprueba_dialogio, el user interactua en forma online con distintas pantallas (dynpro). Objetos creados: dynpro: - 0100 - 0200 - 0300 status gui: cada dynpro tiene su status gui, que esta compuesto de barra de menu, pulsadores y teclas de funcion. - 0100 - 0200 - 0300 titulos Gui: cada dynpro tiene titulos - 0100 - 0200 - 0300 Transaccion: el programa de dialogo se ejecuta a traves de la transaccion. se especifica la dynpro inicial. Includes: se crea el codigo para el PAI,PBO, para subrutinas, y para la definicion de datos. Todos los objetos...

Acceder a esta publicación

Creado y Compartido por: Pablo Adrian Oggero

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Master

Ejecución de un programa de dialogo. Al crear el programa ZPRUEBA_DIALOGO, con 4 include visualizamos los módulos que tiene cada dynpro y probamos el programa, ejecutando la transacción Z_ACT_USU vemos la pantalla 0100, e introducimos algún dato que no existe y clickleamos el botón buscar usuarios aparece el mensaje error. Si no ingresamos ningún dato y buscamos usuarios, no parece una tabla de control con todos los usuarios. Si seleccionamos un usuario nos lleva a una tabla dynpro 0200 y si queremos modificar sin seleccionar un registro aparece error de mensaje de pantalla. Pero si se selecciona y modificar usuario...

Acceder a esta publicación

Creado y Compartido por: Pedro Salazar / Disponibilidad Laboral: FullTime + Carta Presentación

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Expert


Unidad 2: La programación de diálogo Lección 9: La ejecución de un programa de diálogo Creamos el programa ZPRUEBA_DIALOGO con 4 includes zprueba_dialogo_top: para las declaraciones de datos. zprueba_dialogo_pbo: para almacenar todo el cód. del PBO. zprueba_dialogo_pai: para almacenar todo el cód. del PAI. zprueba_dialogo_sub: para almacenar todo el cód. propia de la TC. Ahora veremos cada dynpro: Lógica de procesamiento de dynpro 0100 (Con el botón "Layout" vemos cómo se verá por pantalla): Analicemos los módulos: MODULE status_0100 (PBO): encargado de setear el Status GUI y el título de la dynpro: MODULE validar_dni_0100:...

Acceder a esta publicación

Creado y Compartido por: Candela Calzada / Disponibilidad Laboral: FullTime + Carta Presentación

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Expert


Deberemos crear un INCLUDE para almacenar todo los referido a las declaraciones de datos, otro INCLUDE para almacenar los MODULES pertenecientes al PBO, otro INCLUDE para almacenar todos los MODULES pertenecientes al PAI y un último INCLUDE para almacenar las subrutinas tanto del PBO como del PAI. Por supuesto como en cualquier otro tipo de programa ABAP deberemos crear una transacción asociada al programa de diálogo para poder ejecutar el programa. Es importante tener presente que un programa de diálogo es un tipo de programa que está compuesto por muchos otros objetos de ABAP y que para que este funcione correctamente, todos los objetos que lo componen, como ser: dynpros, status, títulos, transacciones,...

Acceder a esta publicación

Creado y Compartido por: Alex Francisco Lemos Collazos

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

ABAP ejecución de un programa de diálogo la correcta modularización del código generado en un programa de diálogo es un paso fundamental, es por ello que es sumamente recomendable la creación de INCLUDES. Deberemos crear un INCLUDE para almacenar todo los referido a las declaraciones de datos, otro INCLUDE para almacenar los MODULES pertenecientes al PBO, otro INCLUDE para almacenar todos los MODULES pertenecientes al PAI y un último INCLUDE para almacenar las subrutinas tanto del PBO como del PAI. Por supuesto como en cualquier otro tipo de programa ABAP deberemos crear una transacción asociada al programa de diálogo para poder ejecutar el programa. Es importante tener presente...

Acceder a esta publicación

Creado y Compartido por: Diego Armando De Santiago Castanon

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

EJECUCIÓN DEL PROGRAMA DEL DIÁLOGO. Para ejecutar el programa de diálogo se debe tener listo el módulo de TOP, PBO, PAI y SUB( generado por la tabla de control). Asís mismo realizar las pruebas y activarlos todos. Es importante destacar que ese es el orden que debe tener los módulo para evitar errores al activar o de ejecución. Para ejecutar la transacción,en la línea de comando se escribe la transacción previamente creada por la SE93. Verificar la correcta sincronización de la dynpro, la función de los botones y la ejecución de cada modulo desarrollado.

Acceder a esta publicación

Creado y Compartido por: Morela Silva

 


 

👌Genial!, estos fueron los últimos artículos sobre más de 99.000 publicaciones académicas abiertas, libres y gratuitas compartidas con la comunidad, para acceder a ellas le dejamos el enlace a CVOPEN ACADEMY.

🔎Buscador de Publicaciones:

 


 

No sea Juan... Solo podrá llegar alto si realiza su formación con los mejores!