25
Caso Práctico ABAP Web DynPro TAREAS A REALIZAR Implementar una aplicación WebDynPro ABAP que va a implementar un informe sobre las tablas: MARA, MAKT, T134T, T023T. El informe mostrará los datos por pantalla utilizando un ALV. El informe tendrá dos vistas que deberán mostrarse simultáneamente en la misma ventana: La primera vista se mostrará en la parte de arriba de la ventana. Será una vista que implementa una pantalla de selección que pedirá al usuario un rango (desde hasta) para el código de material, otro para el tipo de material y otro para el grupo de materiales. Asignar para los campos de los rangos una ayuda de búsqueda, a ser posible la misma que utilice SAP por defecto en las Dynpros ABAP destinadas al SAPGUI. Esta vista tendrá un botón que al pulsarlo llamará a la segunda vista. La segunda vista se mostrará bajo la primera sólo si el usuario ha pulsado alguna vez el botón correspondiente. Esta vista será el listado propiamente dicho. DETALLES TÉCNICOS Los campos a mostrar en el ALV son: • MARA‐MATNR • MAKT‐MAKTX • T134T‐MTBEZ • T023T‐WGBEZ Los campos para la pantalla de selección son: • MARA‐MATNR • MARA‐MTART • MARA‐MATKL Las relaciones entre las distintas tablas son: • MARA‐MATNR = MAKT‐MATNR • MARA‐MTART = T134T‐MTART • MARA‐MATKL = T023T‐MATKL Los datos a recuperar de las tablas de textos (T134T y T023T) tienen que estar filtrados por el idioma en el que el usuario haya entrado en el sistema (SY‐ LANGU). Realizar los accesos a las tablas de la base de datos de la manera más eficiente posible.

Caso Practico ABAP Web DynPro.docx

Embed Size (px)

Citation preview

Page 1: Caso Practico ABAP Web DynPro.docx

Caso Práctico ABAP Web DynPro

TAREAS A REALIZARImplementar una aplicación WebDynPro ABAP que va a implementar un informe sobre las tablas: MARA, MAKT, T134T, T023T. El informe mostrará los datos por pantalla utilizando un ALV.

El informe tendrá dos vistas que deberán mostrarse simultáneamente en la misma ventana: La primera vista se mostrará en la parte de arriba de la ventana. Será una vista que implementa una pantalla de selección que pedirá al usuario un rango (desde hasta) para el código de material, otro para el tipo de material y otro para el grupo de materiales. Asignar para los campos de los rangos una ayuda de búsqueda, a ser posible la misma que utilice SAP por defecto en las Dynpros ABAP destinadas al SAPGUI. Esta vista tendrá un botón que al pulsarlo llamará a la segunda vista. La segunda vista se mostrará bajo la primera sólo si el usuario ha pulsado alguna vez el botón correspondiente. Esta vista será el listado propiamente dicho.

DETALLES TÉCNICOSLos campos a mostrar en el ALV son:• MARA MATNR‐• MAKT MAKTX‐• T134T MTBEZ‐• T023T WGBEZ‐Los campos para la pantalla de selección son:• MARA MATNR‐• MARA MTART‐• MARA MATKL‐Las relaciones entre las distintas tablas son:• MARA MATNR = MAKT MATNR‐ ‐• MARA MTART = T134T MTART‐ ‐• MARA MATKL = T023T MATKL‐ ‐Los datos a recuperar de las tablas de textos (T134T y T023T) tienen que estar filtrados por elidioma en el que el usuario haya entrado en el sistema (SY LANGU).‐Realizar los accesos a las tablas de la base de datos de la manera más eficiente posible.

Page 2: Caso Practico ABAP Web DynPro.docx

Paso 1 – Crear la estructura básica de la WebDynpro

-Vamos a la transacción se80 seleccionamos Web Dynpro Comp. / Intf. y le damos un nombre, en este caso ZWD_CASO1_06. Si el objeto no existe nos dará la posibilidad de crearlo.

Una vez creado la WebDynpro nos pedirá que indiquemos una descripción, el nombre de la Ventana y el nombre de la primera vista, en este caso Ventana ZWD_CASO1_06 y Vista PRINCIPAL:

Page 3: Caso Practico ABAP Web DynPro.docx

Lo siguiente que no pide será que le asignemos un paquete, ZCASOSPRACTICOS:

Por último, antes de crear la WD nos pide que una orden de transporte IM1K900465:

Ya tenemos creada nuestra Web Dynpro para empezar a trabajar:

Page 4: Caso Practico ABAP Web DynPro.docx

El siguiente paso será crear una nueva vista donde se mostrarán los resultados de nuestra selección. Para ello pulsamos en el botón derecho sobre Views -> Create:

COMPONENT CONTROLLER

Ahora vamos a crear los dos contextos de las dos vistas. Vamos al COMPONENTCONTROLLER pestaña CONTEXT y con el botón derecho en CONTEXT -> CREATE -> NODE creamos dos nodos DATOS_PRINCIPAL y DATOS_RESULTADO.

Page 5: Caso Practico ABAP Web DynPro.docx

En el nodo DATOS_PRINCIPAL añadimos los atributos que nos van a servir como rango de selección pulsando con el botón derecho DATOS_PRINCIPAL -> Create Using the Wizard -> Attibutes from Components of Structure:

Seleccionamos la tabla MARA y los campos que nos interesan de esta (MATNR, MTART Y MARKL):

Page 6: Caso Practico ABAP Web DynPro.docx

Realizamos esta selección dos veces, la primera renombramos los atributos como M*_LO y la segunda los renombramos como M*_HI para distinguir los campos que nos permitirán definir el rango de búsqueda:

Page 7: Caso Practico ABAP Web DynPro.docx

En el contexto DATOS_RESULTADO vamos a crear una “tabla interna” llamada “Listado” donde mostraremos el resultado del Rango de la primera pantalla. Pulsamos con el botón derecho sobre DATOS_RESULTADO -> CREATE -> NODE:

En el Nodo LISTADO vamos añadiendo los campos MARA-MATNR, MAKT-MAKTX, T134T-MTBEZ Y T023T-WGBEZ utilizando la opción Create Using the Wizard -> Attibutes from

Page 8: Caso Practico ABAP Web DynPro.docx

componenets of Structure y seleccionando los componentes de las estructuras MARA, MAKT, T134T y T023T que nos interesen quedando de la siguiente manera:

VIEWS

En este paso vamos a preparar las vistas para que se pueda navegar entre ellas, los contextos estén mapeados y se vean correctamente.

Page 9: Caso Practico ABAP Web DynPro.docx

Para mapear los contextos creados en el COMPONENT CONTROLLER vamos a la vista PRINCIPAL pestaña CONTEXT y arrastramos el nodo DATOS_PRINCIPAL desde el Context COMPONENTCONTROLLER al Context PRINCIPAL quedando de la siguiente manera:

Repetimos el mismo paso pero con el contexto de la vista RESULTADO y con el nodo DATOS_RESULTADO.

En la vista PRINCIPAL vamos a la pestaña Outbound Plugs y definimos un conector de salida que se llame A_RESULTADO:

En la vista RESULTADO vamos a la pestaña Inbound Plugs y definimos un conector de entrada llamado DESDE_PRINCIPAL:

Page 10: Caso Practico ABAP Web DynPro.docx

Ahora vamos a añadir los campos necesarios a nuestra pantalla de selección. Vamos a la Views -> Principal -> Layout.

Con el botón derecho sobre ROOTUIELEMENTCONTAINER insertamos los siguientes elementos: Caption, TransparentContainer (SO), Button y ViewContainerUIElement.

Seleccionamos el elemento Caption y buscamos la propiedad ‘text’ y escribimos $OTR:<paquete>ZCASOSPRACTICOS/<nombre>TITULO1_06. Esto nos creará un archivo de texto en el diccionario reutilizable.

Seleccionamos el elemento BUTTON y buscamos la propiedad Events -> onAction y pulsamos sobre la hoja en blanco para crear una nueva acción:

Page 11: Caso Practico ABAP Web DynPro.docx

Asignamos un nombre a la acción y seleccionamos el conector de salida A_RESULTADO que nos lleva a la siguiente pantalla. En la pestaña Actions se pueden ver las acciones definidas, borrarlas y editar el código de la acción.

Ahora seleccionamos el elemento TRANSPARENTCONTAINER(SO) y, utilizando el wizard, seleccionamos Form -> Context -> Datos_Inicio.

De esta forma añadimos los campos de selección del contexto a la pantalla.

Vamos a la vista RESULTADO pestaña Layout y añadimos, con el botón derecho sobre sobre ROOTUIELEMENTCONTAINER, un Caption y un ViewContainerUIElement.

Seleccionamos el elemento Caption y buscamos la propiedad ‘text’ y escribimos $OTR:<paquete>ZCASOSPRACTICOS/<nombre>TITULO2_06. Esto nos creará un archivo de texto en el diccionario reutilizable.

Page 12: Caso Practico ABAP Web DynPro.docx

Vamos al COMPONENTCONTROLLER pestaña Methods. Aquí creamos un nuevo método que se llame GENERAR_LISTADO.

Page 13: Caso Practico ABAP Web DynPro.docx

Editamos este método y lo subdividimos en 3 partes:

****Leer datos de usuario****

****Hacer Select a la BBDD****

****Escribir datos en una tabla****

En la sección ****Leer datos de usuario****, usando el Wizard, seleccionamos Context ->Read->Datos_Inicio

En la sección ****Escribir datos en una tabla****, usando el Wizard, seleccionamos Set –>As Table Operation->Context->Datos_Destino->Lista.

Page 14: Caso Practico ABAP Web DynPro.docx

En la sección ****Hacer Select a la BBDD****, escribimos la sentencia select con la que recuperaremos datos de la BBDD:

****Hacer Select a la BBDD****

    DATA: lt_mara TYPE TABLE OF mara,        ls_mara TYPE mara,        lt_makt TYPE TABLE OF makt,        ls_makt TYPE makt,        lt_t134t TYPE TABLE OF t134t,        ls_t134t TYPE t134t,        lt_t023t TYPE TABLE OF t023t,        ls_t023t TYPE t023t,        ls_result TYPE zmara_06. "Se utiliza la tabla creada en el diccionario para ZCASO1_06.  DATA texto TYPE c LENGTH 100.

*  IF sy-subrc <> 0.

Page 15: Caso Practico ABAP Web DynPro.docx

*    texto = 'No hay datos que mostrar'.*    MESSAGE i555(bc401) WITH texto.*  ENDIF.

  SELECT matnr mtart matkl ernam FROM mara         INTO CORRESPONDING FIELDS OF TABLE lt_mara         WHERE matnr   BETWEEN ls_datos_principal-matnr_lo AND ls_datos_principal-matnr_hi         AND   mtart   BETWEEN ls_datos_principal-mtart_lo AND ls_datos_principal-mtart_hi         AND   matkl   BETWEEN ls_datos_principal-matkl_lo AND ls_datos_principal-matkl_hi.

  SELECT * FROM  makt INTO CORRESPONDING FIELDS OF TABLE lt_makt         FOR ALL ENTRIES IN lt_mara         WHERE  matnr  = lt_mara-matnr AND spras = sy-langu.

  SELECT * FROM  t134t INTO CORRESPONDING FIELDS OF TABLE lt_t134t         FOR ALL ENTRIES IN lt_mara         WHERE  mtart  = lt_mara-mtart AND spras = sy-langu.

  SELECT * FROM  t023t INTO CORRESPONDING FIELDS OF TABLE lt_t023t         FOR ALL ENTRIES IN lt_mara         WHERE  matkl  = lt_mara-matkl AND spras = sy-langu.

   LOOP AT lt_mara INTO ls_mara.

    READ TABLE lt_makt INTO ls_makt WITH KEY matnr = ls_mara-matnr.

    READ TABLE lt_t134t INTO ls_t134t WITH KEY mtart = ls_mara-mtart.

    READ TABLE lt_t023t INTO ls_t023t WITH KEY matkl = ls_mara-matkl.

    MOVE-CORRESPONDING ls_mara TO ls_result.    MOVE-CORRESPONDING ls_makt TO ls_result.    MOVE-CORRESPONDING ls_t134t TO ls_result.    MOVE-CORRESPONDING ls_t023t TO ls_result.

    APPEND ls_result TO lt_listado.

  ENDLOOP.

Llamamos al método que acabamos de crear desde la vista Resultado en el método HANDLEDESDE_PRINCIPAL.

Vamos a Vistas->RESULTADO->Methods-> HANDLEDESDE_PRINCIPAL

Page 16: Caso Practico ABAP Web DynPro.docx

Editamos el método y con el wizard seleccionamos General->Method Call in Used Controller->Component Name: ZWD_CASO1_06 -> Method Name: GENERAR_LISTADO

Page 17: Caso Practico ABAP Web DynPro.docx

Vamos a Ventanas -> Principal->View_Container_UIelement botón derecho Embed View

Page 18: Caso Practico ABAP Web DynPro.docx

Añadimos 2 Vistas al View Container de la pantalla Inicio, una EMPTYVIEW (La marcamos como Default) y la Vista RESULTADO.

Page 19: Caso Practico ABAP Web DynPro.docx

Para definir el vínculo de navegación, arrastramos el Outbound Plug A_DESTINO sobre el Inbound Plug DESDE_INICIO.

ALV. Aquí vamos a declarar el ALV en los lugares donde va a ser usado.

Pinchamos sobre la raíz del árbol de objetos (ZWD_CASO1_06) y escribimos en Component Use: Listado_ALV y Componetn: SALV_WD_TABLE.

Page 20: Caso Practico ABAP Web DynPro.docx

Vamos a Ventana -> Petaña Properties ->Botón Hoja en blanco (Create Controller Usage) añadimos las dos opciones Listado_ALV.

Vamos a Ventana ->Resultado->View Container->Embed View->Component Use->Listado_ALV: Table

Page 21: Caso Practico ABAP Web DynPro.docx

Vamos al COMPONENTCONTROLLER pestaña Properties y con el botón “Hoja en blanco” añadimos los dos Listado_ALV que aparecen:

Vamos a la petaña Methods del COMPONENTCONTROLLER y editamos el método GENERAR_LISTADO.

Al final del método utilizando el Wizard->General->Instatntiate Used Component->LISTADO_ALV

Page 22: Caso Practico ABAP Web DynPro.docx

Usamos Wizard->Method Call in Used Controller->Component Name: SALV_WD_TABLE -> Method Name: SET_DATA

Page 23: Caso Practico ABAP Web DynPro.docx

En las lineas de código insertadas por el Wizard, debemos buscar la variable r_node_data y asignarle el valor lo_nd_lista

r_node_data =  lo_nd_lista