Interacción entre ALV OO y Dynpro Julio 25, 2008
Posted by gstortoni in Dynpro.Tags: ALV, ALV OO, Dynpro, i_appl_events, Orientacion a objetos
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
, 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
un pantallazo de la aplicación…
Saludos….
Leer Campo de una Dynpro cuando es inaccesible. Julio 17, 2008
Posted by gstortoni in Funciones.Tags: ABAP, campo, Funcion, leer campo dynpro, leer dynpro, SAP
2 comments
Sucede a veces, que uno necesita leer un campo de una Dynpro, pero ese campo es inaccesible por ejemplo, cuando se esta usando un USER EXIT y el campo lo vemos en la pantalla, pero el import del exit, o las tablas, no lo traen, bueno entonces que hacemos??? NO señor llorar no es la solución
existe una Fantástica función que nos permite resolver nuestro dilema, tal vez no sea la forma mas ortodoxa, pero en fin, nos saca del entuerto.
La Dichosa Función es como su nombre lo dice : UA_READ_FIELD_FROM_DYNPRO
manos a la obra.
Ingredientes:
DATA: program TYPE progname,
dynpro TYPE sydynnr,
field_value TYPE dynfieldvalue.
program = sy-cprog. “Aca ingreso el nombre del programa
dynpro = sy-dynnr. “y aca va el numero de la dynpro donde esta mi campo
En mi caso deseo leer el campo FLD_CENTRO al cual no puedo acceder en tiempo de ejecución
CALL FUNCTION ‘UA_READ_FIELD_FROM_DYNPRO’
EXPORTING
id_program = program
id_dynpro = dynpro
id_field_name = ‘FLD_CENTRO’
IMPORTING
ed_field_value = field_value
EXCEPTIONS
failed = 1
OTHERS = 2.
El valor del campo, es retornado en la variable field_value.
Ojo, la verdad no se si sea malo el uso o abuso de esta función, a mi me ha sacado de apuros, pero siempre trato de agotar las instancias para poder sacar de manera “Natural” el valor de los campos.
Saludo2
Crear Match Code en tiempo de ejecucion para una Dynpro Julio 17, 2008
Posted by gstortoni in Match Code.Tags: ABAP, Ayuda de Busqueda, Dynpro, Dynpros, Match Code, SAP
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:
data : begin of list_of_fields occurs 10,
fieldname like dd03l-fieldname,
end of list_of_fields.
data : indice 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.
data: begin 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
fields = fields
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
fields = fields
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
Imagenes Dinamicas en SmartForms Julio 14, 2008
Posted by gstortoni in SmartForms.Tags: dinamica, dinamicas, dinamico, dinamicos, imagen, imagenes, logo, SmartForms
add a comment
Bueno, este es un tema bastante sencillo, pero que a mas de uno le ha dado dolores de cabeza,
veamos
VL_IMAGEN TYPE STRING
luego creen una función gráfica donde deseen… pero en el nombre de la imagen coloquenle &VL_IMAGEN&, completen los otros campos como lo hacen con cualquier imagen…
por mi parte la forma de setear el nombre de la imagen fue agregando una simple linea de codigo…
en variable de salida coloqué VL_IMAGEN
y en el código le puse el nombre de la imagen que necesitaba….
es decir: vl_imagen = ‘ZLOGO’.
y eso es todo.
