Sunteți pe pagina 1din 11

Web dynpro ABAP: Manejo del contexto

Cualquier controlador tiene por lo menos dos atributos estndar generados automticamente: WD_THIS: Es una referencia a la interface del propio controlador. Debe utilizarse en lugar de ME. Tambin te da acceso a funcionalidad estndar como validacin. WD_CONTEXT: Es una referencia al nodo raz del contexto del controlador. Cualquier acceso a los datos del contexto empezar con esta referencia.

Si el Component Controller es declarado como Controlador utilizado en la pestaa de Propiedades se crea un atributo adicional: WD_COMP_CONTROLLER: Es una referencia al Component Controller del webdynpro. Utilizando esta referencia podemos acceder a los mtodos y atributos pblicos del mismo.

Cualquier otro controlador declarado en la pestaa de Propiedades no tendr una referencia creada automticamente. Si queremos acceder a la parte pblica de este controlador utilizaremos la siguiente sentencia: DATA: lo_ctrl TYPE REF TO ig_<ctrl>. lo_ctrl = wd_this->get_<ctrl>_ctr( ). Adems el programador puede declarar atributos y mtodos adicionales, a los que accederemos mediante WD_THIS. El flag de Public permite que el atributo sea visible para otros controladores.

Acceso a los nodos y elementos de contexto


Acceder a un atributo o a un elemento de contexto requiere que tengas una referencia al nodo correspondiente. Podemos obtener una referencia de cualquier nodo de contexto mediante la siguiente sentencia: DATA: lo_nd_<contexto> TYPE REF TO if_wd_context_node. lo_nd_<contexto> = wd_context->get_child_node( name <NODO_CONTEXTO> ). =

El nombre del nodo tiene que estar en maysculas. Por cada nodo se genera una constante llamada wdctx_<nombre_nodo> que contiene el nombre del nodo es aconsejable utilizar esta constante en lugar de poner el nombre del nodo directamente: lo_nd_<contexto> = wd_this->wdctx_<nombre_nodo> o lo_nd_<contexto> = if_<nodo_contexto>=>wdctx_<nombre_nodo>. Get_child_node() devuelve una referencia de tipo IF_WD_CONTEXT_NODE, para su utilizacin requiere el nombre del nodo y opcionalmente el ndice del elemento del nodo padre al que pertenece el elemento deseado. Despus de obtener la referencia al nodo podemos acceder al elemento al que apunta el Lead Selection llamando al mtodo get_element(). Este mtodo devuelve una referencia de tipo IF_WD_CONTEXT_ELEMENT. El elemento n del nodo puede ser accedido si en la llamada del mtodo ponemos index = n. El nmero de elementos en una coleccin puede obtenerse mediante get_element_count( ). DATA lo_nd_<nodo> TYPE REF TO if_wd_context_node. DATA lo_el_<nodo> TYPE REF TO if_wd_context_element. lo_nd_<nodo> = wd_context->get_child_node( name = wd_this>wdctx_<nodo_contexto> ). *Obtenemos el elemento al que apunta el LEAD SELECTION Lo_el_<nodo> = lo_nd_<nodo>->get_element( ). *Si LEAD SELECTION no est asignado devuelve INITIAL IF( lo_el_<nodo> is INITIAL). ENDIF. Sumario: Acceso a nodos de contexto y a elementos de contexto Accin Referencia al nodo <nodo> del controlador <ctrl> Referencia al elemento en el Lead Selection Referencia al elemento con ndice n Obtener el nmero de elementos en la coleccin Mtodo lo_nd_<nodo> = wd_context->get_child_node( name = wd_this> wdctx_<nodo> ). lo_el_<nodo> = lo_nd_<nodo>->get_element( ). lo_el_<nodo> = lo_nd_<nodo>->get_element( index = n ). n = lo_nd_<nodo>->get_element_cout( ).

Leer y modificar atributos


Acceder a atributos de un elemento de contexto:
Una vez que has obtenido la referencia al elemento de contexto hay dos formas de acceder al valor de uno de sus atributos: 1. Acceso mediante el mtodo get_attribute( ). En el EXPORT va el nombre del atributo y en el IMPORT el valor que contiene.

2. Si el atributo es esttico se puede acceder mediante get_static_attributes( ). Con este mtodo obtenemos una estructura en el parmetro IMPORT.

En este mbito es importante conocer que: Para cada <nodo> del contexto de un controlador se genera implcitamente una estructura element_<nodo> en la interfaz IF_<ctrl> que corresponde a los atributos que tiene el nodo. Este tipo puede usarse para generar una variable que contenga el resultado de los mtodos anteriores. Adems, por cada <nodo> existe un tipo de tabla estndar llamado elements_<nodo> generada en la interfaz IF_<nodo>. Cada lnea de ese tipo es un element_<nodo>. Este tipo puede usarse para generar tablas que contengan datos de ms de un elemento de contexto.

Acceder a los atributos de todos los elementos de un nodo


Utilizaremos el mtodo get_static_attributes_table( ) y obtenemos todos los atributos de los elementos en una tabla interna.

Modificar valores de atributo de un Elemento


Una vez que obtenemos la referencia a una elemento de un nodo de contexto no solo es posible leer sus atributos con los mtodos get apropiados si no que tambin podemos modificarlos utilizando los mtodos set apropiados. El mtodo set_attribute( ) puede utilizarse para modificar cualquier atributo y el mtodo set_static_attributes( ) para cambiar varios atributos simultneamente si estn definidos estticamente. Ejemplo de cambio de un nico atributo:

Ejemplo de cambio de mltiples atributos:

Sumario de lectura y modificacin de atributos en el nodo <nodo> del controlador <ctrl> Accin Mtodo Lectura del valor del atributo DATA: lv_attr TYPE wd_this->element_<nodo>-<attr>. <attr> lo_el_<nodo>->get_attribute( EXPORTING name = <attr> IMPORTING value = lv_<attr> ). Leer el valor de mltiples DATA : ls_<nodo> TYPE wd_this->element_<nodo>. atributos definidos estticamente lo_el_<nodo>->get_static_attributes( IMPORTING static_attributes = ls_<nodo> ). Leer el valor de todos los DATA : lt_<nodo> TYPE wd_this->elements_<nodo>. atributos estticos de todos los elementos del nodo lo_nd_<nodo>->get_static_attributes_table( IMPORTING table = lt_<nodo> ). Cambiar el valor de un DATA : lv_<attr> TYPE wd_this->element_<nodo>-<attr>. atributo <attr> lv_<attr> = .. lo_el_<nodo>->set_attribute( EXPORTING Name = <attr> Value = lv_<attr> ). Cambio de mltiples DATA: ls_<nodo> TYPE wd_this->element_<nodo>. atributos de un elemento ls_<nodo>-<attr1> = . lo_el_<nodo>->set_static_attributes( EXPORTING static_attributes = ls_<nodo> ).

Aadir nuevos elementos a un nodo de contexto


Para aadir un nuevo elemento hay que hacer dos pasos. El primer paso es crear un elemento que pueda ser aadido al nodo que nos interesa ms tarde. Despus de haber definido todos los valores de los atributos del elemento procederemos a insertarlo en el nodo.

Crear un nuevo elemento


Para crear un nuevo elemento primero tenemos que determinar una referencia al nodo de contexto apropiado utilizando WD_CONTEXT->get_child_node( name = wd_this>wdctx_<nodo> ). Una vez que tenemos la referencia al nodo utilizamos el mtodo create_element( ) para generar un nuevo elemento vaco. Con el parmetro static_attribute_values podemos asignar una serie de valores a los atributos del elemento a crear. Con el mtodo set_attribute( ) o set_static_attributes( ) podemos ir dndole valores a los atributos.

Aadir un elemento al nodo de contexto


Un elemento que no es parte del nodo puede aadirse utilizando el mtodo bind_element( ). Este mtodo tiene dos parmetros importantes: New_item lleva una referencia al elemento a aadir. Set_initial_elements puede ser abap_false para que el elemento se aada a la coleccin del nodo o abap_true para que elimine todos elementos del nodo y aada el nuevo.

Vincular una estructura a un nodo de contexto


En los programas ABAP los conjuntos de datos se suministran en estructuras, pero para poder visualizar una estructura en la Interfaz Grfica (UI) el contenido de la estructura tiene que estar copiado en un elemento de contexto. Esto implica crear un nuevo elemento, asignarle valores y vincularlo al nodo de contexto adecuado. Una forma ms fcil de tratar esto es utilizar el mtodo bind_structure( ) en lugar de bind_element( ).

Vincular una tabla interna a un nodo de contexto


De la misma forma que ocurre con las estructuras tambin tenemos un mtodo que nos agiliza aadir elementos a un nodo de contexto a partir de una tabla interna, el mtodo bind_table( ).

Borrar elementos de un nodo de contexto


Para eliminar un elemento de un nodo de contexto utilizamos el mtodo remove_element( ). A este mtodo le suministramos la referencia al elemento utilizando el parmetro element. Sumario: Aadir y eliminar elementos de un nodo de contexto Accin Crear un elemento nuevo Aadir un elemento a una coleccin Mtodo lo_el_<nodo> = lo_nd_<nodo>->create_element( ). lo_nd_<nodo>->bind_element( new_item = lo_el_<nodo> set_initial_elements = abap_false ). Aadir la estructura ls_<nodo> a una DATA: ls_<nodo> TYPE wd_this->element_<nodo>. coleccin . lo_nd_<nodo>->bind_structure( new_item = ls_<nodo> set_initial_elements = abap_false ). Aadir la tabla interna lt_<nodo> a la DATA: lt_<nodo> TYPE wd_this->elements_<nodo>. coleccin . lo_nd_<nodo>->bind_table( new_items = lt_<nodo> set_initial_elements = abap_false ).

Eliminar un elemento de la coleccin

lo_nd_<nodo>->remove_element( element = lo_el_<nodo> ).

S-ar putea să vă placă și