PDA

Ver la Versión Completa : Ayuda Web Dynpro For Abap


daniel_daniel1
25/08/08, 12:38:28
QUE TAL MUY BUENOS DIAS!!!

ESTOY EMPESANDO A VER LO QUE ES WEB DYNPRO FOR ABAP... MAS O MENOS ENTIENDO PERO ESTOY HACIENDO UN EJERCICIO EN EL CUAL TENES QUE CREAR UNA TABLA DINAMICAMENTE PARA LA CUAL EN LA PANTALLA PRINCIPAL LO QUE TE VA A APARECER ES UN INPUT CON UN BOTON Y DEBAJO LA TABLA CREADA CON LA ESTRUCTURA Y LOS DATOS DE LA TABLA QUE EL USUARIO INGRESE POR PANTALLA EN ESE INPUFIELD.

YO LOGRO HACER TODO, ME SALE LA TABLA, PERO NO LA ESTRUCTURA Y MUCHO MENOS LOS DATOS EN LA TABLA QUE CREO.

EXPLICO MAS O MENOS LO QUE TENGO CREADO EN LAS PANTALLAS:

EN EL COMPONENTCONTROLER TENGO CREADO UN NODO LLAMADO TABLA DE CARDINALIDAD 1 A 1 Y DENTRO DE ESE NODO TENGO CREADO 2 ATRIBUTOS
UNO LLAMADO NOMBRE_TABLA DE TIPO STRING Y EL OTRO LLAMADO GV_INI DE TIPO BOOLEAN.

EN LA VISTA QUE CREE QUE SE LLAMA TABLA EN EL LAYOUT TENGO CREADO UN GROUP LLAMADO GROUP CUYO LAYOUT ES MATRIXLAYOUT Y DENTRO DEL GROUP TENGO CREADO UN LABEL, UN INPUTFIELD Y UN BUTTON.
EL BUTTON TIENE ASIGNADA UNA ACCION LLAMADA MOSTRAR.

EN EL CONTEXT DE MI VISTA MAPEO EL NODO CREADO EN EL COMPONENTCONTROLER.

EN WINDOWS TENGO CREADA UNA VENTANA LA QUE LE ASIGNO LA VISTA QUE CREE.

Y POR ULTIMO TENGO CREADO UN APLICATION PARA PODER TESTEAR.

BUENO, ACA ADJUNTO EL CODIGO TAL CUAL COMO LO TENGO HECHO:

EN EL COMPONENT CONTROLER CREE UN METODO LLAMADO DYNAMIC

Y ESTE ES EL CODIGO DE EL METODO DYNAMIC:
DATA: l_node_info TYPE REF TO if_wd_context_node_info,
lo_container TYPE REF TO cl_wd_uielement_container.
DATA lo_tabla TYPE REF TO cl_wd_table.
DATA l_data_source TYPE string.
DATA lo_nd_tabla TYPE REF TO if_wd_context_node.
DATA lo_el_tabla TYPE REF TO if_wd_context_element.
DATA ls_tabla TYPE wd_this->element_tabla.
DATA lv_nombre_tabla TYPE ddobjname.
DATA lv_nombre_tabla2 TYPE string.
DATA l_pd TYPE REF TO data.

FIELD-SYMBOLS <lt_llenar_tabla> TYPE ANY TABLE.

* navigate from <CONTEXT> to <TABLA> via lead selection
lo_nd_tabla = wd_context->get_child_node( name =
wd_this->wdctx_tabla ).

* get element via lead selection
lo_el_tabla = lo_nd_tabla->get_element( ).

* get single attribute
lo_el_tabla->get_attribute(
EXPORTING
name = `NOMBRE_TABLA`
IMPORTING
value = lv_nombre_tabla ).

TRANSLATE lv_nombre_tabla TO UPPER CASE.
MOVE lv_nombre_tabla TO lv_nombre_tabla2.
CONCATENATE 'TABLA.' lv_nombre_tabla INTO l_data_source.

l_node_info = wd_context->get_node_info( ).

l_node_info->add_new_child_node(
name = 'NODO_PRUEBA'
static_element_type = 'SFLIGHT'
is_static = abap_false ).

* navigate from <CONTEXT> to <TABLA> via lead selection
lo_nd_tabla = wd_context->get_child_node( name =
wd_this->wdctx_tabla ).

* get element via lead selection
lo_el_tabla = lo_nd_tabla->get_element( ).

* get single attribute
lo_el_tabla->set_attribute(
EXPORTING
name = `GV_INI`
value = abap_true ).

CREATE DATA l_pd TYPE STANDARD TABLE OF (lv_nombre_tabla).
ASSIGN l_pd->* TO <lt_llenar_tabla>.

SELECT * FROM (lv_nombre_tabla) INTO CORRESPONDING FIELDS OF TABLE
<lt_llenar_tabla>.

IF sy-subrc NE 0.
EXIT.
ENDIF.

lo_nd_tabla = wd_context->get_child_node( name = 'NODO_PRUEBA' ).
lo_nd_tabla->bind_table( new_items = <lt_llenar_tabla> ).

EN LA VISTA CREE UNA ACCION LLAMADA MOSTRAR ASIGANADA A MI BUTTON.
ESTE EL EL CODIGO DE LA ACCION MOSTRAR:
DATA lo_componentcontroller TYPE REF TO ig_componentcontroller .
lo_componentcontroller = wd_this->get_componentcontroller_ctr( ).

lo_componentcontroller->dynamic(
).

EN LA VISTA EN EL METODO MODIFYVIEW TENGO EL SIGUIENTE CODIGO:
DATA: l_node_info TYPE REF TO if_wd_context_node_info,
lo_container TYPE REF TO cl_wd_uielement_container.
DATA lo_tabla TYPE REF TO cl_wd_table.
DATA l_data_source TYPE string.
DATA lo_nd_tabla TYPE REF TO if_wd_context_node.
DATA lo_el_tabla TYPE REF TO if_wd_context_element.
DATA ls_tabla TYPE wd_this->element_tabla.
DATA lv_nombre_tabla TYPE ddobjname.
DATA lv_nombre_tabla2 TYPE string.
DATA lv_gv_ini LIKE ls_tabla-gv_ini.
* navigate from <CONTEXT> to <TABLA> via lead selection
lo_nd_tabla = wd_context->get_child_node( name =
wd_this->wdctx_tabla ).

* get element via lead selection
lo_el_tabla = lo_nd_tabla->get_element( ).

* get single attribute
lo_el_tabla->get_attribute(
EXPORTING
name = `GV_INI`
IMPORTING
value = lv_gv_ini ).

* navigate from <CONTEXT> to <TABLA> via lead selection
lo_nd_tabla = wd_context->get_child_node( name =
wd_this->wdctx_tabla ).

* get element via lead selection
lo_el_tabla = lo_nd_tabla->get_element( ).

* get single attribute
lo_el_tabla->get_attribute(
EXPORTING
name = `NOMBRE_TABLA`
IMPORTING
value = lv_nombre_tabla ).

TRANSLATE lv_nombre_tabla TO UPPER CASE.
MOVE lv_nombre_tabla TO lv_nombre_tabla2.

lo_container ?= view->get_element( 'GROUP' ).

cl_wd_matrix_layout=>new_matrix_layout(
container = lo_container ).

lo_container->remove_child( id = 'TABLA_NUEVA' ).

lo_tabla = cl_wd_table=>new_table(
bind_data_source = 'TABLA.NODO_PRUEBA'
id = 'TABLA_NUEVA' ).

cl_wd_matrix_head_data=>new_matrix_head_data(
element = lo_tabla ).

lo_container->add_child( the_child = lo_tabla ).

DESDE YA AGRADEZCO TODO TIPO DE AYUDA!!!

MUCHAS GRACIAS.