Asp y WAP
-
Upload
karen-liceth-g -
Category
Documents
-
view
16 -
download
1
Transcript of Asp y WAP
Indice de contenidos
Introducción o ¿Qué es WAP? o Aplicaciones
Consideraciones técnicas o Introducción o Emuladores WAP o WML
Descripción de los elementos WML I o <deck> y <card> o <do> o <timer> o <template>
Descripción de los elementos WML II o Introducción de datos o Enlaces o Variables o Imágenes o Formato del texto
WMLScript o Uso de WMLScript
Aplicación WAP: parte I o Ejemplo de aplicación: Consulta de valores de la bolsa o Acceso y autentificación o Include de conexión a BD y mantenimiento de la sesión
Aplicación WAP: parte II o Menú de operaciones o Procesar Compra / Venta o Diseño y pruebas de la aplicación o Material utilizado en este artículo
Dispositivos WAP y portales o Dispositivos wap o Portales WAP
Direcciones de interés o Información general o Emuladores y herramientas wap o WAP y ASP
En esta página:
Introducción o ¿Qué es WAP?
o Aplicaciones
Introducción
¿Qué es WAP?
WAP recibe el nombre de Wireless Application Protocol y es un nuevo protocolo que permite acceder a Internet desde un teléfono móvil cómo si se tratase de un navegador.
Aplicaciones
El tamaño del dispositivo y la movilidad son los dos puntos fuertes que avalan el éxito de esta tecnología 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 fotografías de nuestro próximo 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 serán algunos de los servicios que esta tecnología ya está explotando. En el futuro, se abre además un interesante abanico de posibilidades en el terreno del comercio electrónico, ya que el teléfono móvil por si solo podría ofrecer mecanismos de seguridad y pago electrónico como si se tratase de una tarjeta de crédito.
En esta página:
Consideraciones técnicas o Introducción o Emuladores WAP
o WML
Consideraciones técnicas
Introducción
WAP se basa en el uso de protocolos y conceptos de Internet aplicados para el acceso a información y servicios mediante el teléfono móvil.
La especificación en la que se basa la tecnología WAP está desarrollada por el Forum Wap (http://www.wapforum.com) en la que forman parte las empresas más representativas de la telefonía móvil.
De manera similar a la arquitectura de capas en la que se basan las redes de ordenadores, WAP utiliza la especificación denominada WML (Wireless Markup Language) para enviar y recibir los datos entre el servidor y el móvil 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 telefonía móvil WMLScript, y permitirá realizar validación de datos y otros procesos del cliente mediante un sencillo lenguaje de script.
En la siguiente captura (extraída de la Guía de desarrollo de Nokia Wap Toolkit) se detalla la equivalencia de los protocolos WAP y de Internet.
Modelo de operación WAP (extraído de la guía de desarrollo de Nokia Wap Toolkit)
1. Petición de una URL 2. El dispositivo (móvil) envía 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 petición HTTP es procesada por el servidor WEB. Puede tratarse de una
petición estática 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 página, y tras su verificación la convierte a formato
binario que será enviado al móvil. 7. El móvil 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 dirección de Nokia http://www.nokia.com
Para su ejecución 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 información de la sesión. Además cuenta con un emulador gráfico de un teléfono móvil wap con el que podrá interactuar con los archivos wml generados.
En la captura se visualiza el emulador gráfico de teléfono móvil. Con los botones centrales, puede realizar desplazamiento (scroll) vertical mientras que los botones laterales permiten realizar la acción 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 sintácticamente correcto. Se trata de un lenguaje case sensitive y los atributos deben estar en minúsculas.
Por ejemplo:
<tag atributo1="valor1"> contenido </tag> <tag/> elemento vacío (sin contenido)
Como cualquier documento XML necesita un archivo DTD que determine las reglas de diseño del documento una información que se indica en la línea:
<!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="Móvil-bank"> <p> <img src="logoasp.wbmp" alt="logo"/> Bienvenido al primer banco que opera por el móvil 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 acción en el primer desk --> <do type="prev" name="anterior"> <noop/> </do> </p> </card>
<card id="inicio" title="Móvil-bank"> <p> <do type="accept" label="Consultar saldo"> <go href="#opConsulta"/> </do> <do type="accept" label="Transferencia"> <go href="#opTransferencia"/> </do> Seleccione la operación 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 página de <b>transferencias</b><br/> <anchor> Volver <go href="#inicio"/> </anchor> </p> </card></wml>
Las siguientes imágenes muestran algunos ejemplos del documento WML anterior
Card inicio Menú de Opciones
Card de la operación consulta Card de la operación Transferencia
En esta página:
Descripción de los elementos WML I o <deck> y <card> o <do> o <timer>
o <template>
Descripción 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 múltiples elementos <card>.
Para minimizar el tráfico, el teléfono, descargará el documento WML completamente, sin embargo tan solo visualizará un elemento <card> cada vez.
<card>
Este elemento especifica un bloque de información visualizable en pantalla por ejemplo un texto o un menú de opciones. Puede contener <onevent>, <timer> y bloques <p> o <do>
Ejemplo de documento básico <?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 navegación a otros elementos card. El atributo "type" especifica la acción que deberá ejecutarse y típicamente toma el valor de "accept" para mostrar una opción accesible mediante la pulsación de la tecla de función.
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 selección 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 continuación. (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 página:
Descripción de los elementos WML II o Introducción de datos o Enlaces o Variables o Imágenes
o Formato del texto
Descripción de los elementos WML II
Introducción de datos
De modo equivalente a los elementos de tipo form de HTML, WML contempla la introducción de datos por parte del usuario, gracias a los elementos <input> para la introducción de texto por teclado y <select> para mostrar una lista de opciones.
Para el elemento input pueden definirse caracteres máximos 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 opción 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"> Cotización 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 carácter ";"
Preslección <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
Agrupación de opciones <wml><card id="card1" title="pais"> <p> Seleccione un país: <select name="país" multiple="true" tabindex="2"> <optgroup title="Europa"> <option value="esp">España</option> <option value="ita">Italia</option> <option value="por">Portugal</option> </optgroup> <optgroup title="América"> <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 información al servidor indicado por "href" lo que en HTML sería 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>
Cómo resultado del anterior ejemplo el servidor recibiría la siguiente petición:doLoan.asp?importe=835000&porcentaje=7.2&tiempo=6
Esta información podría ser recuperada en la página ASP con el código:
Request.querystring("importe")Request.querystring("porcentaje")Request.querystring("tiempo")
Enlaces
El elemento <anchor>equivale al tag <A> en HTML y habitualmente contendrán elementos de tipo <do>. A diferencia de estos últimos, su activación no se realiza con la pulsación de las teclas de navegación del móvil.
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 símbolo "$". 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)"
Imágenes
La tecnología WAP soporta la visualización de imágenes en formato denominado WBMP cuya característica principal es el escaso consumo de bytes para hacer más rápida su descarga.
Para generar este tipo de imágenes 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, alineación y texto alternativo.
A continuación 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, itálica 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 también 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 página:
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 utilización es indicada para validar datos introducidos por el usuario, acceder a funcionalidades del dispositivo (por ejemplo enviar mensajes, consultar la agenda de teléfonos 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 función para sumar dos valores.
Archivo WML de entrada de datos y visualización 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 envía el resultado WMLBrowser.setVar(varname, s); // Se actualiza el card actual para mostrar el resultado WMLBrowser.refresh(); };
En esta página:
Aplicación WAP: parte I o Ejemplo de aplicación: Consulta de valores de la bolsa o Acceso y autentificación
o Include de conexión a BD y mantenimiento de la sesión
Aplicación WAP: parte I
Ejemplo de aplicación: Consulta de valores de la bolsa
La aplicación 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 aplicación figuran la consulta de los valores de la cartera del usuario, así como la compra y venta de valores.
Una característica común en todas las páginas es la identificación del tipo de información que el servidor web está enviando en este caso al servidor WAP. ASP permite esta identificación mediante la instrucción
<% Response.ContentType = "text/vnd.wap.wml" %>
Deberán 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 autentificación
En la página inicial del sistema (default.asp) se visualizan los campos de login o identificación del usuario (en este caso el dni y un password).
Página: default.asp <% Response.ContentType = "text/vnd.wap.wml"' se inicializa la variable de sesión con un valor cualquiera' para controlar el fin de sesionsession("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="Móvil-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 identificación se envia al servidor la petición de la página "procesarlogin.asp" que comprobará la existencia del usuario en la BD. En caso afirmativo se muestra el enlace a la página del menú y en caso contrario se muestra un mensaje de usuario no autorizado.
Página: 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="Móvil-bank"> <p> Datos incorrectos. Vuélvelo a intentar <br/> <do type="prev" name="anterior" label="Anterior">
<prev/> </do> </p> </card><% else %> <card id="home" title="Móvil-bank"> <p> Hola <%=rs("nombre")%> ! <anchor> Menú <go href="menu.asp"/> </anchor> </p> </card><% ' Inicialización de las variables de sesión Session("DNI") = request.form("DNI") end if rs.Close cnn1.Close%></wml>
Include de conexión a BD y mantenimiento de la sesión
En la página anterior así como en todas las siguientes, se utiliza la técnica de incluir el archivo bd_init.asp que verifica la validez de la sesión e inicializa los objetos de acceso a base de datos que utilizan las páginas (connection y recordset).
En caso de que la sesión haya finalizado (típicamente por inactividad del cliente) se redirecciona de nuevo la página de inicio de la aplicación "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".
Página: db_init.asp <%Sub CrearConexion Dim strCnn
' Comprobar que la sesión está activa if session("DNI")= "" then response.clear response.redirect "default.asp" response.end end if
' Abrir la conexión strCnn = "DSN=wapBolsa" Set cnn1 = Server.CreateObject("ADODB.Connection") cnn1.Open strCnn 'Inicialización del objeto Recordset Set rs = Server.CreateObject("ADODB.Recordset") End sub%>
En esta página:
Aplicación WAP: parte II o Menú de operaciones o Procesar Compra / Venta o Diseño y pruebas de la aplicación
o Material utilizado en este artículo
Aplicación WAP: parte II
Menú de operaciones
En la página 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 tráfico (exceptuando la transacción 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="Móvil-bank"> <p> Seleccione la operación<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 sesión 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 información 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 vacía <br/> <do type="accept" label="Compra"> <go href="#opcompra"/> </do> </p> </card><% else %> <card id="opConsulta" title="Consultar Cartera"> <p> Cartera: <%=rs("NomCliente")%> <%=rs("Apellido") %> <table columns="4"> <tr> <td>Valor</td> <td></td> <td></td> <td></td> </tr> <% do while not rs.EOF response.write "<tr><td>" & rs("NomValor") & "</td>" response.write "<td>" & rs("Cantidad") & "</td>" & chr(10) 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 página procesarcompra.asp que se describe más 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 operación JOIN de las tablas "Valor" y "ClienteValor". Como en el caso anterior, un objeto de tipo <select> mostrará su nombre y el número 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 número indicado anteriormente.
El formulario será enviado a la página procesarventa.asp que se describe más 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 página "procesarcompra.asp" deberá actualizarse en la BD la petición 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 según el caso la instrucción de SQL UPDATE o INSERT. Un mensaje de resultado de la operación así como el elemento <anchor> que permite acceder de nuevo al menú completan el <desk>> que genera esta página.
Página: 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 cargarán:" & 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 añadido " & request.form("cantidad") & " nuevas acciones de "& rs("Nombre") & " a su cartera<br/>Total acciones: " & rs("cantidad") + request.form("cantidad") & "<br/> Se cargarán:" & rs("Importe") * request.form("cantidad") & " pts<br/>" end if ' Se ejecuta la actualización de la BBDD según strSQLAction cnn1.Execute strSQLAction%> <card id="procesarcompra" title="Móvil-bank"> <p> <% response.write msg %> <anchor> Menú <go href="menu.asp"/>
</anchor> </p> </card><% rs.Close cnn1.Close %></wml>
Por último, en la página "procesarventa.asp" deberá actualizarse en la BD la petición del usuario de venta de X unidades del valor Z. De manera similar a la operación 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 operación de DELETE o UPDATE respectivamente.
Página: 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 abonarán: " & 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 abonarán: " & rs("Importe") * request.form("cantidad") & " pesetas<br/>" end if ' Se ejecuta la actualización de la BBDD según strSQLAction cnn1.Execute strSQLAction%> <card id="procesarventa" title="Móvil-bank"> <p> <% response.write msg %> <anchor> Menú <go href="menu.asp"/> </anchor> </p> </card><% rs.Close cnn1.Close %></wml>
Diseño y pruebas de la aplicación
Antes de realizar las páginas en formato WML la aplicación 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 interés).
Material utilizado en este artículo
Descarga el código utilizado en este artículo
En esta página:
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 Españolhttp://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 página:
Direcciones de interés o Información general o Emuladores y herramientas wap
o WAP y ASP
Direcciones de interés
Información general
WAPes
Wap forum
Especificación WML y WMLSCript
Arquitectura WAP
Especificaciones del Wap Forum
Especificación XML
Phone.com WAP Overview
Emulador WAP en el navegador
Información sobre móbiles y tecnología 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