Programación en castellano
Inicio > Tutoriales > Internet > ASP > ASP y WAP
-Tutoriales

ASP y WAP


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

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

 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados