Internet:nuevas formas de publicar tus tablas Fox

Por Alberto Rodriguez
© Copyrights 1997 by FoxPress, All rights reserved
FoxPress, Abril 1997

La publicación de información en Internet sigue siendo uno de los temas de actualidad. Ya no es la publicación estática sino la forma de transmitir la información guardada en las Bases de Datos a Internet de una forma fácil y asequible.

  En el número de Septiembre de 1996 de FoxPress ya se publicó una forma de mostrar información sacada de tablas .DBF usando NT 4.0 e Internet Information Server 2.0

  En ese artículo se mostraba una foma válida de publicitar información en Internet y que era el sistema que en esencia se utilizaba en www.datapress.com. La tecnología que se usaba se basaba en invocar a ficheros planos .IDC que recogían consultas de órdenes SQL que invocaban al ISAPI y posteriormente según unas plantillas que se guardaban en ficheros con la extensión .HTX se devolvía la información resultante al browser que la había solicitado

  Desde aquel número las cosas han evolucionado y se puede decir que aquella tecnología ha quedado ya obsoleta.

  En este número nos proponemos mostrar la forma de publicitar información en Internet usando la tecnología de Páginas de Servidor Activo (Active Server Pages), que vienen con el IIS 3.0 y utilizando dos técnicas: la primera, con el novedoso ActiveX Data Object (ADO), y la segunda acudiendo a OLE

  Para más adelante quedará otra forma de mostrar información en Internet como es el uso del FOXISAPI.DLL

Las Páginas Activas

 Microsoft ha introducido con la versión 3.0 del IIS un nuevo concepto llamado Páginas Activas, Pero, ¿qué son estas páginas? ¿Son realmente activas? Hagamos un poco de historia:

 Páginas de Contenido Estático

 En un principio las páginas tenían un contenido estático, es decir, debías cambiar manualmente el contenido de las páginas para que se pudiera mostrar un tipo diferente de información. En este modelo estático un browser usa el protocolo Hypertext Transport Protocol (HTTP) para solicitar una página HTML a un servidor Web. El Servidor recibe la petición y envía una página HTML al browser, que interpreta y muestra la página. Este modelo, aunque es válido, facilita una forma limitada de interactuar con la página Web ya que se debe cambiar manualmente la página HTML para poder modificar el contenido.

 Páginas HTML dinámicas

 Se consiguieron mediante el uso de gateways tales como el Common Gateway Interface (CGI), el Internet Server Application Programming Interface (ISAPI), etc... De esta manera un browser puede enviar una petición HTTP a una aplicación, que en realidad es un ejecutable, más que intentar dialogar con un archivo estático de formato HTML. El servidor ejecuta la aplicación, que lee los datos que se le solicitan y responde creando una página HTML con los datos solicitados. Esta nueva página HTML que se crea en ese momento se envía al browser. El problema de estos sistemas es que esos programas son difíciles de crear y cambiar. Los programas de tipo gateway no están integrados en las páginas HTML y requieren un proceso de creación diferente a los archivos HTML.

 Servidor Activo de Páginas

 Los Servidores Activos de Páginas son en realidad una colección de extensiones que se añaden al servidor HTTP y que hace que el código Visual Basic Script y Java Script de las páginas HTML sea traducido íntegramente a formato HTML.

 Al recibir una petición, el Servidor HTTP toma el fichero que tiene la extensión .ASP, comprueba si tiene algún tipo de código Visual Basic Script o Java Script y lo traduce a HTML, de forma que el código que entrega al browser es puro código HTML. El código Visual Basic Script o JavaScript no viajaría por la red sino sólo el código HTML.

 Un ejemplo de lo anterior es:

 Antes (con el IIS 2.0), si teníamos en la máquina servidor un fichero con el siguiente código:

 <HTML>
<HEAD>
<TITLE>Crea un 'Hello World' incrementando el tamaño</TITLE></HEAD>
<BODY BGCOLOR=#FFFFFF>
<%for i = 3 to 7 %>
      <FONT SIZE=<%= i %>>Hello World</FONT><BR>
<%next %>
<BR>
<BR>
</BODY>
</HTML>

 este mismo código viajaría por la red, y si el cliente remoto mira en la opción View/Source(Ver/Fuente) del Explorer se le mostraría exactamente el mismo código que tenemos en nuestro fichero. El browser lo ejecutaría –como hasta ahora. El problema que se presenta es que si el browser es Netscape no entendería el código Visual Basic Script.

 Con las páginas Activas, tenemos el mismo código fuente. Pero si el Servidor de HTTP comprueba que el fichero tiene la extensión .ASP traducirá todo el código VB Script o JavaScript a formato HTML. En nuestro ejemplo, traduciría el anterior código y entregaría el que se trascribe a continuación. Mirando en el Explorer (opción Ver/Fuente) pasaríamos a tener:

 <HTML>
<HEAD>
<TITLE>Crea un 'Hello World' incrementando el tamaño</TITLE></HEAD>
<BODY BGCOLOR=#FFFFFF>
      <FONT SIZE=3>Hello World</FONT><BR>

      <FONT SIZE=4>Hello World</FONT><BR>

      <FONT SIZE=5>Hello World</FONT><BR>

      <FONT SIZE=6>Hello World</FONT><BR>

      <FONT SIZE=7>Hello World</FONT><BR>

<BR>
<BR>
</BODY>
</HTML>

ActiveX Data Objects

 Una vez entendido lo que son las Páginas Activas, vamos a ver la forma de usar ActiveX Data Objects en un Servidor de Páginas Activas (ASP) para acceder a datos en una Base de Datos de Visual FoxPro.

 Requerimientos:

 Para poder probar los ejemplos que vamos a mostrar se necesita:

 Paso a Paso

  1. . Debemos crear un Origen de Datos de Sistema en el Administrador de ODBC en la máquina que tenga el IIS que indique la base de datos o la tabla sobre la que se tiene que trabajar.
  2. Teniendo seleccionada la pestaña System DSN escogemos la opción Add (Añadir).
  3. Teniendo seleccionado el driver de Visual FoxPro deberemos pulsar el botón de Finalizar y nos saldrá una en la que especificamos el nombre del Origen de Datos y la base de datos o tabla con la que se va a trabajar que en nuestro caso son:

 Origen de Datos:

ODBCfox51

Base de Datos:

VFP\Samples\tastrade\data\tastrade.dbc

4. A continuación, con cualquier editor o con el FrontPage97 creamos una página HTML que guardaremos con la extensión .ASP en el directorio IIS/wwwroot/scripts:

 <HTML>
<HEAD>
</HEAD>
<BODY>
<%

Set Conn =Server.CreateObject("ADODB.Connection")
Conn.Open "ODBCfox51"
Set RS = Conn.Execute("SELECT * FROM tastrade!customer")
Do While Not RS.EOF

%>

<%= RS("company_name") %>
<TR>
<%RS.MoveNext

Loop
RS.Close
Conn.Close
%>

</BODY>
</HTML>

El resultado lo veremos en el Explorer escribiendo la dirección:

 HTTP:// <nombre del Servidor HTTP>/Scripts/ejemp1.asp

  Y ya está.

  En el ejemplo anterior hemos definido de forma visual el Origen de Datos y luego lo hemos invocado.

 Otra forma de trabajar es definir el origen de datos desde dentro del código VB Script de la siguiente manera:

 Contenido de la página ASP
--------------------------

<%@ LANGUAGE="VBSCRIPT" %>
<HTML>
<HEAD>
<TITLE>VFP ASP ADO Test</TITLE>
</HEAD>
<BODY>
<H3>ActiveX Data Object (ADO)</H3>

<%

Set Conn = Server.CreateObject("ADODB.connection")
ConnStr= "Driver=Microsoft Visual Foxpro Driver; "+_"UID=;SourceType=DBC;SourceDB=C:\VFP\Samples\Tastrade\Data\Tastrade.dbc"

Conn.Open ConnStr 'Esto puede ser un datasource o una cadena de conexión
Set cmdTemp = Server.CreateObject("ADODB.Command")
Set rs = Server.CreateObject("ADODB.Recordset")
SQLText="Select Distinct Products.Product_ID,Products.Product_Name,"+ _

"Products.English_Name,Products.Unit_Price, " + _

"Products.Quantity_In_Unit from Tastrade!Products"
cmdTemp.CommandText = SQLText
cmdTemp.CommandType = 1 'Orden SQL
Set cmdTemp.ActiveConnection = Conn
rs.CacheSize = 10
rs.Open cmdTemp,,adopenstatic
%>

<P>
<TABLE BORDER=1>
<TR>
<% For i = 0 to RS.Fields.Count - 1 %>
<TD><B><% = RS(i).Name %></B></TD>
<% Next %>
</TR>
<% Do While Not RS.EOF %>
<TR>
<% For i = 0 to RS.Fields.Count - 1 %>
<TD VALIGN=TOP><% = RS(i) %></TD>
<% Next %>
</TR>

<%

RS.MoveNext
Loop
RS.Close
Conn.Close
%>
</TABLE>
<BR>
<BR>
</BODY>
</HTML>

 En este ejemplo hemos usado los objetos del ADO llamados:

 Para más información sobre el uso de esos objetos me remito a la documentación

Usando OLE para mostrar información en Internet

 Visual FoxPro 5.0 es un servidor OLE, lo que quiere decir que puede ser invocado por cualquier cliente OLE para pedirle información. Esta petición se puede hacer incluso –faltaría más– a través de Internet.

 La poderosa orden createobject() nos permite crear una instancia de la aplicación tanto en la máquina cliente como en un Servidor de nuestra red local como en Internet.

  Desde cualquier aplicación cliente OLE podemos crear una instancia de VFP 5.0 con la orden:

 CREATEOBJECT(VisualFoxPro.application)

 y cambiar propiedades e invocar métodos.

 El siguiente código:

 x1 = ; CreateObject("VisualFoxPro.Application")

? x1.application.name

 nos devolvería: Visual FoxPro

  Pero no sólo VFP es un Servidor OLE sino que las aplicaciones que nosotros realicemos también serán –si así lo especificamos– Servidoras OLE.

  El siguiente código –que ya apareció en un número anterior de FoxPress– nos permite crear un Servidor OLE:

 DEFINE CLASS persona AS CUSTOM OLEPUBLIC

Nombre = "Pepe"
Apellidos = "García"

PROCEDURE DarNombre
RETURN this.Nombre + " "+ This.Apellidos
ENDPROC

ENDDEFINE

Una vez compilado y autoregistrado, desde la ventana de órdenes del cliente se podría escribir:

ox = CREATE ("prueba.personas")
? ox.nombre

que nos devolvería la palabra Pepe

En el ejemplo que se va a mostrar se trata de usar esta técnica para publicitar los datos de una Tabla en Internet.

Paso a Paso

 

  1. Creamos en VFP 5.0 un nuevo proyecto
  2. Creamos un programa que vamos a llamar INICIO.PRG y escribimos el siguiente código: *Hola boy
  3. Creamos una tabla que vamos a llamar Clientes con los campos nombre y Cod_Cli y la dejamos en el directorio c:\tmp
  4. Creamos una clase tipo custom que vamos a llamar base y le añadimos un método nuevo que vamos a llamar Petición. En este método trascribe el siguiente código:

    set default to c:\tmp
    SELECT * FROM clientes into cursor cursor1
    cHTML = ""
    FOR i = 1 to _Tally
    cHTML = cHTML + AllTrim(cursor1.nombre) + Chr(10)
    cHTML = cHTML + AllTrim(cursor1.cod_cli) + Chr(10)
    cHTML = cHTML + "<P><BL>"
    skip
    endfor
    Return cHTML

  5. Vamos al menú Classes y en el submenú Class info marcamos la opción OLE Public.
  6. Hacemos un ejecutable de formato .EXE y lo guardamos como proj1.exe.
  7. Para que el IIS sea capaz de invocar al Servidor de Automatización de VFP es necesario especificar algunas propiedades Distributed COM (DCOM) del Servidor. Desde el botón de Inicio de Win95 ejecutamos un programa que se llama dcomcnfg, y localizamos la clase base dentro de la pestaña Aplicaciones. Teniendo seleccionada esta clase, pulsamos el botón Propiedades y nos vamos a la pestaña Identidad y nos aseguramos de que queda marcada la opción "el usuario interactivo.
  8. Vamos a la pestaña Seguridad y escogemos el primer botón en el que figura "Edit Default". Esto nos mostrará una lista de todos los usuarios que pueden leer el Registry. Nos aseguramos de que en esa lista figura <Nombre de la Máquina>\IUSR-<Nombre de la Máquina> permitiendo el acceso. Este usuario es el usuario Anónimo para IIS.
  9. Si este usuario no está en la lista escogemos Añadir. Seleccionamos el nombre de nuestra máquina de la lista de nombres, escogemos Mostrar Usuarios, seleccionamos IUSR <Nombre de la máquina> en la lista y escogemos Añadir. El tipo de acceso debería ser de Allow Access. Después escogemos Aceptar
  10. Vamos a la pestaña Seguridad y escogemos el segundo botón en el que figura "Edit Default". Esto nos mostrará una lista de todos los usuarios que pueden ejecutar aplicaciones. Nos aseguramos de que en esa lista figura <Nombre de la Máquina>\IUSR-<Nombre de la Máquina> permitiendo lanzar aplicaciones.
  11. Creamos un fichero que vamos a llamar main.asp y escribimos:

<HTML>
<HEAD>
<TITLE>Consulta de Clientes</TITLE>
</HEAD>
<BODY>
<%
' Se usa VFP como Servidor de Automatización OLE para obtener información de los clientes
Set CustObj = CreateObject("proj1.base")
x = CustObj.peticion
Response.Write x%></font></h2>
</BODY>
</HTML>

 Nota: es especialmente importante la línea:

 SET DEFAULT TO C:\TMP

Ya que cuando se registra en Windows el Servidor OLE queda por defecto en el directorio System32.

Espero que estos dos sistemas nos faciliten la forma de mostrar los datos de Internet.

 

Alberto Rodríguez es socio de Fox Software, S.L. y se puede entrar en contacto con él en alb@datapress.com