– WAB BSP

Transacción se80 abre el workbech de diseño Transacción se11 abre el diccionario de
datos

Htmlb .- versión de html propia de sapon extensiones para facilitar la presentacion en
pantalla ( fundamentalmente aplica estilos predefinidos).

Tipos de paginas definibles en sap
1. página con lógica de proceso, tiene todos los eventos
2. vista .- se apoya en un modulo controlador que gestiona los eventos de
actualizacion de datos
3. fragmento de pagina.- son componentes que pueden importar a otra página.

Clase de aplicación
Una clase de aplicación es una clase de datos definida para una aplicación web que se
mantiene viva durante toda la sesión, de esta forma podemos definir atributos y métodos
generales para todas las páginas de la aplicación . Transacción se24

Arbol de navegación
Es una estructura que se crea indepediente de las páginas, indica la pagina origen y la
destino y una clave de lanzamiento. Esta asociado a la instrucción de proceso de eventos
que llama al metodo navigation->page_next( clave ).
Atributos de página
Son variables internas sap para la pagina podemos asociarlas a las variables de forulario
y de llamada mediante get.

M.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010

Definición de tipos
se definen tipos de usuario que en principio se orientan a una tabla fisica de forma que
generamos una estructura de datos local con la estructura de datos de una tabla.

definición:
eventos
Cada pagina tiene una serie de eventos en funcion del tipo de pagina que sea :
Si tiene control de flujo,. Tiene todos los eventos y accede a los objetos internos.
Eventos fundamentales:

• onInputProcessing .- este proceso se activa cuando en un formulario tenemos un
submit llamado asi (se tiene que llamar así) . Admite un parámetro llamado
event_id que permite controlar el flujo. El oninput funciona sobre la pagina que
recibe la llamada del formulario (ya sea la misma del formulario u otra distinta).

• onInitialization.- que se activa cuando se entra en la página.
objetos disponibles para los eventos.-

Navigation
• metodos.-
• navigation->goto_page(x)
• navigation->next_page(x)
• navigation->set_parameter(name,value)
• ABAP

EXTENSIONES BSP

Son extensiones de etiquetado que permite estandarizar y facilitar el diseño del
layout. Tenemos varios tipos , importantes bsp y htmlb.

M.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010

M.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010

las etiquetas facilitan la gestion con datos: presentacion automática de tablas,
tienen nomenclatura similar a html, con llaves de apertura y cierre.

Para estandarizar imagen se tiene una etiqueta content, que toma valores entre el
grupo ( design2002, design2003, classic) que son tres esteticas estandar.

Los componentes htmlb generan sus propios eventos que se pasan con un event_id
especifico al oninputprocessing. Que indica que se ha producido un evento htmlb,

El objeto evento htmlb se recupera a través de la clase CL_HTMLB_MANAGER,
mediante el valor del método estatico get_event. (definido con el símbolo clase =
>metodo.).

Pantallas ejemplo con htmlb , presentancion parametrizada de tablas

Los botones tienen la posibilidad e una etiqueta especial dentro del nombre:
<otr> </otr> que nos permite indicar un tramo de texto traducible a diferentes
idiomas , las traducciones las hacemos nostros mediante la opcion menú pasa a –
traducción – textos breves.

OTR permite uso de texto explicito o anotaciones a variables temporales con la
forma otr(paquete/clave).

Modelo VIEW CONTROLLER.-

Es un modelo que independiza el layout de la gestión de eventos, empaquetando la
programación en el controller.

Tres capas

Modelo ( atributos + metodos) , parecido a la clase de aplicación, controla los
datos y los métodos que los manipulan.
Se crea objetos con transacción se24

Vista .- codigo html para la presencia de la página en pantalla, no tiene asociado
una dirección url inicialmente.

Controlador .- es otra clase con sus propios atributos y metodos orientado a la
interrelación de las vistas y el modelo.

Bapi _ es una funcion encapsulada que devuelve datos más complejos que la
consulta de una simple tabla, normalmente son consultas de multiples tablas.

M.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010

datos de la clase del controlador M. Definición del controlador Clase control.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .

hereda de una clae generica: de la que hereda los procedimientos y muchos atributos uno de los atributos fundamentales es el modelo de negocio (en ejmplo obj_bapi) M.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .

los eventos fundamentales que programamos do_init. * crear el objeto modelo en memoria obj_bapi ? = me->create_model( class_name = ‘ZCLC03_MODEL’ model_id = ‘mimodel’). redifinicion de do_init. para redifinir los métodos se deben redefinir el método tenemos un boton de redifinicion.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . do_initiattributes da valores iniciales a los atributos. (obj_bapi es un atributo local que apunta al modelo). do_handle_events Los métodos fundamentals tienes que sobrecargarse. do_request. *CALL METHOD SUPER->DO_INIT * . endmethod.- method DO_INIT. Do_init inicializa la clase. M.

El evento do_handle_Event Gestiona los eventos de usuario method DO_HANDLE_EVENT. * verfica si ha habido un evento if htmlb_event is bound and htmlb_event->server_Event = 'clkconcat'.se dispara cada vez que hay una petición al controlador. * displaya la vista si no está vacia if view is bound. me->obj_bapi->concatenar( ). Para acceder desde el controlador a atributos de las vistas se usa una asignación de atributos.. endmethod. main_view->set_attribute( name = 'it_fields2' M. * dispach input . comillas simples. A tener en cuenta al escribir el codigo: los iguales separados de los textos por un espacio.htm’. * Pass attributes to view main_view->set_attribute( name = 'it_fields' value = me->fields ). me->dispatch_input(). *CALL METHOD SUPER->DO_REQUEST * .htm' . endif. me->view_name = ‘vista. * declarar un objeto vista para luego enlazarlo a nuestra pagina de salida data view type ref to if_bsp_page. * apertura de la vista y presentancion al usuario final me->cal_view ( view ). * crear la pagina de respuesta . method DO_REQUEST. *CALL METHOD SUPER->DO_HANDLE_EVENT * EXPORTING * EVENT = * HTMLB_EVENT = ** HTMLB_EVENT_EX = * GLOBAL_MESSAGES = * RECEIVING* GLOBAL_EVENT = * . view->set_attribute( name = 'at_modelo' value = me->obj_bapi ). creando la vista view = me->create_view( view_name = me->view_name ). * asocio el modelo de datos a la vista para que capte sus atributos. es case sensitive.. Do_Request . endmethod. *cambio la pagina de salida para este boton me->view_name = 'respuesta.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .gestiona la accion del usuario al interactuar con el controlador * en la creacion de la clase no se dispara * asigna el nombre de la pagina de salida a un atributo del controlador (view_name) * lo asigno antes para poder modificar la vista de salida en el dispatch. endif.

que esta formado por una tabla de la forma key- value.manejando el atributo request del controlador. .Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .el metodo do_handel_data . se obtiene la inofmración llamado a la funcion: CALL METHOD request->if_http_entity~get_form_fields CHANGING fields = fields. 2. Los parámetros de entrada de una query string de la url.. tenemos dos formas de obtenerlo: 1. value = me->fields2 ). M.. recibe un parámetro de los que conforman request que es el form_fields.

- Requiere definir el atributo con el modelo de datos del que va a tomar la información El codigo se simplifica mucho al hacer llamadas a los atributos del modelo. Layout de la vista: <%@page language = ‘abap’%> <htmlb:page title = ‘ ‘> <htmlb:form> <htmlb:label for = ‘//AT_MODELO/NOMBRE’ /> <htmlb:INPUTFIELD VALUE = ‘//AT_MODELO/NOMBRE’ /> <htmlb:label for = ‘//AT_MODELO/APELLIDO’ /> <htmlb:INPUTFIELD VALUE = ‘//AT_MODELO/APELLIDO’ /> <htmlb:button text = ‘CONCATENAR ‘ onClick = ‘clkconcat’ /> <htmlb:label for = ‘//AT_MODELO/todo’ /> </htmlb:form> </htmlb:page> </htmlb:content> Se ve que se displayan datos del modleo con label for. asimismo los eventos que capturara el controlador se generan con los botones. M.EL FICHERO DE VISTA.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . y se preguntan datos con inputfield..

****************************************** endmethod.( se accede al diseñador de clases mediante la transacción se24) GESTION MULTICONTROLADOR / MULTIVISTA Se gestionan creando objetos controlador desde otro controlador. mediante etiquetas de la extensión bsp <bsp: call comp_id = “subcon” />. (el subcontrolador ejecuta los metodos do INIT y request.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .do />. simplemente añadiendo el nombre del subcontrolador <bsp: call comp_id = “subcon” url = nomfisicocontrol. Un tercer método es llamarlo puramente desde la vista la llamada es parecida a la anterior . el controlador generado llamara a su vista. M. La clase modelo: Tiene atributos que se corresponden con parámetros de funciones y métodos que devuelven algún resultado al controlador.do' * APPLICATION_NAMESPACE = * KEY = controller_id = 'subc1' RECEIVING controller_instance = sub1_gen. El comp_ip debe estar declarado en el init del controlador principal. Las llamadas a subcontroladores e pueden realizar desde layout. method DO_INIT. CALL METHOD me->create_controller EXPORTING * APPLICATION_NAME = controller_name = 'sub1. normalmente los métodos expresamente desarrollado o bien serán funciones BAPI de sap que nos dará un trabajo elaborado. Llamada al subcontrolador CALL METHOD me->call_controller EXPORTING controller_instance = sub1_gen. *CALL METHOD SUPER->DO_INIT * .

Variable-vector-nombrecampo para referenciar el valor.) Comentarios al comienzo de linea con * Selecciones • IF: If codicion. Abap solo contempla consulta con inner sobre dos tablas. When valor. Endloop. Si se necesita mas tiene una transacción la se11 para construir vistas. Instrucc.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . Enddif. Instrucc. Instruís. Enddo. ABAP Todas las lineas acaban con punto (. Acceso de datos La select: Se define un tipo que se asocial a la estructura de una tabla. Instrucc. Endcase.. Else. Bucles • DO : Do n times. SELECT DISTINCT -> reg diferents Select single -> primer registro elegido Ejemplo de codigo select tienes que usar un inner join hay te va un ejemplo SELECT F~bnwhr F~dvalut F~ddispo M. • CASE Cae var..procesa todos los campos de una estructura ( un vector) Loop at tipo_definiendolaestructura into variable-vector. • LOOP AT .

( para apuntarlo a una tabla. Declara una tabla de registros Type tabla mitabla type tableo f mitipo types mitipo type table of tabla_referencia definicion de variable data mivar like mitipo la select que vuelca el contenido al tipo structura definido seria Select campo1 campo2 from tabla into corresponding fields of table tipo_dedato where claus_where. -------------- Y AQUÍ OTRO: SELECT a~carrid a~connid a~cityfrom a~cityto a~deptime a~arrtime b~fldate b~price INTO CORRESPONDING FIELDS OF TABLE lt_vuelos_con FROM spfli AS a INNER JOIN sflight AS b ON a~carrid = b~carrid AND a~connid = b~connid WHERE a~cityfrom = ls_seleccion-cityfrom AND a~cityto = ls_seleccion-cityto. Esta select pasaria los campos por orden al registro que le paso. sino campo(n) cade) …… end of mitipo. Definición de un tipo propio Declara un registro Types: begin of mitipo. Campo type tabla-campo.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . M. Select c1 c2 c3 from tabla into table mitipodatos where claus where. P~bukrs P~drueck P~rdarnehm P~BZUSAGE P~dblfz INTO TABLE mitabla FROM VDBEPI AS F INNER JOIN VDARL AS P ON P~ranl = S_RANL-LOW WHERE F~bukrs = P~bukrs AND F~SBEWART = '3215' AND F~ddispo > = P~drueck AND F~rpartnr = P~rdarnehm.

Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .S) DATA: nombrevariable TYPE REF TO clase_definida Casting de clases: Clase_tipo_nuevo ? = clase_Tipo_antiguo ( asigna el objeto clase_antiguo conviertiendolo a la clase nueva).N. Para cargar un registro en un wa (workarea) que es una estructura definida con el formato de la tabla usamos Read table nomtabla into wa index numero.D. M. Si usamos un objeto tableview de htmlb --: read table nomtabla into wa indes tableview->selectedrowindex Para recorre la tabla se usa un cursor que se define Data micursor like line of mivar Declaracion de datos: DATA: nombariable TYPE tipo_simple (F.

DEFINICION DE TIPOS types: begin of t_information. wa-valor = breadcrumb_event->name.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . wa-valor = breadcrumb_event->key. valor type string. * Special attribute of event handler (Key of selected element) wa-campo = 'Key of selected Item'. append wa to it_info. * Verificar si es un evento HTMLB IF event_id = cl_htmlb_manager = >event_id. * Tomar una referencia genérica que apunte al evento DATA: event TYPE REF TO cl_htmlb_event. append wa to it_info. una referencia específica DATA: breadcrumb_event TYPE REF TO cl_htmlb_event_breadcrumb. wa-valor = breadcrumb_event->id. ENDIF. wa-valor = breadcrumb_event->event_type. append wa to it_info. * Accedemos a la siguiente información * Clase que maneja el evento wa-campo = 'Event-Handler'. event = cl_htmlb_manager = >get_event( runtime->server->request ).- * event handler for checking and processing user input and * for defining navigation data: wa like line of it_info. * Valor de la propiedad Id wa-campo = 'ID'. M. wa-valor = breadcrumb_event->server_event. breadcrumb_event ? = event. * Valor del atributo OnClick wa-campo = 'Server-Event'. append wa to it_info. campo type string. * Store key of selected item for DB selection key = breadcrumb_event->key. append wa to it_info. * Para apuntar a los componentes específicos. * Averiguar qué evento en concreto se disparó IF event->name = 'breadCrumb' AND event->id = 'juanma'. * Tipo de evento wa-campo = 'Event-Type'. EJEMPLO DE USO DE HTMLB-2 Oninputprocessiong. append wa to it_info. ENDIF. * Nombre del componente que dispar a el evento wa-campo = 'Name'. wa-valor = breadcrumb_event->event_handler. SELECT * FROM spfli INTO TABLE it_spfli WHERE carrid = key.

Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .Attributes extracted by event handler --%> <htmlb:tableView id = ‘Campos’ table = ‘<% = it_info %>‘ /> </htmlb:form> </htmlb:documentBody> </htmlb:document> </htmlb:content> M. tt_information type table of t_information. corresponding data are read and displayed as table --%> <htmlb:tableView id = ‘Conexiones’ table = ‘<% = it_spfli%>‘ /> <hr><br> <htmlb:textView text = ‘La siguiente información se extrae del manejador de eventos:’/> <br><br> <%-. LAYOUT <%@page language = ‘abap’%> <%@extension name = ‘htmlb’ prefix = ‘htmlb’ %> <htmlb:content design = ‘DESIGN2003’ > <htmlb:document> <htmlb:documentHead title = ‘Ejemplo de HTMLB’ > </htmlb:documentHead> <htmlb:documentBody> <htmlb:form id = ‘main’ method = ‘POST’ > <%-. end of t_information.Event is handeled by Server.Screen Element BreadCrumb: Each BreadCrumb Item is defined staticaly -- %> <htmlb:breadCrumb id = ‘juanma’ size = ‘LARGE’ tooltip = ‘BreadCrumb items staticaly defined’ breakSignImage = ‘@05@’ onClick = ‘my_breadcrumbs’ > <htmlb:breadCrumbItem key = ‘AA’ value = ‘American Airlines’ /> <htmlb:breadCrumbItem key = ‘DA’ value = ‘Delta Airlines’ /> <htmlb:breadCrumbItem key = ‘LH’ value = ‘Lufthansa’ /> <htmlb:breadCrumbItem key = ‘UA’ value = ‘United Airlines’ /> <htmlb:breadCrumbItem key = ‘ ‘ value = ‘ ‘ /> </htmlb:breadCrumb> <hr><br> <%-.

ejemplo completo htmlb basado en clase de aplicación con ejemplos de botones y de tablas PAGINA HTMLB.layout <!-.%> <htmlb:breadCrumbItem key = ‘ ‘ value = ‘ ‘/> </htmlb:breadCrumb> </htmlb:form> </htmlb:page> </htmlb:content> 2. loop at application->it_scarr into linea.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . %> <htmlb:breadCrumbItem key = ‘<% = linea-carrid%>‘ value = ‘<% = linea-carrname%>‘ /> <% ENDLOOP.oninputprocessing * event handler for checking and processing user input and * for defining navigation * mira si es un evento htmlb IF event_id = cl_htmlb_manager = >event_id. * Tomar una referencia genérica que apunte al evento DATA: event TYPE REF TO cl_htmlb_event. breadcrumb_event ? = event.ejemplo de pagina con proceso htmlb.crear el breadcrump --> <htmlb:breadCrumb id = ‘mrval’ size = ‘LARGE’ tooltip = ‘BreadCrumb items staticaly defined’ breakSignImage = ‘@05@’ onClick = ‘my_breadcrumbs’ > <!-.usando la clase de aplicacion --> <%@page language = ‘abap’%> <%@extension name = ‘htmlb’ prefix = ‘htmlb’%> <htmlb:content design = ‘design2003’> <htmlb:page title = ‘ VUELOS POR COMPAÑIA AEREA ‘> <htmlb:form> <!-. una referencia específica DATA: breadcrumb_event TYPE REF TO cl_htmlb_event_breadcrumb.HTM 1.. M.bucle de relleno del breadcrump --> <% data linea like line of application->it_scarr. * Averiguar qué evento en concreto se disparó IF event->name = 'breadCrumb' AND event->id = 'mrval'. leyendo las compañias dese la tabla --> <!-. * Para apuntar a los componentes específicos. event = cl_htmlb_manager = >get_event( runtime->server->request )..

htm 1. * cargo la varible de la clase de aplicacion application->CARRID = k. endif. Pagina consultahtmlb. --> <%@page language = ‘abap’%> <%@extension name = ‘htmlb’ prefix = ‘htmlb’%> <!-.captura los datos de la primera --> <htmlb:content design = ‘design2003’> <htmlb:page title = ‘ ‘> <htmlb:documentBody> <htmlb:form id = ‘main’ method = ‘POST’ > <htmlb:tableView id = ‘Conexiones’ filter = ‘NONE’ table = ‘<% = application->it_spfli%>‘ selectionMode = ‘SINGLESELECT’ onRowSelection = ‘mi_seleccion’ > <htmlb:tableViewColumns> <htmlb:tableViewColumn columnName = ‘CARRID’ fixedColumn = ‘TRUE’ > </htmlb:tableViewColumn> <htmlb:tableViewColumn columnName = ‘CONNID’ > </htmlb:tableViewColumn> <htmlb:tableViewColumn columnName = ‘CITYFROM’ > </htmlb:tableViewColumn> <htmlb:tableViewColumn columnName = ‘CITYTO’ > </htmlb:tableViewColumn> </htmlb:tableViewColumns> </htmlb:tableView> </htmlb:form> </htmlb:documentBody> </htmlb:page> </htmlb:content> M. marcarlas y en funcion de la fila marcada lanzar una presentacion detallada de datos en funcion del atributo del tableview table->selectedrowindex. *ALL METHOD NAVIGATION->SET_PARAMETER * EXPORTING * NAME = 'comp' * VALUE = k . endif. CALL METHOD APPLICATION->BUSCAR_CON EXPORTING CAR = application->carrid . * lanzo la pagina dos pasandole como parametro k. layout <!-.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . navigation->goto_page('consultahtmlb.* cojo el key del campo k = breadcrumb_event->key.modifica para filtar las columnas.htm').

Boton para evento en el servidor: --%> M. page->write( event->id ). se pueden eliminar modificando la clase de aplicación).-<% = origen %><br> <b> DESTINO VUELO </B>. *DETERMINO SI EL EVENTO ES UNA SELECCION DE LINEA IF event->id = 'Conexiones' AND event->event_type = 'rowSelection' .oninputprocessiong * event handler for checking and processing user input and * for defining navigation * cuando la llama la primera pagina debe calcular la select * TRABAJO EVALUANDO EL EVENTO DE SELECCION * DETERMINAR SI EL EVENTO ES DE HTMLB IF event_id = cl_htmlb_manager = >event_id. %><% = linea-carrname%><bR> <% ENDLOOP.- <% data linea like line of znombresc. READ TABLE application->it_spfli into wa INDEX table->selectedrowindex. navigation->goto_page( 'vueloshtmlb.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .. DATA: event TYPE REF TO cl_htmlb_event.htm (tiene atributos propios para averiguar el nombre de la compañía y para recibir el texto de origen y destino. CALL METHOD NAVIGATION->SET_PARAMETER EXPORTING NAME = 'ORIGEN' VALUE = wa-cityfrom . DATA: table TYPE REF TO cl_htmlb_event_tableview. layout <%@page language = ‘abap’%> <%@extension name = ‘htmlb’ prefix = ‘htmlb’%> <B> VUELOS <p><B>compañia </b>. table ? = event. %> <% loop at znombresc into linea. data wa like line of application->it_spfli.htm' ). CALL METHOD NAVIGATION->SET_PARAMETER EXPORTING NAME = 'DESTINO' VALUE = wa-cityto .botones de navegación --> <%-. 1.2. Pagina vueloshtmlb. ENDIF. ENDIF.-<% = destino %><br> <htmlb:content design = ‘design2003’> <htmlb:page title = ‘ ‘> <htmlb:form> <!-. event = cl_htmlb_manager = >get_event( runtime->server->request ).%> <p><b> ORIGEN VUELO </B>. application->buscar_vue( EXPORTING car = wa-carrid con = wa-connid ).

3..oninputprocessing * event handler for checking and processing user input and * for defining navigation * es un evento htmlb IF event_id = cl_htmlb_manager = >event_id.htm'). * verificar si es el boton uno DATA: button TYPE REF TO cl_htmlb_event_button. button ? = event.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . * la tabla esta cargada de antes por lo que no hay que hacer nada. * me hubiera dado igual asociar el objeto button al evento para lo que voy a hacer. IF event->name = 'button' AND event->id = 'reinicio'.presento la tabla de vuelos calculada antes --> <htmlb:tableView id = ‘Conexiones’ filter = ‘NONE’ table = ‘<% = application->IT_SFLIGHT%>‘> </htmlb:tableView> </htmlb:form> </htmlb:page> </htmlb:content> 2.Boton para evento en el cliente: --%> <htmlb:button id = ‘ruta’ text = ‘<otr>elegir otra ruta’ tooltip = ‘otra ruta’ onClick = ‘otro_boton’ onClientClick = ‘alert('clikc cliente')’ width = ‘150’ design = ‘EMPHASIZED’ /> <!-. M. navigation->goto_page('htmlb. button ? = event. endif. event = cl_htmlb_manager = >get_event( runtime->server->request ).-oninizialitation * event handler for data retrieval select * from scarr into corresponding fields of table znombresc where carrid = application->carrid . * verificar si es el boton dos IF event->name = 'button' AND event->id = 'ruta'. navigation->goto_page('consultahtmlb. <htmlb:button id = ‘reinicio’ text = ‘<otr>Sel.Otra Compañia </otr>‘ tooltip = ‘Elegir Nueva Compañía’ onClick = ‘mi_boton’ width = ‘250’ /> <%-. * me hubiera dado igual asociar el objeto button al evento para lo que voy a hacer.htm'). DATA: event TYPE REF TO cl_htmlb_event.

endif. endif. M.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .

Web dynpro Proceso de definición de un webdynpro.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . El componentes webdynproapplication es el que realiza la llamada para la ejecución. En webdynpro tiene un <<contexto>> que es la estructura de información que es accesible desde el controlador. no es necesario. Los contextos estan relacionado jerárquicamente. Creación de una webdynpro: M. sin embargo. podemos tener web dynpro sin aplicación que pueden ser reutilizados por otras web dynpros. se estructura en nodos y atributos simples. de forma que los nodos de los controladores de vista estan mapeados sobre los nodos del controlador del componente.

al crearla nos pide el nombre de la ventana principal y de la vista principal.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . Modificando el contexto del controlador: el contexto del controlador es visible en todos los conceptos M.

Cada vista tiene una salida definida por el plug que quiera y es el objeto window quien analiza los plug y dirige el flujo entre vistas.Cada plug genera un evento asociado M. El flujo entre vistas se realiza a traves de los PlugGS . de entrada y salida. se puede mapear el nodo de contexto sobre el contexto de la vista simplemente arrastrandolo desde el contexto del controlador. Por ejemplo se puede configurar en evento de un elemento grafico del layout que dispare la salida por un plug concreto.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . Para añadir una vista a una ventana basta arrastrarla a ella. pero necesita configurar el paso entre vistas.

Cuando se dispara el evento en la vista para que sea reconocido tenemos que programar una captura en la ventana mediante la creación de un enlace de navegación: . M. Para hacer ejecutable la vista según el esquema de navegación de la ventana basta con crear un elemento aplicación. Los nodos y atributos del contexto no son accesibles directamente desde las vistas.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .

De hecho la aplicación que genera es externa y controla el dynpro a través de su interfaz: referenciar elementos del contexto desde el codigo de la vista. y el interfaceview.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . A traves del wizard: M. para poder relacionar el webdynpro externamente con otros es necesario programar el interfacecontroller. Los elementos que hemos visto hasta ahora son privado del webdynpro.

nos genera el codigo para acceder al dato: M.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .

* get element via lead selection lo_el_usuario = lo_nd_usuario->get_element( ).. DATA lo_nd_usuario TYPE REF TO if_wd_context_node. Los atributos se recorre a traves de ls_usuario-campo Para cargar tablas en nodos. DATA ls_usuario TYPE wd_this->element_usuario. * get element via lead selection lo_el_usuario = lo_nd_usuario->get_element( ). lo que se tiene es unicamente un subobjeto hijo que se rellena con los datos del padre en función de una funcion de rellenado (supply function) asociada al nodo hijo. (tipo raiz del contexto) DATA lo_el_usuario TYPE REF TO if_wd_context_element. Se usa por ejemplo si tenemos un nodo que contiene una consulta y un subnodo dentro que hace un filtro en otra consulta en función de los parámetros del nodo padre para que no se genere una instancia de la sublista por cada registro del nodo padre consumiendo excesivos recursos.. debemos definirlos con cardinalidad 0.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .n actualmente seleccionado. M. * get all declared attributes lo_el_usuario->get_static_attributes( IMPORTING static_attributes = ls_usuario ).n. Singleton . 1.. DATA lo_el_usuario TYPE REF TO if_wd_context_element. * navigate from <CONTEXT> to <USUARIO> via lead selection lo_nd_usuario = wd_context->get_child_node( name = wd_this->wdctx_usuario ). El atributo list-selection marca el objeto de la colección 0. (tipo elemento de la colección llamado usuario) DATA lv_nombre LIKE ls_usuario-nombre.(tipo colección de nodos y atributos del contexto) DATA ls_usuario TYPE wd_this->element_usuario.1.n. Con singleton on..n. * get single attribute lo_el_usuario->get_attribute( EXPORTING name = `NOMBRE` IMPORTING value = lv_nombre ). Captura de un nodo completo DATA lo_nd_usuario TYPE REF TO if_wd_context_node. * ls_ indica structura local * lv_ indiva variable local * navigate from <CONTEXT> to <USUARIO> via lead selection lo_nd_usuario = wd_context->get_child_node( name = wd_this->wdctx_usuario ).una clase que solo puede existir una vez en la aplicación..

n. de modo que por codigo asignando a los atributos de la vista modificamos la presentación del layout. ejemplo las tablas..Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . M. se crean nodos y propiedades en la vista que se asocian con los atributos de los elementos del layout que queremos controlar.. Necesario cambiar la cardinalidad a 0. Para modificar dinámicamente el layout en funcion de la ejecución del codigo. o 1. Muy util el botón varita mágica (asistente) para crear formularios y tablas.. así como en modo edición para llamar a los patrones de lectura de datos de contexto y de llamadas de metodos.n. Insertar una tabla definida en el context en el layout: Wizard Elementos compuestos.

lo_COMPONENTCONTROLLER = wd_this->get_componentcontroller_ctr( ). • enlaces es la función que calcular la selección y carga la tabla. DATA lo_nd_seleccion TYPE REF TO if_wd_context_node. El methodo call current controller y el read context. lo_componentcontroller->enlaces( ).Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . * navigate from <CONTEXT> to <SELECCION> via lead selection lo_nd_seleccion = wd_context->get_child_node( name = wd_this- >wdctx_seleccion ). Usando la combinacion de disparo de eventos con plugo y lanzando la llamada al metodo del controlador * Llamo al metodo del component controller DATA lo_COMPONENTCONTROLLER TYPE REF TO IG_COMPONENTCONTROLLER . * carga de datos en una tabla sin funcion de alimentacion. Ejemplo acceso a datos desde webdynpro. Metodo met_buscar disparado por un boton de búsqueda. • get element via lead selection • GET element en una tabla apunta al nodo seleccionado. DATA lo_el_seleccion TYPE REF TO if_wd_context_element. M. El method call un used controller. method MET_BUSCAR . DATA ls_seleccion TYPE wd_this->element_seleccion.

* DATA ls_vuelos TYPE wd_this->element_vuelos. 1. lo_el_seleccion = lo_nd_seleccion->get_element( ).. * se usa el metodo bind_table del nodo cardinal 0. endmethod. Esta solución es cutre y fuera de norma. DATA lo_nd_vuelos TYPE REF TO if_wd_context_node. * ------------------- * DATA lo_el_vuelos TYPE REF TO if_wd_context_element. * ahora como tenemos vuelos que es una tabla vacia vamos a crear una tabla local que * vamos a rellenar DATA lt_vuelos TYPE wd_this->elements_vuelos . * Llamo al metodo del component controller DATA lo_COMPONENTCONTROLLER TYPE REF TO IG_COMPONENTCONTROLLER . * seleccion de datos y carga de la tabla local del metodo select * from sflight into corresponding fields of table lt_vuelos where carrid = ls_seleccion-carrid and connid = ls_seleccion-connid . * get all declared attributes lo_el_seleccion->get_static_attributes( IMPORTING static_attributes = ls_seleccion ). Lo lógico sería definir el método en vez de en la vista en el controlador. * apuntar la tabla local al elments del nodo.. method HANDLESELECCION .n lo_nd_vuelos->bind_table( new_items = lt_vuelos ) . USO DE METODOS PROVEEDORES DE DATOS Y ATRIBUTO SINGLETON PARA TABLAS ENLAZADAS Se usara el objeto elemento como indicador del registro superior elegido para obtener las variables de configuración Lo_nd_<node>->get_element( ) * elige el seleccionado actual Lo_nd_<node>->get_element( index n) * elige uno concreto M. lo_COMPONENTCONTROLLER = wd_this->get_componentcontroller_ctr( ). endmethod. * capturar el contex del modo vuelo * apuntar lo_ele_vuelos a la tabla.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .n. lo_componentcontroller->enlaces( ). lo_nd_vuelos = wd_context->get_child_node( name = wd_this->wdctx_vuelos ).

Para acceder desde un nodo a su nodo padre . El parametro set_initial_elements se usa para añadir un registro adicional con false o para sustituir el elemento actual en el nodo poniendolo a true. Para obtener una tabla con todos los registros nos referiremos al contenido de nuestro nodo de contexto . aquí el parameto set_initial_elements a true sobrescribe todo el contenido del nodo original y false añade registros al final. referiendose a todos los elementos mediante Wd_this->elements_nombrenodo . Otra forma de hacer lo mismo es sin usar objeto element.. ). Importing Value = varlocal Value = … ). El proceso una vez lanzado nos permite recuperar del ojbeto parent-element las variables que necesitamos para actualizar la selección del subnodo. El bind_table .. Lo_nd_nodo->bind_element ( new_item = lo_el_nodo Set_initial_elements = abap_false ). * General Notes * ============= * A common scenario for a supply method is to aquire key * informations from the parameter <parent_element> and then * to invoke a data provider. * A free navigation thru the context. Ejemplo: method BUSCAR_VUE . get static attributes of parent element M.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . añade registro igual usando una tabla de elementos. a partir del objeto nodo se pueden crear elementos vacios del tipo elemento. Creación de datos en el contexto.Acceso a tributo del elemento capturado: Lo_el_node->get_attribute( Exporting Name = ‘campo’ Name… ……. especially to nodes on * the same or deeper hierachical level is strongly discouraged. que es el elemento del nodo padre que lo ha llamado . Lo_el_nodo = lo_nd_nodo->create_element( ). Set_initial…. Para obtener un registro completo Mediante get_static_attributes( static_attributes = registrolocal ). Ese elemento habra que hacer bindig con el al nodo cuando lo tengamos cargado de datos. la funcion de relleno recibe un parámetro llamado parent_element. sino un dato estructurado igual al registro del contexto Lo_nd_nodo->bind_structure ( new_item …. Los metodos get_attribute y get_static_attributes tiene su complementario para la grabación de información con set_attribute y set_static_attributes. * because such a strategy may easily lead to unresolvable * situations!! * if necessary.

• ahora capturar B (uso el objeto Lo_nd_conex que apunta a A) DATA lo_nd_origen TYPE REF TO if_wd_context_node. Cuando tenemos varios nodos enlazados. endmethod. DATA lo_el_origen TYPE REF TO if_wd_context_element. DATA comp type scarr-carrid. Tambien se puede poner un boton que tenga un evento vacio para que lance todos los cambios en los dropdowns de una unica vez. * data declaration DATA lt_vuelos TYPE wd_this->Elements_vuelos. M. DATA lo_el_conex TYPE REF TO if_wd_context_element. lo_nd_conex = node->get_child_node( name = wd_this->wdctx_A ). al nodo B que no es accesible directamente ( C si por que es el nodo padre y pasa como parent_element. IMPORTANTE . * obtengo A DATA lo_nd_conex TYPE REF TO if_wd_context_node.. call a data providing FuBa select * from sflight into CORRESPONDING FIELDS OF TABLE lt_vuelos WHERE carrid = ls_parent_attributes-carrid and connid = ls_parent_attributes-connid.para que los metodos rellenadores funcionen es neceario crear eventos vacios en la vista para que hagan una petición al servidor sino no hace nada. DATA ls_vuelos LIKE LINE OF lt_vuelos. DATA ls_parent_attributes TYPE wd_this->element_conexiones. para acceder desde uno interior a los anteriores es necesario recorrer el arbol del contexto desde la raiz: En una estructura: CONTEXT A B C D Para llamar desde D.g. lo_nd_conex->get_attribute( EXPORTING name = `CARRID` IMPORTING value = comp ). * bind all the elements node->bind_table( new_items = lt_vuelos set_initial_elements = abap_true ). * @TODO compute values * e.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . lo_nd_origen = lo_nd_conex->get_child_node( name = wd_this->wdctx_B ). A por que está en la raiz del contexto. parent_element->get_static_attributes( IMPORTING static_attributes = ls_parent_attributes ).

los controladores de usuario se crean en función de la petición de las vistas. Un controlador se asocia a una vista: NAVEGACION ENTRE UNA VISTA Y OTRA EMBEBIDA EN UN VIEWCONTAINERELEMENT SE CREA VISTA-1 Y VISTA-2. EN VISTA-1 EXISTE UN VIEWCONTAINERELEMENT DESDE EL ARBOL DEL DYNPRO .USO DE CUSTOM CONTROLLERS Un controlador esta asociado a una vista.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . EN WINDOW ARRASTRAMOS LA VENTANA DE SALIDA SOBRE EL VIEWCONTAINER DE LA PRINCIPAL EN LA VENTANA WINDOWS. M.

Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .REUTILIZACION DE COMPONENTES Existen y se pueden crear components webdynpro reutilizables para otras webdynpro. M.

el compoente salv_wd_table.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . es otro web dynpro usable desde el nuestro M.Se declaran los componentes en los atributos del objeto webdynpro.

M. Ademas hay que mapear nuestros datos locales contra los datos locales del mismo. basta arrastrar nuestro nodo sobre el nodo del objeto para realizar una asociación entre ellos.el componente se asocia al controlador de la aplicación a traves de los atributos de su interfaz.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . A traves de la rama windows . en el objeto ventana tenemos boton derecho sobre el viewcontainer la opcion <<embeber view >> y no sale una lista con todas las ventanas disponibles para embeber dentro del container. asociar nuestra vista del control a un viewcontainer en nuestra vista propia.

Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .un ejemplo con custom controller y objetos. M.

Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . definir el controlador tanto de mis vistas como del objeto: M.asociación entre mi webdynpro y las aplicaciones que va a usar.

Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .mapear los datos del contexto de mi controlador sobre el contexto del objeto. Cuidado que se acuerda. M. si se cambia el mapeo para eliminar el mapeo sobre el componente boton derecho –borrar mapeo. Definir la ventana de forma que que este embebida input dentro del objeto contenedor de vista 1 y la vista tabla del objeto en el otro.

Codigo: La funcion de rellenado en nuestro controlador: method LLENALISTADO . M. DATA lo_nd_seleccion TYPE REF TO if_wd_context_node.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 .

* get all declared attributes select * from sflight into corresponding fields of table lt_listado where carrid = ls_seleccion-carrid and connid = ls_seleccion-connid . * get element via lead selection lo_el_listado = lo_nd_listado->get_element( ).Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . DATA ls_seleccion TYPE wd_this->element_seleccion. lo_micontroller->llenalistado( ). * get element via lead selection lo_el_seleccion = lo_nd_seleccion->get_element( ). * get all declared attributes lo_nd_listado->bind_table( new_items = lt_listado ) . * navigate from <CONTEXT> to <SELECCION> via lead selection lo_nd_seleccion = wd_context->get_child_node( name = wd_this- >wdctx_seleccion ). DATA lt_listado TYPE wd_this->elements_listado. * navigate from <CONTEXT> to <LISTADO> via lead selection lo_nd_listado = wd_context->get_child_node( name = wd_this->wdctx_listado ). DATA lo_nd_listado TYPE REF TO if_wd_context_node. lo_MICONTROLLER = wd_this->get_micontroller_ctr( ). ENDIF. DATA lo_MICONTROLLER TYPE REF TO IG_MICONTROLLER . * endmethod. DATA lo_el_seleccion TYPE REF TO if_wd_context_element. ENDIF. * get all declared attributes lo_el_seleccion->get_static_attributes( IMPORTING static_attributes = ls_seleccion ). El disparador de rellenado esta asociado a un evento en la vista input: method ONACTIONBUSCAR . * @TODO handle not set lead selection IF lo_el_listado IS INITIAL. endmethod. * @TODO handle not set lead selection IF lo_nd_listado IS INITIAL. * alternative access via index * lo_el_listado = lo_nd_listado->get_element( index = 1 ). M. Todas las demas funciones están dentro del objeto embebido. * @TODO handle non existant child * IF lo_el_listado IS INITIAL. DATA lo_el_listado TYPE REF TO if_wd_context_element. * ENDIF.

LLAMADAS DE SERVICIO Creación de funciones por se37 Se genera un custom controller a partir de una función o un objeto almacenado.Rodríguez Valverde– Curso bsp y webdynpro para SAP – Badajoz (8-3-2010 a 18-3-2010 . M.