Está en la página 1de 18

FL LE EX XAB-WEB PE ER RS SO ON NA AL LIIZ ZA AR R IIN NT TE ER RF FA AC CE ES SW WW WW W

In d ic e
I N T R O D U C C I N A L A S I N T E R F A C E S W W W S O B R E I I S ..........................................................4 I N T R O D U C C I N A H T M L , W M L Y C S S ..................................................................................5 I N T R O D U C C I N A L M O D E L O D E O B J E T O S D E I E 6 ..................................................................9 G E N E R A R C O N T E N I D O C O N A S P ...........................................................................................10 U N E J E M P L O P R C T I C O C O N F L E X A B . D L L ..........................................................................12 R E F E R E N C I A S S O B R E A L G U N O S L E N G U A J E S M E N C I O N A D O S .................................................18

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

INTRODUCCIN
La Suite de componentes de FlexAB incluye una amplia variedad de herramientas y componentes para servir contenido en ambientes tales como World Wide Web (WWW), Intranet, Extranet y otras. El objetivo de estos componentes es cubrir en campos como Internet y Lan las mismas funcionalidades que se obtienen a partir de la Standard User Interface (de ahora en adelante SUI) en Microsoft Windows. FlexAB incluye 3 mdulos para el acceso web: WUI (Web User Interface): Pensada para brindar equivalencia con SUI a travs del protocolo HTTP (Hypertext Transfer Protocol), enviando HTML4 (Hypertext Markup Language) a navegadores web convencionales tales como Microsoft Internet Explorer 6 (de ahora en adelante IE). MUI (Mobile User Interface): Permite acceder a todas las funcionalidades de FlexAB desde dispositivos de display pequeo tales como SmartPhones, Pocket PCs, celulares equipados con navegadores con soporte para mostrar HTML, XHTML y otros. AUI (Wap User Interface): Es una re-implementacin de la MUI, pero el contenido es generado en lenguaje WML (Wireless Markup Language) completamente estandar, con el fin de ser accedido va protocolo WAP 1.0 (Wireless Application Protocol) con telfonos celulares convencionales y otros dispositivos con soporte WAP sin importar marca ni modelo. Todas estas interfaces se ejecutan sobre Microsoft Internet Information Server (de ahora en adelante IIS) y basadas en las funciones pblicas que brinda el mdulo COM a travs de la clase FrameworkWeb de FlexAB.dll. Esto significa que son completamente personalizables con lenguajes como ASP (Active Server Pages), PHP(Hypertext Preprocessor), DHTML(Dynamic HTML), Javascript entre otros y formateable con plantillas CSS (Cascading Style Sheets) y Macromedia Flash+ActionScript entre otros. Todo lo anterior se debe a sus caractersticas de desarrollo indistintas de un sitio web dinmico convencional. El hecho de poder acceder fcilmente a las funciones de FlexAB desde lenguajes de Scripting como ASP y PHP hace que sea muy sencillo desarrollar personalizaciones especficas para determinadas configuraciones. Ms adelante veremos un ejemplo concreto.

D Diir riig giid do oa a


Los componentes WEB de FlexAB estn dirigidos a usuarios finales capacitados para utilizar sistemas realizados con FlexAB y acostumbrados al uso de navegadores WEB. La clase FrameworkWeb de FlexAB.dll est dirigida a desarrolladores web junior y senior para crear y/o personalizar interfaces para FlexAB.

C Co on no oc ciim miie en ntto os sP Pr re ev viio os s


Familiarizacin con entorno WWW. Programacin Server side: ASP, PHP, otros. Programacin Client side: Javascript, ActionScript, DHTML, otros. Nociones de XML (eXtensible Markup Language).

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

INTRODUCCIN

A LAS INTERFACES

WWW

SOBRE

IIS

Primero haremos una breve resea sobre el flujo de informacin para entender el proceso por el cual un navegador web se comunica con el servidor IIS con FlexAB y obtiene la informacin deseada:

En el grfico anterior, suponemos los usuarios 1, 2 y 3 equipados con diferentes dispositivos en la parte izquierda. Estos usuarios no estn en el lugar fsico donde se encuentra la implementacin de FlexAB, pero s tienen acceso a travs de Internet, con las interfaces WUI (Usuario 1), MUI (Usuario 2) y AUI (Usuario 3). En la parte derecha del grfico se encuentran los usuarios 4 y 5 que tienen acceso al mismo servidor a travs de su propia LAN. Estos usuarios podran estar utilizando una configuracin de FlexAB a travs de la SUI. En el centro del grfico se representa el servidor WEB, de bases de datos (DB) y varios servidores opcionales adicionales que podran o no estar presentes, o estar todos en la misma PC. Los nicos servicios realmente necesarios en este proceso son el Servidor WEB (IIS+FSS) y el Servidor de DB, que en una implementacin bsica de FlexAB podran incluirse en el mismo equipo reduciendo los costos al mnimo. Los servidores adicionales participan aqu para ilustrar el poder de integracin de los servicios de FlexAB con otras herramientas y servicios presentes en la red corporativa.

Teniendo en cuenta que los vnculos necesarios en el proceso son los de color amarillo (Internet y LAN), ntese que los usuarios 4 y 5 podran incluso NO tener acceso a Internet, y de todas maneras a travs de FlexAB trabajaran en forma integrada con los usuarios 1, 2 y 3 que acceden a travs de Internet. Todos los usuarios podran estar utilizando en tiempo real la misma aplicacin FlexAB desde la red local, Internet, pocket pc, palm, hand held, celulares, etc.

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

INTRODUCCIN

HTML, WML

CSS

El contenido entregado por el servidor web es enviado en lenguaje HTML y/o WML y puede ocasionalmente ser formateado con CSS, aunque este ltimo es prescindible si se desea entregar contenido sin formato para otros procesos. Dentro de FlexAB.dll, algunos mtodos de la clase FrameworkWeb son capaces de entregar contenido en formato HTML para poder ser fcilmente enviado al cliente, y otros mtodos pueden entregar contenido en tipos de datos comunes que luego pueden ser procesados con un lenguaje de scripting (ver Generar Contenido con ASP ms adelante) y generar el HTML necesario para representar la informacin de la forma ms conveniente. HTML es un lenguaje de transporte de datos con grandes prestaciones de formato. Tpicamente se conforma de TAGS con contenido, mayormente delimitados por una etiqueta de apertura y otra de cierre. La funcin principal del lenguaje HTML es entregarle al navegador del cliente la informacin necesaria para poder representar la pgina web de la manera ms conveniente. Aporta usualmente una cabecera con datos como por ejemplo el ttulo de la pgina, el set de caracteres utilizado en el contenido, plantillas de CSS, extensiones de Javascript y VBscript para ejecutar del lado del cliente y varios otros elementos con en fin de lograr la correcta representacin del contenido. Adicionalmente, aporta un cuerpo que encierra el contenido a representar. Un ejemplo sencillo:

<HTML> <HEAD> <TITLE>Titulo de prueba</TITLE> </HEAD> <BODY> Hola Mundo de FlexAB! </BODY> </HTML>

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

El lenguaje HTML es fcilmente combinable con plantillas de estilo CSS. La finalidad principal de CSS es separar la informacin de presentacin y formato a una capa distinta a la del contenido. Una plantilla CSS puede ser un archivo distinto al archivo HTML, o bien estar incrustada en la cabecera de la pgina que se desea formatear. Por motivos ilustrativos veremos un sencillo ejemplo de este ltimo caso. <HTML> <HEAD> <TITLE>Titulo de prueba</TITLE> <STYLE> .parrafoHola { font-family: Verdana; font-size: 20px; color: red; } </STYLE> </HEAD> <BODY> <P class="parrafoHola">Hola Mundo de FlexAB!</P> </BODY> </HTML>

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

Las plantillas de estilo definen clases que luego se pueden aplicar a los TAGS de HTML. En el caso del ejemplo nos referimos al tag Paragraph (<P>) a la cual mediante el atributo class se le asigna la clase CSS parrafoHola. Como se puede ver en la plantilla, esta clase aporta informacin sobre la fuente con la cual debe ser mostrado el texto del prrafo. Cabe destacar que CSS soporta muchos comportamientos tpicos de clases, como por ejemplo la combinacin de clases, herencia y otras. Un ejemplo apenas ms elaborado:

<HTML> <HEAD> <TITLE>Titulo de prueba</TITLE> <STYLE type="text/css"> .parrafoHola { font-family: Verdana; font-size: 20px; color: red; text-align: center; } .fondoYborde { background-color:lightBlue; border: solid 1px green; } </STYLE> </HEAD> <BODY> <P class="parrafoHola , fondoYborde">Hola Mundo de FlexAB!</P> </BODY> </HTML>

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

WML es el lenguaje equivalente al HTML para distribuir contenido a dispositivos capaces de utilizar el protocolo WAP como telfonos celulares. El equivalente WML del ejemplo visto sera: <?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card id="page1" title="Titulo de Prueba"> <p>Hola Mundo de FlexAB!</p> </card> </wml> En este caso no tendr mucho sentido incluir una imagen resultante del ejemplo, ya que cada dispositivo la dibuja con sus posibilidades tcnicas, que vara en tamao de pantalla, tamaos y tipos de fuente, forma y ubicacin de controles, etc. Pero ms all de estas variaciones en la representacin, en todos de los casos la implementacin funcionar correctamente. Es importante mencionar que IIS requiere algunos pasos de configuracin previa para poder servir a clientes WAP. Debe agregarse al menos a la lista de tipos MIME el siguiente tipo de datos: .wml text/vnd.wap.wml

Nota: Tambin pueden agregarse otras extensiones que para el alcance de este manual no son necesarias.

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

INTRODUCCIN

AL

MODELO

DE

OBJETOS

DE

IE6

Los navegadores web como Internet Explorer estn provistos de un set de objetos, mtodos y propiedades que el programador puede utilizar para darle dinamismo a las pginas web, del lado del cliente. Este set de herramientas permite acceder en forma directa tanto a comportamientos del navegador como al contenido que est mostrando. Es decir que existe la posibilidad de automatizar algunos procesos en el cliente sin necesidad de consultar al servidor web. Lenguajes como JavaScript y VBscript, entre otros, pueden ser utilizados para implementar scripting del lado del cliente. Estos scripts viajan incrustados o embebidos junto al HTML con el cual interactuarn. Normalmente estn basados en eventos, por lo que se organizan de manera que aguardan una accin del usuario o del navegador para entrar en funcionamiento. Un ejemplo sencillo: <HTML> <HEAD> <TITLE>Titulo de prueba</TITLE> <SCRIPT language="JavaScript"> function mostrarVentana() { alert('Hola mundo de FlexAB'); } </SCRIPT> </HEAD> <BODY> <INPUT type="button" value="Un Boton" onClick="mostrarVentana();"> </BODY> </HTML> El cdigo de JavaScript est encerrado entre los tags <SCRIPT> y </SCRIPT> dentro del archivo HTML. Tambin puede incluirse en un archivo separado, normalmente con extensin .js. El ejemplo implementa un control de entrada de datos, del tipo botn, que define el evento onClick y la funcin de JavaScript que debe invocarse cuando el usuario haga clic sobre el botn. Esta funcin invoca a su vez al mtodo alert(); cuya finalidad es mostrar una ventana estandar de Windows con el texto requerido. En la siguiente imagen puede observarse el resultado del ejemplo:

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

El ejemplo es meramente ilustrativo y JavaScript es mucho ms poderoso y til que para mostrar una ventana de texto, pueden generarse aplicaciones verdaderamente complejas del lado del cliente, pero eso est fuera del alcance de este manual. Para ms informacin ver referencias al final del documento.

GENERAR CONTENIDO

CON

ASP

Existen muchos lenguajes Server side scripting pero en este caso nos concentraremos en Active Server Pages. ASP es un software que est compuesto a su vez por 2 lenguajes: VBscript y Jscript. Puntualmente haremos una introduccin a VBscript por su similitud con Visual Basic. La idea inicialmente es sencilla: generar un proceso del lado del servidor que entregue contenido esttico al cliente. Funcionalmente esto representa centralizar el esfuerzo de procesamiento en un servidor y generar contenido en lenguaje HTML, con la consecuente independencia los clientes en cuanto a potencia de hardware y tipo de plataforma. En FlexAB, la lgica de negocios queda siempre dentro de la configuracin desarrollada en FlexAB-SCI, por lo que el objetivo fundamental en este caso ser organizar la informacin en forma concretamente til para su utilizacin por el usuario. Ejemplos tpicos dentro del mundo de FlexAB, sera permitirle al usuario ingresar a una aplicacin, ver datos de un objeto, quizs modificarlo y guardarlo, obtener un archivo alojado en un FileLink, listar una serie de objetos, enviar mail al presionar un botn, comunicarse con otros usuarios de FlexAB, imprimir reportes, etc. La cantidad de casos es ilimitada o bien est dada por la configuracin activa desde FlexAB-SCI. En cuanto a la forma de trabajo, ASP se escribe en archivos de texto en forma conjunta con HTML, el cdigo dinmico encerrado entre los delimitadores <% y %> y lo que queda fuera de ellos se considera HTML o bien la variante que la cabecera indique. Cuando un cliente va a navegar un ASP el IIS toma el archivo y ejecuta el cdigo encerrado en estos delimitadores. Para el caso especfico de FlexAB, podemos resumir la entrega de contenido en la siguiente figura: FlexABWEB: Personalizar Interfaces WWW con FlexAB
v22 13_(DOC)WEB.pdf

10

Es especialmente interesante remarcar el hecho de que FlexAB COM+ y Scripts ASP no son procesos definidos, sino que el modulo COM se comporta como la configuracin del universo lo indique, y ASP lo refleja de la manera en que el programador web lo defina, y todo esto respetando las normas de seguridad y entorno que permita la configuracin de IIS. Esto significa que FlexAB COM y ASP en conjunto, pueden proveer una indefinida cantidad de soluciones a los distintos requerimientos de software, teniendo en cuenta que se utiliza ASP solo para organizar la informacin mientras que FlexAB COM se encargar completamente de la lgica de negocios. Por ejemplo la interfaz web podra ser solo un botn, pero este botn podra invocar un script ASP que a su vez le solicite un archivo al mdulo COM, este al File System Server (FSS) y por ltimo el FSS le entregara el archivo al mdulo COM, que segn las reglas de seguridad del niverso podra ser depositado en una carpeta temporal del IIS, de donde el navegador web del cliente pueda descargarlo. Un pequeo ejemplo de cdigo ASP: <HTML> <HEAD> <TITLE>Titulo de prueba</TITLE> </HEAD> <BODY> <% Response.Write "Hola mundo de FlexAB!" %> </BODY> </HTML> El Script es tomado por IIS y ejecutado (solo el cdigo Server side), con lo que el resultado obtenido por el IIS es un cdigo HTML idntico al del primer ejemplo mencionado en este documento, por lo que la vista del lado del cliente es tambin igual.

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

11

UN EJEMPLO PRCTICO
Pgina personalizada

CON

FLEXAB.DLL

Lo ms interesante para comprender el funcionamiento sera implementar un archivo ASP que realice lo siguiente: 1. 2. 3. 4. 5. Crear el objeto ActiveX de FlexAB. Llamar al mtodo loginApp() para ingresar a una aplicacin existente. Llamar a OBJECTtoXMLnew() para obtener un documento XML de objeto nuevo. Asignarle mediante XQL un dato como por ejemplo un nombre en el atributo TAG. Guardar el objeto utilizando la funcin XMLtoOBJECT().

Punto 1.

Como ASP no soporta otro tipo de datos que VARIANT, existe la capa pblica FlexAB.FrameworkWeb que lo que hace es mapear los tipos de datos comunes como String, Integer, Long, etc a variant/compatibles y viceversa. Es por esto, que siempre que utilicemos funciones de FlexAB DLL desde ASP, instanciaremos la clase FlexAB.FrameworkWeb como tpicamente lo hara una aplicacin de VBA bajo Windows con FlexAB.Framework. Para esto basta con crear un script ASP (Ej: crearObjeto.asp) en una carpeta navegable del IIS con permisos de ejecucin con el siguiente cdigo:

<% Option explicit Dim FlexAB 'Carga FlexAB Set FlexAB = Server.CreateObject(FlexAB.FrameworkWeb) 'Descarga FlexAB y la conexin al FileServer (si hubiera) set FlexAB = nothing %>

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

12

Punto 2. Antes de poder hacer cualquier tipo de accin es necesario iniciar sesin en una aplicacin de FlexAB. Para esto tenemos 2 formas posibles, a saber: 1. 2. Login() + initSession() LoginApp()

Login() obtiene la lista de aplicaciones permitidas para una combinacin de datos usuario+password. Luego se llama a initSession() con la aplicacin seleccionada para completar el inicio de sesin y activar el resto de los componentes necesarios para la sesin. LoginApp() es una funcin que combina las 2 anteriormente mencionadas. Directamente recibe los datos de usuario, password y aplicacin, e intenta iniciar sesin. Ejemplos de esto se pueden encontrar en /SP/loginWap.asp, WAP/loginWap.asp y HTML/login.asp de los componentes web de FlexAB.

Punto 3 Existen, entre otras, 2 maneras que son las ms utilizadas de obtener objetos de FlexAB en formato XML: OBJECTtoXMLnew() y OBJECTtoXMLatt() OBJECTtoXMLnew(strErr, idClass, lngFather) Esta funcin obtiene a un documento XML el molde de un objeto de la clase solicitada, en blanco, listo para cargarle datos y guardarlo. Sus parmetros son: strErr: una variable por referencia, se ingresa vaca, y si ocurre un error, el mensaje retorna en esta variable (para mostrarlo luego en la pgina web). idClass: el nombre de la clase del objeto que se quiere crear. Por ejemplo: PLANTA. lngFather: el id interno del objeto del cual se colgar este objeto al guardarlo. Para colgarlo de la raiz de una aplicacin por ejemplo, el valor es 1.

Es decir, para pedir el molde vaco de un objeto de la clase PLANTA la llamada sera: <% Dim xmlDoc Set xmlDoc = FlexAB.getXMLdoc Set xmlDoc = FlexAB.OBJECTtoXMLnew(strErr, PLANTA, 1) %> FlexABWEB: Personalizar Interfaces WWW con FlexAB
v22 13_(DOC)WEB.pdf

13

Nota: la funcin auxiliar getXMLdoc() retorna un documento XML vaco de la versin 4.0. Es solo para asegurar que el tipo de datos que se espera obtener de OBJECTtoXMLnew() es el correcto. Podra no ser necesaria segn la versin de IIS y otros parmetros de compatibilidad.

Punto 4 Si se quisiera asignar un valor al TAG del objeto en cuestin, se debe hacer uso de un XQL, que es un lenguaje de consulta para documentos XML. Es muy sencillo por ejemplo: <% xmlDoc.selectSingleNode(//OBJECT/ATTRIBUTES/TAG/VALUE).text = GranPlanta %> Esto asignar el string GranPlanta al nodo VALUE correspondiente al atributo TAG del objeto obtenido en el punto 3.

Punto 5 Guardar el objeto es cuestin de llamar a la funcin XMLtoOBJECT() pasandole el documento XML que hemos modificado en el punto anterior y una variable de mensajes para saber si hubo errores al guardar. Si la variable de mensajes vuelve vaca, entonces el objeto se guard correctamente. Por ejemplo: <% XMLtoOBJECT( xmlDoc, strErr) %> Eso es todo, el guardado del objeto debe pasar las validaciones que imponga la configuracin desarrollada desde el FlexAB-SCI, y si el guardado termina correctamente se podr visualizar instantneamente desde la SUI, WUI, MUI, AUI y todas las interfaces que interacten con el universo actual de FlexAB. Existen ejemplos muchsimo ms avanzados de edicin de un objeto, pero escapa de los fines del documento. Un ejemplo realmente complejo podra ser el editor de objetos de la interfaz WUI (En carpeta del producto: HTML/objectEditor.asp, en SP/editorWAP.asp y WAP/editorWap.asp). Si juntamos todo lo descripto en un solo script, resultara de la siguiente forma, el ejemplo es para una hipottica situacin: Universo FlexABXX(2) Sistema PRUEBA Aplicacin 330 configurada con acceso para usuario "miUsuario" password "miPassword" Configurada una clase PLANTA colgando de la raz de la aplicacin en el espacio predeterminado (el primero o nico).

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

14

<% Option explicit %> <HTML> <HEAD><TITLE>Prueba</TITLE></HEAD> <BODY> <% Dim FlexAB, strErr, login, xmlDoc Set FlexAB = Server.CreateObject("FlexAB.FrameworkWeb") FlexAB.setActiveServer clng(2) login = FlexAB.loginApp(strErr, "miUsuario", "miPassword", 330) if login then set xmlDoc = FlexAB.objectToXMLnew(strErr, "PLANTA", 1) xmlDoc.selectSingleNode("//OBJECT/ATTRIBUTES/TAG/VALUE").text = "Jorge" FlexAB.XMLtoOBJECT xmlDoc, strErr if strErr = "" then Response.write "Guarda bien" else 'Control de errores Response.write "No guarda: " & strErr end if else response.write "login incorrecto" end if FlexAB.closeSession set FlexAB = nothing %> </BODY> </HTML>

Hay una innumerable cantidad de otros casos interesantes de pginas personalizadas. Incluso casos realmente genricos. A modo de ejemplo y utilizando los lenguajes de desarrollo de la manera ilustrada en este documento, podemos ver el FlexAB Web Grid:

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

15

WUI: Tambin es un ejemplo prctico!


FlexAB WUI es un producto completamente desarrollado con las tecnologas introducidas en este documento. Se utilizan prcticamente todos los elementos mencionados de forma de lograr una interfaz agradable al usuario y muy similar a la FlexAB SUI como se puede ver en las siguientes imgenes:

Figura WUI: La ventana est conformada por un gran script ASP que se ejecuta en una sesin ASP que hereda del proceso de login cuando el usuario ingresa su username, password y selecciona una aplicacin. Comienza a iniciarse la ventana: se puede notar la presencia de Flash en la parte superior, en el sector izquierdo el rbol de objetos basado en XML y articulado en JavaScript. El panel del centro est por cargarse una lista de objetos que est generando ASP por haber clickeado un nodo del arbol. La siguiente figura muestra el contenido HTML que ha descargado el Server, es la informacin detallada de 3 objetos, luego el usuario realiza un clic con el botn derecho del Mouse en uno de ellos y se despliega un men con acciones posibles sobre el objeto:

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

16

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

17

REFERENCIAS

SOBRE ALGUNOS LENGUAJES MENCIONADOS

A continuacin se enumeran algunos links con informacin sobre varios lenguajes mencionados en el documento. Debido a la enorme y creciente cantidad de documentacin sobre estas tecnologas solo mencionamos algunos sitios por donde comenzar un acercamiento a las mismas. HTML: ASP: CSS: JavaScript: XML: PHP: XQL: http://www.w3.org/TR/html401 http://support.microsoft.com/kb/297943/EN-US http://www.w3.org/TR/REC-CSS2 http://www.planetpdf.com/codecuts/pdfs/tutorial/jsspec.pdf http://www.w3.org/XML http://www.php.net http://www.w3.org/TR/xquery

FlexABWEB: Personalizar Interfaces WWW con FlexAB


v22 13_(DOC)WEB.pdf

18

También podría gustarte