jump to navigation

Interacción entre ALV OO y Dynpro Julio 25, 2008

Posted by gstortoni in Dynpro.
Tags: , , , ,
add a comment

Ayer, medio aburrido en el trabajo, decidí retomar un poco la programación orientada a objetos, ya que en mis últimos proyectos, no me fue necesaria.
Por lo que decidí hacer una especie de Agenda, en la que al agregar a un personaje, inmediatamente se vería reflejado en mi ALV OO,

Hasta ahi todo bien, ingresaba los datos, y luego apretaba el boton para guardar, y gracias al queridicimo PAI, agregaba a mi tabla interna la persona creada…

Luego se me ocurrió que el usuario hiciera doble click sobre cualquier persona ingresada (ALV) y que en unos campos de la dynpro destinados para modificación aparecieran sus datos, y aqui empezó mi pelea :D , manejando el evento de Doble Clic, recogí los datos, y debuggeando verifiqué que las variables de los campos, se estaban seteando correctamente, Pero (maldito pero) no se estaban colocando en los campos de la dynpro…

Coloqué un brakpoint tanto en el PAI como en el PBO, y para mi sorpresa, cuando hacía el doble click, ninguno de estos 2 se ejecutaba…. entonces, me dije a mi mismo: “Mismo, estamos en problemas”… empecé a buscar, y postié en la SDN, luego de unos pocos minutos, obtuve

mi respuesta… es tan simple como hacer lo siguiente:

Cuando declaramos el objeto para crear la “grilla” hay que pasarle el siguiente parámetro: ” i_appl_events = ‘X’ “, ejemplo:

CREATE OBJECT grid
EXPORTING
i_parent      = g_custom_container
i_appl_events = ‘X’.

Con esto, el ALV, sabe que al momento que se regitre un evento tendra que pasar nuevamente por el PBO.

por lo que mi problema quedo totalmente solucionado

:D

un pantallazo de la aplicación…

Mini Agenda OO

Saludos….

Crear Match Code en tiempo de ejecucion para una Dynpro Julio 17, 2008

Posted by gstortoni in Match Code.
Tags: , , , , ,
1 comment so far

Esta es una forma bastante util e interesante para crear ayudas de busquedas en tiempo de ejecucion, en mi caso lo he usado en una Dynpro, ustedes veran que uso le dan.

En una Dynpro:
Primero que todo, hay que agregar dentro de la logica de proceso, luego del PAI, lo siguiente:

process on value-request.
field campo_que_necesitamos module module_match.

Una vez que tengamos escrito esto en la logica de proceso de la Dynpro, tenemos que crear el Module, hacemos doble click y ustedes deciden donde crearlo, por mi parte lo cree en el programa control.

Primero necesitamos los ingredientes:

databegin of list_of_fields occurs 10,
fieldname like dd03l-fieldname,
end of list_of_fields.

dataindice like sy-tabix,
fieldname like dd03l-fieldname,
fields like help_value occurs 10 with header line,
shrinkfields like dynpread occurs 0 with header line,
dynpfields like dynpread occurs 0 with header line.

databegin of ti_almacen occurs 0,
lgort like t001l-lgort,
lgobe like t001l-lgobe,
end of ti_almacen_dest.

En mi caso quiero mostrar los almacenes y su descripcion para un Centro dado.
Para ello, manualmente recojo los campos de la tabla y los almaceno en una TI.

select lgort lgobe
into
corresponding fields of table ti_almacen
from t001l
where werks eq
‘2000′
.


Luego Hay que definir la estructura de la ayuda de busqueda.

list_of_fields-fieldname = ‘T001L-LGORT’.
append list_of_fields.

list_of_fields-fieldname = ‘T001L-LGOBE’.
append list_of_fields.

Defino el campo que quiero que quede en la pantalla cuando haya hecho doble clic sobre mi Match Code

fieldname = ‘LGORT’.

call function ‘TRANSFER_NAMES_TO_FIELDS’
exporting
selectfield        = fieldname
tables
fieldsfields
namelist           = list_of_fields

exceptions
wrong_format_given = 01.

Esta es la funcion que hace toda la maravilla

call function ‘HELP_VALUES_GET_NO_DD_NAME’
exporting
selectfield  = fieldname
titel  = ‘Almacen de destino’
use_user_selections = ‘S’

importing
ind = indice

tables
fieldsfields
full_table  = ti_almacen
user_sel_fields = shrinkfields

exceptions
full_table_empty  = 01
no_tablestructure_given = 02
no_tablefields_in_dictionary = 03
more_than_one_selectfield = 04
no_electfield = 05.


Ahora solo queda recorrer la tabla e indicar cual fue el indice que el usuario ha seleccionado.
read table ti_almacen index indice.

Con esto, paso el valor de la seleccion en este caso el LGORT a mi campo en pantalla
move ti_almacen-lgort to fld_almacen.

Y eso es todo, queda solo activar y disfrutar de una ayuda de busqueda sencilla. pero Muy efectiva