- Un diálogo no es más que una pantalla (dynpro) más un programa Abap/4 subyacente que actúa según las elecciones del usuario (meter datos, elegir comandos, ...) sobre la pantalla presentada. Una transacción llama al proceso de programa asociado. Por tanto, en programación de diálogo se usan diversos objetos: transacciones, dynpros y programas Abap/4 tipo M (module pool).
- Para crear una transacción: por menú ir a Desarrollo – Más Herramientas – Transacciones, o directamente > SE93 Y pulsar el icono de crear (una hoja en blanco). Su nombre debe empezar por Z y son 4 caracteres. Indicar “transacción de diálogo”). Luego, en “programa”, indicar el nombre del module pool a ejecutar cuando se invoque a la transacción, así como el número de la primera dynpro a visualizar. Para cada dynpro a mostrar hay que especificarla cuál va a ser la siguiente, si existe. Si no, se debe poner 0 como dynpro siguiente.
- Las dynpro’s se crean y editan con el Screen Painter. Pueden tener botones, menús, iconos, marcos, flags, ... (eso es el “screen layout”: la disposición visual de los campos en la pantalla). Se crean y agrupan como se desee con el botón Elemento Gráfico. Yendo a Status (una vez dentro del Screen Painter) pueden verse todas las características del programa module pool. Con el botón Atributos se pueden ver los atributos del campo seleccionado. En los textos (labels) de una dynpro hay que escribir los blancos como subrayados para que se tome el texto como único. Una vez creada una pantalla o dynpro, debe activarse tras grabarla (como todo objeto SAP).
- Por detrás de la dynpro habrá eventos que se activarán si los usuarios los eligen. Hay 2 eventos que siempre existen: PBO (Process Before Output: Procesos que se ejecutan siempre antes de que se muestre la dynpro por pantalla) y PAI (Process After Input: Procesos que se ejecutan una vez que el usuario ha elegido la acción a realizar). En un diálogo, una variable o campo que cambie el usuario, queda cambiada en el programa, y viceversa.
- Un module pool es un programa Abap/4 tipo M. Los estándar de SAP se llaman SAPMXXXX, siendo XXXX la transacción asociada. Estos programas sólo contienen sentencias INCLUDE, como ocurre con los grupos de funciones. Al menos existirán estos 3 includes: un ‘TOP’ para las variables globales, tablas, ... un ‘O’ para los procesos PBO, y un ‘I’ para los procesos PAI. En el include ‘TOP’ hay que declarar siempre la sentencia: DATA OK_CODE(4), que se usa para recoger el código del comando seleccionado por el usuario. Los otros 2 includes obligatorios son, salvo por las sentencias MODULE y ENDMODULE, programas includes normales.
- Al llamar a una transacción, se ejecutan todos los módulos que hay en el PBO (se añade OUTPUT a la sentencia MODULE), en el orden en que estén escritos. A continuación se muestra la pantalla dynpro al usuario. Cuando éste elige un comando, se ejecutan los procesos PAI correspondiente y sus módulos asociados (puede pasarse a una nueva dynpro). En este include conviene codificar siempre un módulo para poder abandonar la ejecución del diálogo cuando se desee. Debería ser el primer proceso de los PAI. Pueden usarse los mismos includes PAI y PBO para todas las pantallas en las que se haga lo mismo (así, se comparten). (Ref : http://www.abap.es/centro_Manual_14_Programacion_dialogo.htm )
PROGRAM YMPSKEL MESSAGE-ID YL.
*-----------------------------------------------------------------------
* DESCRIPTION
* written by !
*-----------------------------------------------------------------------
* TABLES:
DATA: OK_CODE(4), " ok code - screen 1
OK_CODE2(4).
DATA C LIKE SY-INDEX. " Index for screen loop
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* process after input for screen 0100 *
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE OK_CODE.
WHEN 'SAVE'.
*
WHEN 'DISP'.
*
WHEN 'LIST'.
C = 0. "reset loop control
*
WHEN OTHERS.
*
ENDCASE.
CLEAR OK_CODE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* process before output for screen 0100 *
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'AMEND'. " set gui status
SET TITLEBAR '100'. " set title
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Form SAVE data
*&---------------------------------------------------------------------*
* Save screen details
*&---------------------------------------------------------------------*
FORM SAVE.
*
CLEAR OK_CODE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM DISPLAY.
*
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Module EXIT_COMMAND INPUT
*&---------------------------------------------------------------------*
* exit commands are processed before validation *
* defined by E against function in menu painter(function list)
*----------------------------------------------------------------------*
MODULE EXIT_COMMAND INPUT.
CASE OK_CODE.
WHEN 'EXIT'. CLEAR OK_CODE. SET SCREEN 0. LEAVE SCREEN.
WHEN 'CANC'. CLEAR OK_CODE. SET SCREEN 0. LEAVE SCREEN.
WHEN 'BACK'. CLEAR OK_CODE. SET SCREEN 0. LEAVE SCREEN.
ENDCASE.
ENDMODULE. " EXIT_COMMAND INPUT
*&---------------------------------------------------------------------*
*& Form list
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
FORM LIST.
CLEAR OK_CODE. SET SCREEN 200. LEAVE SCREEN.
ENDFORM. " LIST
*&---------------------------------------------------------------------*
*& Module EXIT_COMMAND_200 INPUT
*&---------------------------------------------------------------------*
* exit command processing for screen 200 *
* defined by E against function in menu painter(function list)
*----------------------------------------------------------------------*
MODULE EXIT_COMMAND_200 INPUT.
CASE OK_CODE2.
WHEN 'EXIT'. CLEAR OK_CODE2. SET SCREEN 0. LEAVE SCREEN.
WHEN 'CANC'. CLEAR OK_CODE2. SET SCREEN 0. LEAVE SCREEN.
WHEN 'BACK'. CLEAR OK_CODE2. SET SCREEN 100. LEAVE SCREEN.
ENDCASE.
ENDMODULE. " EXIT_COMMAND_200 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
* process before output for screen 200 *
*----------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.
SET PF-STATUS 'POPUP'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0200 OUTPUT
*-----------------------------------------------------------------------
* DESCRIPTION
* written by !
*-----------------------------------------------------------------------
* TABLES:
DATA: OK_CODE(4), " ok code - screen 1
OK_CODE2(4).
DATA C LIKE SY-INDEX. " Index for screen loop
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* process after input for screen 0100 *
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE OK_CODE.
WHEN 'SAVE'.
*
WHEN 'DISP'.
*
WHEN 'LIST'.
C = 0. "reset loop control
*
WHEN OTHERS.
*
ENDCASE.
CLEAR OK_CODE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* process before output for screen 0100 *
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'AMEND'. " set gui status
SET TITLEBAR '100'. " set title
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Form SAVE data
*&---------------------------------------------------------------------*
* Save screen details
*&---------------------------------------------------------------------*
FORM SAVE.
*
CLEAR OK_CODE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM DISPLAY.
*
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Module EXIT_COMMAND INPUT
*&---------------------------------------------------------------------*
* exit commands are processed before validation *
* defined by E against function in menu painter(function list)
*----------------------------------------------------------------------*
MODULE EXIT_COMMAND INPUT.
CASE OK_CODE.
WHEN 'EXIT'. CLEAR OK_CODE. SET SCREEN 0. LEAVE SCREEN.
WHEN 'CANC'. CLEAR OK_CODE. SET SCREEN 0. LEAVE SCREEN.
WHEN 'BACK'. CLEAR OK_CODE. SET SCREEN 0. LEAVE SCREEN.
ENDCASE.
ENDMODULE. " EXIT_COMMAND INPUT
*&---------------------------------------------------------------------*
*& Form list
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
FORM LIST.
CLEAR OK_CODE. SET SCREEN 200. LEAVE SCREEN.
ENDFORM. " LIST
*&---------------------------------------------------------------------*
*& Module EXIT_COMMAND_200 INPUT
*&---------------------------------------------------------------------*
* exit command processing for screen 200 *
* defined by E against function in menu painter(function list)
*----------------------------------------------------------------------*
MODULE EXIT_COMMAND_200 INPUT.
CASE OK_CODE2.
WHEN 'EXIT'. CLEAR OK_CODE2. SET SCREEN 0. LEAVE SCREEN.
WHEN 'CANC'. CLEAR OK_CODE2. SET SCREEN 0. LEAVE SCREEN.
WHEN 'BACK'. CLEAR OK_CODE2. SET SCREEN 100. LEAVE SCREEN.
ENDCASE.
ENDMODULE. " EXIT_COMMAND_200 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
* process before output for screen 200 *
*----------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.
SET PF-STATUS 'POPUP'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0200 OUTPUT
http://saplab.blogspot.com/2007/10/sample-abap-program-for-module-pool_18.html
http://sap.mis.cmich.edu/sap-abap/abap09/sld011.htm
http://www.megaupload.com/?d=99BRHZCR
Pass : www.abap.es
No hay comentarios:
Publicar un comentario