Está en la página 1de 24

Indice de contenidos

Introduccin o Qu es WAP? o Aplicaciones Consideraciones tcnicas o Introduccin o Emuladores WAP o WML Descripcin de los elementos WML I o <deck> y <card> o <do> o <timer> o <template> Descripcin de los elementos WML II o Introduccin de datos o Enlaces o Variables o Imgenes o Formato del texto WMLScript o Uso de WMLScript Aplicacin WAP: parte I o Ejemplo de aplicacin: Consulta de valores de la bolsa o Acceso y autentificacin o Include de conexin a BD y mantenimiento de la sesin Aplicacin WAP: parte II o Men de operaciones o Procesar Compra / Venta o Diseo y pruebas de la aplicacin o Material utilizado en este artculo Dispositivos WAP y portales o Dispositivos wap o Portales WAP Direcciones de inters o Informacin general o Emuladores y herramientas wap o WAP y ASP

En esta pgina:
Introduccin o Qu es WAP? o Aplicaciones

Introduccin

Qu es WAP?
WAP recibe el nombre de Wireless Application Protocol y es un nuevo protocolo que permite acceder a Internet desde un telfono mvil cmo si se tratase de un navegador.

Aplicaciones
El tamao del dispositivo y la movilidad son los dos puntos fuertes que avalan el xito de esta tecnologa y que la han convertido en una referencia en tan solo unos meses. Por el contrario, las reducidas dimensiones de la pantalla y las limitaciones de velocidad de acceso son sus enemigos principales. Teniendo en cuenta sus virtudes y defectos, parece obvio que no utilizaremos esta herramienta para visualizar fotografas de nuestro prximo destino de vacaciones ni de nuestro actor/actriz preferido. Sin embargo aplicaciones de consulta y transacciones bancarias, operaciones en bolsa o compra de entradas para el cine sern algunos de los servicios que esta tecnologa ya est explotando. En el futuro, se abre adems un interesante abanico de posibilidades en el terreno del comercio electrnico, ya que el telfono mvil por si solo podra ofrecer mecanismos de seguridad y pago electrnico como si se tratase de una tarjeta de crdito.

En esta pgina:
Consideraciones tcnicas o Introduccin o Emuladores WAP o WML

Consideraciones tcnicas Introduccin


WAP se basa en el uso de protocolos y conceptos de Internet aplicados para el acceso a informacin y servicios mediante el telfono mvil. La especificacin en la que se basa la tecnologa WAP est desarrollada por el Forum Wap (http://www.wapforum.com) en la que forman parte las empresas ms representativas de la telefona mvil. De manera similar a la arquitectura de capas en la que se basan las redes de ordenadores, WAP utiliza la especificacin denominada WML (Wireless Markup Language) para enviar y recibir los datos entre el servidor y el mvil como si se tratase del protocolo HTTP entre el servidor y el navegador de Internet. Siguiendo con la equivalencia con Internet, el conocido JavaScript, se denomina en telefona mvil WMLScript, y permitir realizar validacin de datos y otros procesos del cliente mediante un sencillo lenguaje de script. En la siguiente captura (extrada de la Gua de desarrollo de Nokia Wap Toolkit) se detalla la equivalencia de los protocolos WAP y de Internet.

Modelo de operacin WAP (extrado de la gua de desarrollo de Nokia Wap Toolkit)

1. Peticin de una URL 2. El dispositivo (mvil) enva una URL a un proxy WAP mediante el protocolo WAP 3. El proxy WAP convierte la URL en formato HTTP que es enviada al servidor Web 4. La peticin HTTP es procesada por el servidor WEB. Puede tratarse de una peticin esttica o puede intervenir un CGI, JSP (Java Server Pages) o ASP. 5. El servidor Web devuelve una pagina WML con la cabecera HTTP 6. El proxy WAP recibe la pgina, y tras su verificacin la convierte a formato binario que ser enviado al mvil. 7. El mvil recibe la respuesta en formato WAP. Procesa el WML que contiene mostrando el primero de los elementos <card> Emuladores WAP
El ejemplo desarrollado en este tutorial ha sido probados con el emulador proporcionado por Nokia. Puede descargar este emulador en la direccin de Nokia http://www.nokia.com Para su ejecucin necesitar Java 1.2 disponible en el site de Sun http://www.javasoft.com

Con el kit de desarrollo de Nokia, podr crear sus propios archivos wml, probarlos mediante un completo entorno de desarrollo que incluye el editor de texto, compilador WML y WMLScript, visualizador de debug como variables y mensajes e informacin de la sesin. Adems cuenta con un emulador grfico de un telfono mvil wap con el que podr interactuar con los archivos wml generados.

En la captura se visualiza el emulador grfico de telfono mvil. Con los botones centrales, puede realizar desplazamiento (scroll) vertical mientras que los botones laterales permiten realizar la accin que se visualiza en la parte inferior del visor.

WML
El lenguaje WML est basado en XML, como descriptores de los elementos se utilizan tags (que contienen atributos) que deben cerrarse para tratarse de un documento sintcticamente correcto. Se trata de un lenguaje case sensitive y los atributos deben estar en minsculas. Por ejemplo:

<tag atributo1="valor1"> contenido </tag> <tag/> elemento vaco (sin contenido) Como cualquier documento XML necesita un archivo DTD que determine las reglas de diseo del documento una informacin que se indica en la lnea: <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> Conozca el contenido del documento wml_1.1.xml

Ejemplo de documento WML


<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <!-- Ejemplo de documento WML --> <wml> <template> <do type="prev" name="anterior" label="Anterior"> <prev/> </do> </template> <card id="login" title="Mvil-bank"> <p> <img src="logoasp.wbmp" alt="logo"/> Bienvenido al primer banco que opera por el mvil DNI: <input type="text" name="dni" maxlength="8"/> <do type="accept" label="Aceptar"> <go href="#inicio"/> </do> <!-- Sobreescribir el elemento DO/PREV del template para evitar esta accin en el primer desk --> <do type="prev" name="anterior"> <noop/> </do> </p> </card> <card id="inicio" title="Mvil-bank"> <p> <do type="accept" label="Consultar saldo"> <go href="#opConsulta"/> </do> <do type="accept" label="Transferencia"> <go href="#opTransferencia"/> </do> Seleccione la operacin que desea realizar </p> </card> <card id="opConsulta" title="Consulta de saldo"> <p align="left"> Seleccione su <b> cuenta corriente</b>: <select title="Cuenta Cte" name="idCta" iname="iidCta"> <option value='cta1'>2010-8893</option> <option value='cta2'>2019-2232</option> <option value='cta3'>2321-1221</option> </select> </p>

<p> <do type="accept" label="Aceptar"> <go method="get" href="/asps/doQuery"/> </do>

</p> </card>

<card id="opTransferencia" title="Transferencia" ontimer="#inicio"> <timer value="500"/> <p> Bienvenido a la pgina de <b>transferencias</b><br/> <anchor> Volver <go href="#inicio"/> </anchor> </p> </card> </wml>

Las siguientes imgenes muestran algunos ejemplos del documento WML anterior

Card inicio

Men de Opciones

Card de la operacin consulta Card de la operacin Transferencia

En esta pgina:
Descripcin de los elementos WML I o <deck> y <card> o <do> o <timer> o <template>

Descripcin de los elementos WML I <deck> y <card>


<deck> Un documento WML est formado por un elemento <deck> (equivalente a una pagina html) que contiene mltiples elementos <card>. Para minimizar el trfico, el telfono, descargar el documento WML completamente, sin embargo tan solo visualizar un elemento <card> cada vez. <card>

Este elemento especifica un bloque de informacin visualizable en pantalla por ejemplo un texto o un men de opciones. Puede contener <onevent>, <timer> y bloques <p> o <do>

Ejemplo de documento bsico


<?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="card1" title="wml document"> <p> Card 1<br/> </p> </card> <card id="card2" title="wml document"> <p> Card 2<br/> </p> </card> </wml>

<do>
El elemento <do> permite programar las acciones que puede realizar el usuario en un card, por ejemplo, la navegacin a otros elementos card. El atributo "type" especifica la accin que deber ejecutarse y tpicamente toma el valor de "accept" para mostrar una opcin accesible mediante la pulsacin de la tecla de funcin. Entre las posibles acciones que puede contener un elemento <do> figuran:

go: accede a otro elemento card o deck. prev: accede al card anterior refresh: recarga el card actual options: muestra operaciones adicionales noop: no hace nada

Ejemplos:

Referencia a un card del deck actual

<do type="accept" label="Consulta de saldo"> <go href="#opConsulta"/> </do>

Referencia a un deck de otro WML

<do type="accept" label="Consulta de saldo"> <go href="/WMLArchivos/bancaonline.wml"/> </do>

Uso de prev

<do type="prev" name="Previous" label="Previous"> <prev/> </do>

Uso de Noop

<do type="prev" name="Previous">

<noop/> </do>

<timer>
Este elemento permite por ejemplo, controlar el tiempo desde la carga de un card y lanzar un evento ontimer cuando se cumpla cierto tiempo o controlar la seleccin de un elemento de una lista de opciones mediante el evento onpick. En los siguientes ejemplos, el evento "ontimer" indica la url (archivo wml o deck) que se debe solicitar cuando se cumpla el tiempo indicado por el elemento timer declarado a continuacin. (30 segundos) Ejemplos:

Modo 1

<card> <onevent type="ontimer"> <go href="#inicio"/> </onevent> <timer value="300"/>

Modo 2

<card ontimer"=#inicio"> <timer value="300"/>

<template>
Permite definir elementos (de tipo <do> y onevent) que se aplicaran a todos los elementos <card>. Si desea prescindir o cambiar del template en un deck deber sobreescribir el elemento <DO/PREV> del template. En el ejemplo siguiente la sentencia <noop/> indica no hacer nada. Ejemplos:

Uso de template
<template> <do type="prev" label="anterior"> </prev> </do> </template>

Sobreescritura
<card id="login" title="Movil-bank"> <p> <do type="prev" name="anterior"> <noop/> </do> </p> </card>

En esta pgina:
Descripcin de los elementos WML II o Introduccin de datos o Enlaces o Variables o Imgenes o Formato del texto

Descripcin de los elementos WML II Introduccin de datos


De modo equivalente a los elementos de tipo form de HTML, WML contempla la introduccin de datos por parte del usuario, gracias a los elementos <input> para la introduccin de texto por teclado y <select> para mostrar una lista de opciones. Para el elemento input pueden definirse caracteres mximos permitidos, valores por defecto y formato de los datos.

Ejemplo de Input
<card> <p>Introduzca sus datos: <br/> Nombre: <input type="text" name="nombre" maxlength="30" value="Juan"/><br/> Apellido: <input type="text" name="apellido"/><br/> Edad: <input type="text" name="edat" format="NN"/> </p> </card>

Ejemplo de onpick
<card id="Card_1"> <p> Seleccione la opcin deseada: <select name="operacion"> <option value="1" onpick="consulta.wml"> Consulta </option> <option value="2" onpick="transfer.wml"> Transferencias </option> <option value="3" onpick="acciones.wml"> Cotizacin bolsa </option> </select> </p> </card>

En el caso del <select> puede preseleccionar opciones. En el siguiente ejemplo, la variable I contendr los valores indicados por los elementos de tipo option separados por el carcter ";"

Presleccin

<card> <p> Selecciona tus actividades preferidas: <select name="X" iname="I" ivalue="1;2" multiple="true"> <option value="A">Lectura</option> <option value="B">Deporte</option> <option value="C">Ocio</option> </select> </p> </card>

En el siguiente ejemplo se utiliza el elemento <optgroup> para agrupar opciones

Agrupacin de opciones
<wml> <card id="card1" title="pais"> <p> Seleccione un pas: <select name="pas" multiple="true" tabindex="2"> <optgroup title="Europa"> <option value="esp">Espaa</option> <option value="ita">Italia</option> <option value="por">Portugal</option> </optgroup> <optgroup title="Amrica"> <option value ="arg">Argentina</option> <option value ="uru">Uruguay</option> <option value ="bra">Brasil</option> </optgroup> </select> </p> </card> </wml>

En el siguiente ejemplo, el campo <postfield>, permite enviar informacin al servidor indicado por "href" lo que en HTML sera equivalente a utilizar campos ocultos (tipo hidden).

Uso de PostField

<go method="get" href="http://midominio/asps/doLoan.asp"> <postfield name="importe" value="835000"/> <postfield name="porcentaje" value="7.2"/> <postfield name="tiempo" value="6"/> </go>

Cmo resultado del anterior ejemplo el servidor recibira la siguiente peticin:doLoan.asp?importe=835000&porcentaje=7.2&tiempo=6 Esta informacin podra ser recuperada en la pgina ASP con el cdigo: Request.querystring("importe") Request.querystring("porcentaje") Request.querystring("tiempo")

Enlaces
El elemento <anchor>equivale al tag <A> en HTML y habitualmente contendrn elementos de tipo <do>. A diferencia de estos ltimos, su activacin no se realiza con la pulsacin de las teclas de navegacin del mvil. Por ejemplo, <anchor> Volver <go href="#inicio"/ > </anchor> es equivalente a <a href="#inicio" > <br/>Volver</a>

Variables
En WML, puede se declaran las variables mediante un texto precedido del smbolo "$". Por ejemplo: $(nombre) Para asignar un valor a una variable se utiliza el elemento "setvar" del siguiente modo: <setvar name="location" value="$(X)"/ > Pueden ser manipuladas por WMLScript y utilizadas directamente en un documento WML del modo "Hola, $(nombre)"

Imgenes
La tecnologa WAP soporta la visualizacin de imgenes en formato denominado WBMP cuya caracterstica principal es el escaso consumo de bytes para hacer ms rpida su descarga. Para generar este tipo de imgenes puede utilizar el plug-in disponible para Adobe Photoshop as como utilizar el convertidor de BMP a WBMP que incorpora el software de Nokia. Para insertar una imagen se utiliza el elemento "img" como en HTML, puede especificarse atributos como espacio horizontal y vertical, alineacin y texto alternativo. A continuacin se detalla un ejemplo del elemento img <img src="bitmaps/moon.wbmp" alt="Moon" src="default.wbmp" space="1" vspace="1"/>

Formato del texto


WML proporciona mecanismos para formatear textos como negritas, itlica o subrayado.

Formato de texto
<wml> <card id="card1">

<p align="center"> <em>Muestra<u>de texto </u>formateado <i>por <strong>WML<br/> </strong></i> <b>Alex Morales</b></em> </p> </card> </wml>

WML tambin soporta tablas aunque stas no pueden anidarse.

Ejemplo de tablas

<wml> <card id="card1" title="Ejemplo de tabla"> <p> <table columns="3"> <tr> <td>Col1</td><td>Col2</td><td>Col3</td> </tr> <tr> <td>D11</td><td>D12</td><td>D13</td> </tr> <tr> <td>D21</td><td>D22</td><td>D23</td> </tr> <tr> <td>D31</td><td>D32</td><td>D33</td> </tr> <tr> <td>D41</td><td>D42</td><td>D43</td> </tr> </table> </p> </card> </wml>

En esta pgina:
WMLScript o Uso de WMLScript

WMLScript Uso de WMLScript


WMLScript (Wireless Markup Language Script) permite ejecutar procesos sobre los archivos WML en el propio cliente. Su utilizacin es indicada para validar datos introducidos por el usuario, acceder a funcionalidades del dispositivo (por ejemplo enviar mensajes, consultar la agenda de telfonos o los datos de la tarjeta de la operadora).

En el siguiente ejemplo se utilizan dos archivos uno WML y otro WMLS que contiene una sencilla funcin para sumar dos valores. Archivo WML de entrada de datos y visualizacin del resultado

Archivo WML
<?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="card1" title="Suma"> <p> Operando 1: <input format="*N" name="op1" title="operando 1:"/> <br/> Operando 2: <input format="*N" name="op2" title="Operando 2:"/> <br/> Resultado= <u>$(sumatorio)</u> <do type="accept" label="Sumar"> <go href="funciones.wmls#Suma('sumatorio','$(op1)','$ (op2)')"/> </do> </p> </card> </wml>

Archivo WMLS de funciones

Archivo WMLS
/* * Funcion Suma */ extern function Suma(varname, op1, op2) { var result = op1 + op2; // Se enva el resultado WMLBrowser.setVar(varname, s); // Se actualiza el card actual para mostrar el resultado WMLBrowser.refresh(); };

En esta pgina:
Aplicacin WAP: parte I o Ejemplo de aplicacin: Consulta de valores de la bolsa o Acceso y autentificacin o Include de conexin a BD y mantenimiento de la sesin

Aplicacin WAP: parte I Ejemplo de aplicacin: Consulta de valores de la bolsa

La aplicacin de ejemplo permite al usuario realizar el mantenimiento y la consulta de su cartera de valores de bolsa. Para ello se utiliza una base de datos (formato access .mdb) en la que se contemplan las tablas con las relaciones siguientes.

Entre las operaciones disponibles en la aplicacin figuran la consulta de los valores de la cartera del usuario, as como la compra y venta de valores. Una caracterstica comn en todas las pginas es la identificacin del tipo de informacin que el servidor web est enviando en este caso al servidor WAP. ASP permite esta identificacin mediante la instruccin <% Response.ContentType = "text/vnd.wap.wml" %>

Debern considerarse funcionalidades no se han tratado como controles de los formularios de entrada de datos o errores de acceso a la base de datos.

Acceso y autentificacin
En la pgina inicial del sistema (default.asp) se visualizan los campos de login o identificacin del usuario (en este caso el dni y un password).

Pgina: default.asp
<% Response.ContentType = "text/vnd.wap.wml" ' se inicializa la variable de sesin con un valor cualquiera ' para controlar el fin de sesion session("DNI")="acme" %> <?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="login" title="Mvil-bank"> <p> Bienvenido<br/> DNI: <input type="text" name="dni" maxlength="8"/> Password:<input type="password" name="password" maxlength="8"/> <do type="accept" label="Aceptar"> <go method="post" href="procesarlogin.asp"/> </do> </p> </card> </wml>

Cuando el usuario haya introducido su identificacin se envia al servidor la peticin de la pgina "procesarlogin.asp" que comprobar la existencia del usuario en la BD. En caso afirmativo se muestra el enlace a la pgina del men y en caso contrario se muestra un mensaje de usuario no autorizado.

Pgina: Procesar login

<% Response.buffer = true %> <%Response.ContentType = "text/vnd.wap.wml" %> <!--#include file="bd_init.asp" --> <?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <% Dim strSQL Dim cnn1 Dim rs Call CrearConexion() strSQL = "SELECT * FROM Cliente WHERE IdCliente='" & request.form("DNI") & "' AND password='" & request.form("password") & "'" rs.Open strSQL, cnn1 if rs.EOF then %> <card id="login" title="Mvil-bank"> <p> Datos incorrectos. Vulvelo a intentar <br/> <do type="prev" name="anterior" label="Anterior"> <prev/> </do> </p> </card> <% else %> <card id="home" title="Mvil-bank"> <p> Hola <%=rs("nombre")%> ! <anchor> Men <go href="menu.asp"/> </anchor> </p> </card> <% ' Inicializacin de las variables de sesin Session("DNI") = request.form("DNI") end if rs.Close cnn1.Close %> </wml>

Include de conexin a BD y mantenimiento de la sesin


En la pgina anterior as como en todas las siguientes, se utiliza la tcnica de incluir el archivo bd_init.asp que verifica la validez de la sesin e inicializa los objetos de acceso a base de datos que utilizan las pginas (connection y recordset). En caso de que la sesin haya finalizado (tpicamente por inactividad del cliente) se redirecciona de nuevo la pgina de inicio de la aplicacin "default.asp" Se utiliza el acceso mediante dsn por lo que deber crearse el correspondiente origen de datos ODBC de tipo Access a la base de datos bolsa.mdb con el nombre "wapbolsa".

Pgina: db_init.asp

<% Sub CrearConexion Dim strCnn ' Comprobar que la sesin est activa if session("DNI")= "" then response.clear response.redirect "default.asp" response.end end if ' Abrir la conexin strCnn = "DSN=wapBolsa" Set cnn1 = Server.CreateObject("ADODB.Connection") cnn1.Open strCnn 'Inicializacin del objeto Recordset Set rs = Server.CreateObject("ADODB.Recordset") End sub %>

En esta pgina:
Aplicacin WAP: parte II o Men de operaciones o Procesar Compra / Venta o Diseo y pruebas de la aplicacin o Material utilizado en este artculo

Aplicacin WAP: parte II Men de operaciones


En la pgina menu.asp se escriben 4 cards en el primero de ellos se muestran las opciones del men (Consultar cartera, Compra y Venta) y en los tres restantes el detalle de cada una de estas operaciones gracias a lo cual se minimizar el trfico (exceptuando la transaccin de compra / venta en Base de datos).

Fragmento 1: men

<% Response.buffer = true %> <% Response.ContentType = "text/vnd.wap.wml" %> <!--#include file="bd_init.asp" --> <?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <% Dim strSQL Dim cnn1 Dim rs Call CrearConexion() %>

<card id="inicio" title="Mvil-bank"> <p> Seleccione la operacin<br/> <do type="accept" label="Consultar cartera"> <go href="#opConsulta"/> </do> <do type="accept" label="Compra"> <go href="#opCompra"/> </do> <do type="accept" label="Venta"> <go href="#opVenta"/> </do> </p> </card>

En la Consulta de Cartera se seleccionan todos los valores del cliente identificado en la sesin y se construye una tabla en la que se muestra el nombre del valor, la cantidad de valores de que dispone el precio unitario y la tendencia del mercado (ascendente/ descendente o estable). Para esta ltima informacin se utilizan wbmp que han sido generados a partir de un archivo gif mediante la herramienta Nokia Wap Tookit.

Fragmento 2: Consuta de Cartera


<% '**** CONSULTAR CARTERA **** dim qt qt = chr(34) strSQL = "SELECT ClienteValor.IdCliente, Cliente.Nombre as NomCliente, Cliente.Apellido, ClienteValor.Cantidad, Valor.Nombre as NomValor, Valor.Importe, Valor.Tendencia FROM Valor INNER JOIN (Cliente INNER JOIN ClienteValor ON Cliente.IdCliente = ClienteValor.IdCliente) ON Valor.IdValor = ClienteValor.IdValor WHERE (((ClienteValor.IdCliente)= '"& session("DNI") & "'))" rs.Open strSQL, cnn1 if rs.EOF then <card id="opConsulta" title="Consultar Cartera"> <p> Cartera vaca <br/> <do type="accept" label="Compra"> <go href="#opcompra"/> </do> </p> </card> <% else %> <card id="opConsulta" title="Consultar Cartera"> <p> Cartera: <%=rs("NomCliente")%> &nbsp; <%=rs("Apellido") %> <table columns="4"> <tr> <td>Valor</td> <td></td> <td></td> <td></td> </tr> <% do while not rs.EOF

chr(10)

response.write "<tr><td>" & rs("NomValor") & "</td>" response.write "<td>" & rs("Cantidad") & "</td>" &

<% %>

response.write "<td>" & rs("Importe") & "</td>" & chr(10) response.write "<td><img src=" & qt & "tendencia" & rs("Tendencia") & ".wbmp" & qt & " alt=" & qt & rs("Tendencia") & qt & "/></td></tr>" & chr(10) rs.movenext loop response.write "</table>" %> <do type="accept" label="Venta"> <go href="#opventa"/> </do> <do type="accept" label="Compra"> <go href="#opcompra"/> </do> </p> </card> end if rs.Close

En la Compra de valores se consulta en la BD los valores existentes, mostrando en un objeto de tipo <select> su nombre y su importe. El usuario deber seleccionar uno de estos valores as como la cantidad que va a comprar. El formulario ser enviado a la pgina procesarcompra.asp que se describe ms adelante.

Fragmento 3: Compra de valores

<% '**** COMPRA DE VALORES ****

strSQL = "SELECT Valor.IdValor, Valor.Nombre, Valor.Importe FROM Valor" rs.Open strSQL, cnn1 %> <card id="opCompra" title="Compra de valores"> <p> Seleccione el valor y la cantidad a comprar <br/> <select title="valor" name="valor"> <% ' Mostrar los valores disponibles para comprar do while not rs.EOF response.write "<option value='" & rs("IdValor") & "'>" & rs("Nombre") & " - " & rs("Importe") & "</option>" rs.movenext loop rs.Close %> </select> Cantidad: <input type='text' name='cantidad' maxlength='4'/> <do type="accept" label="Hacer Compra"> <go method="post" href="procesarcompra.asp"/> </do> </p>

<p> <do type="accept" label="Consultar cartera"> <go href="#opConsulta"/> </do> <do type="accept" label="Venta"> <go href="#opVenta"/> </do> </p> </card>

En la Venta de valores se consulta en la BD los valores que tiene un usuario mediante un operacin JOIN de las tablas "Valor" y "ClienteValor". Como en el caso anterior, un objeto de tipo <select> mostrar su nombre y el nmero de valores de que dispone. El usuario deber seleccionar uno de estos valores as como la cantidad que va a vender (que no podr sobrepasar el nmero indicado anteriormente. El formulario ser enviado a la pgina procesarventa.asp que se describe ms adelante.

Fragmento 4: Venta de valores


<% '**** VENTA DE VALORES ****

&

strSQL = "SELECT ClienteValor.IdCliente, ClienteValor.IdValor, ClienteValor.Cantidad, Valor.Nombre FROM Valor INNER JOIN ClienteValor ON Valor.IdValor = ClienteValor.IdValor WHERE (((ClienteValor.IdCliente)='"& session("DNI") & "'))" rs.Open strSQL, cnn1 %> <card id="opVenta" title="Venta de valores"> <p> Seleccione el valor y la cantidad a Vender <br/> <select title="valor" name="valor"> <% ' Mostrar los valores disponibles para vender do while not rs.EOF response.write "<option value='" & rs("IdValor") & "'>" rs("Nombre") & " - " & rs("Cantidad") & "</option>" rs.movenext loop rs.Close %>

</select> Cantidad: <input type='text' name='cantidad' maxlength='4'/> <do type="accept" label="Hacer Venta"> <go method="post" href="procesarventa.asp"/> </do> </p> <p> <do type="accept" label="Consultar cartera"> <go href="#opConsulta"/> </do> <do type="accept" label="Compra"> <go href="#opCompra"/> </do>

<%

</p> </card>

cnn1.Close %> </wml>

Procesar Compra / Venta


En la pgina "procesarcompra.asp" deber actualizarse en la BD la peticin del usuario de compra de X unidades del valor Z. Para ello deber en primer lugar identificarse si tal valor ya existe en la cartera del usuario para ejecutar segn el caso la instruccin de SQL UPDATE o INSERT. Un mensaje de resultado de la operacin as como el elemento <anchor> que permite acceder de nuevo al men completan el <desk>> que genera esta pgina.

Pgina: Procesarcompra.asp

<% Response.buffer = true %> <% Response.ContentType = "text/vnd.wap.wml" %> <?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <!--#include file="bd_init.asp" --> <% Dim strSQL,strSQLAction Dim cnn1 Dim rs Call CrearConexion() strSQL = "SELECT ClienteValor.IdCliente, ClienteValor.IdValor, ClienteValor.Cantidad, Valor.IdValor, Valor.Nombre, Valor.Importe FROM Valor INNER JOIN ClienteValor ON Valor.IdValor = ClienteValor.IdValor WHERE (((ClienteValor.IdCliente)='" & session("dni") & "') AND ((ClienteValor.IdValor)='" & request.form("valor") & "'))" rs.Open strSQL, cnn1 if rs.eof then ' No existe el valor en la cartera del cliente --> INSERT INTO .. strSQLAction = "INSERT INTO ClienteValor (IdCliente, IdValor,Cantidad) " strSQLAction = strSQLAction & "VALUES ('" & Session("dni") & "'" strSQLAction = strSQLAction & ", '" & request.form("valor") & "'" strSQLAction = strSQLAction & ", " & request.form("cantidad") & ")" strSQL = "SELECT Valor.IdValor, Valor.Nombre, Valor.Importe FROM Valor WHERE idValor='" & request.form("valor") & "'" rs.Close rs.Open strSQL, cnn1 msg = "Nuevo valor " & rs("Nombre") & " a su cartera. Total acciones:" & request.form("cantidad") & " <br/> Se cargarn:" & rs("Importe") * request.form("cantidad") & "pts<br/>" else

' Ya existe el valor en la cartera del cliente --> UPDATE ... strSQLAction = "UPDATE ClienteValor SET cantidad = " & rs("cantidad") + request.form("cantidad") strSQLAction = strSQLAction & " WHERE idValor='" & request.form("valor") & "' AND idCliente='" & session("dni") & "'" msg = "Se han aadido " & request.form("cantidad") & " nuevas acciones de "& rs("Nombre") & " a su cartera<br/>Total acciones: " & rs("cantidad") + request.form("cantidad") & "<br/> Se cargarn:" & rs("Importe") * request.form("cantidad") & " pts<br/>" end if ' Se ejecuta la actualizacin de la BBDD segn strSQLAction cnn1.Execute strSQLAction %> <card id="procesarcompra" title="Mvil-bank"> <p> <% response.write msg %> <anchor> Men <go href="menu.asp"/> </anchor> </p> </card> rs.Close cnn1.Close %> </wml>

<%

Por ltimo, en la pgina "procesarventa.asp" deber actualizarse en la BD la peticin del usuario de venta de X unidades del valor Z. De manera similar a la operacin de compra, en este caso se debe comprobar que la cantidad a vender sea igual o inferior a la cantidad disponible en ese momento practicando la operacin de DELETE o UPDATE respectivamente.

Pgina: Procesarventa.asp

<% Response.buffer = true %> <% Response.ContentType = "text/vnd.wap.wml" %> <?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <!--#include file="bd_init.asp" --> <% Dim strSQL,strSQLAction Dim cnn1 Dim rs Call CrearConexion() strSQL = "SELECT ClienteValor.IdCliente, ClienteValor.IdValor, ClienteValor.Cantidad, Valor.IdValor, Valor.Nombre,Valor.Importe FROM Valor INNER JOIN ClienteValor ON Valor.IdValor =

ClienteValor.IdValor WHERE (((ClienteValor.IdCliente)='" & session("dni") & "') AND ((ClienteValor.IdValor)='" & request.form("valor") & "'))" rs.Open strSQL, cnn1 if cInt(rs("Cantidad")) = cInt(request.form("cantidad")) then ' Se eliminan todas las acciones del valor --> Borrar valor DELETE.. strSQLAction = "DELETE ClienteValor.* FROM ClienteValor WHERE (((ClienteValor.IdCliente)='" & session("dni") & "') AND ((ClienteValor.IdValor)='" & request.form("valor") & "'))" msg = "El valor " & rs("Nombre") & " ha sido eliminado .<br/> Se abonarn: " & rs("Importe") * request.form("cantidad") & " pesetas.<br/>" else ' Disminuyen las acciones del valor --> UPDATE... strSQLAction = "UPDATE ClienteValor SET cantidad = " & rs("cantidad") - request.form("cantidad") strSQLAction = strSQLAction & " WHERE idValor='" & request.form("valor") & "'AND idCliente='" & session("dni") & "'" msg = "Se han eliminado " & request.form("cantidad") & " acciones de "& rs("Nombre") & " de su cartera<br/>Total acciones: " & rs("cantidad") - request.form("cantidad") & "<br/> Se abonarn: " & rs("Importe") * request.form("cantidad") & " pesetas<br/>" end if ' Se ejecuta la actualizacin de la BBDD segn strSQLAction cnn1.Execute strSQLAction %> <card id="procesarventa" title="Mvil-bank"> <p> <% response.write msg %> <anchor> Men <go href="menu.asp"/> </anchor> </p> </card> <% rs.Close cnn1.Close

%> </wml>

Diseo y pruebas de la aplicacin


Antes de realizar las pginas en formato WML la aplicacin ha sido desarrollada y probada en formato HTML. En el proceso de pruebas deber disponerse de un gateway WAP y uno de los emuladores existentes en el mercado como por ejemplo Nokia Wap Tookit o WinWap pro. (ver direcciones de inters).

Material utilizado en este artculo


Descarga el cdigo utilizado en este artculo

En esta pgina:
Dispositivos WAP y portales o Dispositivos wap o Portales WAP

Dispositivos WAP y portales Dispositivos wap


Alcatel OneTouch Alcatel OneTouch 300 Alcatel OneTouch 500 Alcatel OneTouch 700 Benefon Twin Dual SIM Benefon Q WAP+HTML Bosch 1886 TriBand Bosch 820 Ericsson A2618 Ericsson R320 Ericsson R380 Ericsson R520 Ericsson T36 Mitsubishi GEO GPRS Motorola v2288 Motorola v2282 Motorola Accompli A6188 Motorola P7689 Motorola L7389 Motorola L708e Motorola L7389e Motorola i2000 Nokia 6250 Nokia 6210 Nokia 7110 Sagem MC 939 WAP Samsung SGH A110 Siemens P35 Siemens C35i Siemens M35i Siemens S25 Siemens IC35

Portales WAP
Directorio WAP Internacional http://elindice.com/WAP/Directorio/Internacional/ Directorio WAP Espaolhttp://elindice.com/WAP/Directorio/Espanol/

Guayhttp://www.guay.com/movil/index.wml Wap-Wap http://www.movired.com/wap-wap/index.html Wapeas http://www.wapeas.com/ Wapamente http://www.wapamente.com/indice2.html KeWAPo http://www.kewapo.com/index.asp Andanza http://www.andanza.com/ PortalWap http://portalwap.com/ Tv20 Terrassa http://Tvterrassa.com/wap iBrujula http://www.ibrujula.com Portal personalizado WAP

En esta pgina:
Direcciones de inters o Informacin general o Emuladores y herramientas wap o WAP y ASP

Direcciones de inters Informacin general


WAPes Wap forum Especificacin WML y WMLSCript Arquitectura WAP Especificaciones del Wap Forum Especificacin XML Phone.com WAP Overview Emulador WAP en el navegador Informacin sobre mbiles y tecnologa celular

Emuladores y herramientas wap

Emulador Wap UP.SDK 4.0 Beta 1 Navegador Wap WinWap 3.0 Nokia WAP Toolkit Audicode WAP Server WapLite WAP Server Ericsson toolkit Waptor 2.3 Editor y visualizador WML WAPman Visor WML para Windows Crear archivos WBMP. Plug-in para Photoshop/Painshop Convertiror a WBMP online Convertidor a WBMP

WAP y ASP
WAP and ASP - Part I WAP and ASP - Part II WAP an Introduction An Online Shopping Cart WAP Application using WML and ASP

También podría gustarte