ASP y WAP

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).

Card Menú
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.

Card Consulta de artera
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")%> &nbsp; <%=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.

Card Compra
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.

Card Procesar Compra
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.

Card Procesar venta
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

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO