Universidad de Colima Facultad de Telemática "INTEGRACIÓN DE BASES DE DATOS EN INTERNET " TESIS PARA LA OBTENCIÓN DEL GRADO DE: MAESTRO EN CIENCIAS, ÁREA TELEMÁTICA PRESENTA ING. CÉSAR EUGENIO OLMOS DÍAZ ASESOR M.C. JESÚS ALBERTO VERDUZCO RAMÍREZ COLIMA, COL. NOVIEMBRE DE 1999. Resumen RESUMEN El Web es un medio para localizar, enviar o recibir información de diversos tipos. En el ámbito competitivo, es esencial conocer las ventajas que esta vía electrónica proporciona para presentar la información, reduciendo costos y el almacenamiento de la información, y aumentando la rapidez de difusión de la misma. Internet provee de un formato de presentación dinámico para ofrecer campañas y mejorar negocios, además de que permite acceder a cada sitio alrededor del mundo, con lo cual se incrementa el número de personas a las cuales llega la información. Una gran porción de dicha información requiere de un manejo especial, y puede ser provista por bases de datos. En el pasado, las bases de datos sólo podían utilizarse al interior de las instituciones o en redes locales, pero actualmente el Web permite acceder a bases de datos desde cualquier parte del mundo. Estas ofrecen, a través de la red, un manejo dinámico y una gran flexibilidad de los datos, como ventajas que no podrían obtenerse a través de otro medio informativo. El presente trabajo analiza las tecnologías de acceso a base de datos más conocidas, como son JDBC, CGI y ASP, mediante características comunes que permitan tener un mejor criterio de evaluación, como es: acceso a Internet, programación , procesamiento y seguridad. Así mismo se presenta un caso práctico a fin de poner a disposición del lector el código fuente de una pequeña aplicación Internet con acceso a base de datos, así como una descripción de las consideraciones necesarias para desarrollar una aplicación de este tipo. Finalmente se analizan las consideraciones del entorno donde se implantará las aplicaciones Internet. I Summary SUMMARY The web is a resource of finding, sending or receiving different kinds of information. It is essencial to know the adventages that this electronic tool gives to present the information, reducing costs and saving information as well as the increase of swiftness to diffuse it in a competetive area. Internet provides the dynamic presentation format to offer campaigns and improve business besides it lets access to every site around the world which permits the number of people who receive information increases. A great part of information requires a special manage and it can be provided by a data base. In the past, data bases were exclusively used into the institutions or local nets, but at the present time, the web permits access to data basic from any part of the word. They offer a dynamic manage and a large flexibility of data through the net. These adventages are not possible by other informative mean. The present work analyzes the most known access technologies to data basis like JDBC, CGI and ASP. This work is done according to the most common characteristics that permit to have a better evaluation criterios such as the access to internet, programming, processing and safety. Likewise, it is presented a practical case with the purpose that the reader can have a source code available of a small internet application with access to data basis such as a description of the necessary considerations to develop an application of this type. Finally, the consideration of the surrounding where the internet applications will be set are analyzed. II Contenido CONTENIDO 1 Introducción 1.1 ¿Por qué utilizar bases de datos en el Web? 1 1.1.1 Seguridad 2 1.1.2 Integración de bases de datos en el Web 3 1.1.2.1 ¿Cómo funciona la integración de bases de datos en 4 el Web? 1.1.2.2 Categorización de Interfaces Web/DBMS 5 1.2 Motivaciones del trabajo 7 1.3 Objetivo 8 1.3.1 Objetivo general 8 1.3.2 Objetivos específicos 8 1.4 Justificación 9 1.5 Alcances 10 1.5.1 Teóricos 10 1.5.2 Prácticos 11 1.6 Resultados esperados 11 1.7 Impacto socio-econónico 11 1.8 Metodología 12 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas de Internet 2.1 Conectividad de bases de datos Java (JDBC) 13 2.1.1 Definición 13 2.1.2 JDBC sobre Internet 14 2.1.3 Para programadores 15 III Contenido 2.1.4 Procesamiento 16 2.1.5 Seguridad 17 2.1.6 Resumen 17 2.2 Desarrollo de páginas dinámicas con Common Gateway Interfase 18 (CGI) 2.2.1 Definición 18 2.2.2 CGI sobre Internet 18 2.2.3 Para programadores 20 2.2.4 Procesamiento 23 2.2.5 Seguridad 23 2.2.6 Resumen 24 2.3 Active Server Pages (ASP). 26 2.3.1 Definición 26 2.3.2 ASP sobre Internet 26 2.3.3 Para programadores 27 2.3.4 Procesamiento 29 2.3.5 Seguridad 29 2.3.6 Resumen 30 2.4 Selección y justificación de herramienta de desarrollo 31 3. Acceso a bases de datos con Active Server Pages 3.1 Objetos y componentes 35 3.2 El archivo GLOBAL.ASA 36 3.3 Objetos de Active Server Pages 38 3.3.1 Objeto Application 38 3.3.2 Objeto Session 40 3.3.3 Objeto Request 42 3.3.4 Objeto Response 46 3.3.5 Objeto Server 49 IV Contenido 3.4 Componentes de Active Server Pages 4. 49 3.4.1 Componentes de acceso a bases de datos 50 3.4.2 Componentes de acceso a archivos 56 3.4.3 Componente capacidad del navegador 58 3.4.4 Componente Ad Rotator 61 3.4.5 Componente de vinculación de contenidos 62 3.4.6 Empleo de otros componentes ActiveX 63 Consideraciones de implementación y desarrollo de una aplicación 4.1 4.2 4.3 Consideraciones en diseño de bases de datos para Internet 64 4.1.1 Seguridad 64 4.1.2 Integridad de la base de datos 64 4.1.3 Control de acceso 65 Consideraciones en la definición de tablas de la base de datos 66 4.2.1 Evitar la redundancia de datos 66 4.2.2 Indexar las tablas 66 4.2.3 Utilizar restricciones referenciales 66 4.2.4 Preservación de la integridad de los datos 67 Aplicación de control de inventario en la Administración Regional 68 Jurídica de Ingresos de Occidente 4.3.1 Objetivo 68 4.3.2 Infraestructura utilizada 68 4.3.3 Manejador de base de datos 68 4.4 Descripción de la aplicación de control de insumos 70 4.4.1 Entrada de datos 72 4.4.2 Reportes 74 5. Elección de la tecnología más adecuada V Contenido 5.1 Consideraciones sobre la plataforma cliente 81 5.2 Compatibilidad con HTML 82 5.3 Compatibilidad con HTML Dinámico 83 5.4 Compatibilidad con programación 84 5.5 Compatibilidad con ActiveX 84 5.6 Java 85 5.7 Consideraciones del lado del servidor 85 6. Conclusiones 87 APENDICE A.- Propiedades y métodos de los objetos y 88 componentes Active Server Pages APENDICE B.- Base de datos insumos 98 APENDICE C.- Código fuente de aplicación de control de insumos 101 APENDICE D.- Glosario de términos de Internet 114 BIBLIOGRAFÍA 119 VI Contenido de tablas y figuras ÍNDICE DE TABLAS Tabla 2-1. Características de JDBC 31 Tabla 2-2. Características de CGI 32 Tabla 2-3. Características de ASP 33 Tabla 2-4. Comparación de JDBC, CGI, ASP 34 ÍNDICE DE FIGURAS Figura 1-1. Acceso a datos vía CGI. Figura 4-1. Página de la Administración Regional Jurídica de 4 70 Ingresos de Occidente. Figura 4-2. Capítulo de Informática de la Página de la 71 Administración Regional Jurídica de Ingresos de Occidente. Figura 4-3. Control de Acceso a usuarios. 71 Figura 4-4. Registro de movimientos al inventario. 73 Figura 4-5. Inventario Regional de Jurídica de Ingresos de 75 Occidente. Figura 4-6. Impresión de Insumos. 75 Figura 4-7. Impresión de Movimientos. 76 VII 1. Introducción 1 INTRODUCCIÓN 1.1 ¿POR QUÉ UTILIZAR BASES DE DATOS EN EL WEB? El Web es un medio para localizar, enviar o recibir información de diversos tipos. En el ámbito competitivo, es esencial conocer las ventajas que esta vía electrónica proporciona para presentar la información, reduciendo costos y el almacenamiento de la información, y aumentando la rapidez de difusión de la misma. Internet provee de un formato de presentación dinámico para ofrecer campañas y mejorar negocios, además de que permite acceder a cada sitio alrededor del mundo, con lo cual se incrementa el número de personas a las cuales llega la información. Millones de personas alrededor del mundo hacen uso de Internet, lo cual demuestra el enorme potencial que esta red ha alcanzado, con lo cual se puede decir que en un futuro no muy lejano, será el principal medio de comunicación utilizado para distintos fines. Pero, no sólo es una vía para hacer negocios, sino también una gran fuente de información, siendo éste uno de los principales propósitos con que fue creada. Una gran porción de dicha información requiere de un manejo especial, y puede ser provista por bases de datos. En el pasado, las bases de datos sólo podían utilizarse al interior de las instituciones o en redes locales, pero actualmente el Web permite 1 1. Introducción acceder a bases de datos desde cualquier parte del mundo. Estas ofrecen, a través de la red, un manejo dinámico y una gran flexibilidad de los datos, como ventajas que no podrían obtenerse a través de otro medio informativo. 1.1.1 SEGURIDAD La evaluación de este punto es uno de los más importantes en la interconexión del Web con bases de datos. A nivel de una red local, se puede permitir o impedir, a diferentes usuarios el acceso a cierta información, pero en la red mundial de Internet se necesita de controles más efectivos en este sentido, ante posible espionaje, copia de datos, manipulación de éstos, etc. La identificación del usuario es una de las formas de guardar la seguridad, y permitiendo el acceso a distintos campos de una base de datos, solamente a usuarios autorizados para ello. En este sentido, los datos pueden ser presentados a través del Web de una forma segura, y con mayor impacto en todos los usuarios de la red mundial. Para la integración de bases de datos en el Web es necesario contar con un programa que realice las conexiones, extraiga la información de la base de datos, le dé un formato adecuado de tal manera que puede ser visualizada desde un navegador del Web, y permita lograr sesiones interactivas entre ambos, dejando que el usuario haga elecciones de la información que requiere. 2 1. Introducción 1.1.2 INTEGRACIÓN DE BASES DE DATOS EN EL WEB En la actualidad, muchas organizaciones se han dado cuenta de la importancia que el Web tiene en el desarrollo de sus potencialidades, ya que con ello pueden lograr una mejor comunicación con personas o instituciones situadas en cualquier lugar del mundo. Gracias a la conexión con la red mundial Internet, poco a poco, cada individuo o institución va teniendo acceso a mayor cantidad de información de las diversas ramas de la ciencia. La mayor parte de información es presentada de forma estática a través de documentos HTML (siglas de HyperText Markup Language), lo cual limita el acceso a los distintos tipos de almacenamiento en que ésta pueda encontrarse. Pero, en la actualidad surge la posibilidad de utilizar aplicaciones que permitan acceder a información de forma dinámica, tal como a bases de datos, con contenidos y formatos muy diversos. Una de las ventajas de utilizar el Web para este fin, es que no existen restricciones en el sistema operativo utilizado, permitiendo la conexión entre si, de las páginas Web desplegadas en un navegador del Web que funciona en una plataforma, con servidores de bases de datos alojados en otras plataformas. Además, no hay necesidad de cambiar el formato o estructura de la información dentro de las bases de datos. 3 1. Introducción 1.1.2.1 ¿Cómo funciona la integración de bases de datos en el Web? Para realizar una requisición de acceso desde el Web hasta una base de datos no sólo se necesita de un navegador del Web y de un servidor Web, sino también de un software de procesamiento (aplicación CGI siglas de Common Gateway Interface), el cual es el programa que es llamado directamente desde un documento HTML en el cliente. Dicho programa lee la entrada de datos que provienen del cliente y toma cierta información de variables de ambiente. El método usado para el paso de datos está determinado por la llamada CGI. Una vez que se reciben los datos de entrada (sentencias SQL siglas de Structured Query Language o piezas de ellas), el software de procesamiento los prepara para enviarlos a la interfaz en forma de SQL, y luego ésta procesa los resultados que se extraen de la base de datos. Navegador Web Servidor HTTP Información Introducida por el usuario Formulario HTML Interfaz de gateway común Autentificación del usuario Información Introducida por el usuario Lista de acceso Programa gateway Fig. 1-1. Acceso a datos vía CGI 4 1. Introducción La interfaz contiene las especificaciones de la base de datos necesarias para traducir las solicitudes enviadas desde el cliente, a un formato que sea reconocido por dicha base. Además, contiene toda la información, estructuras, variables y llamadas a funciones, necesarias para comunicarse con la base de datos. El software de acceso usualmente es el software distribuido con la base de datos, el cual permite el acceso a la misma, a través de solicitudes con formato. Luego, el software de acceso recibe los resultados de la base de datos, aún los mensajes de error, y los pasa hacia la interfaz, y ésta a su vez, los pasa hasta el software de procesamiento. Cualquier otro software (servidor HTTP siglas de HyperText Transfer Protocol, software de redes, etc.) agrega enlaces adicionales a este proceso de extracción de la información, ya que el software de procesamiento pasa los resultados hacia el servidor Web, y éste hasta el navegador del Web (ya sea directamente o a través de una red). 1.1.2.2 Categorización de Interfaces Web/DBMS Tradicionalmente en el Web se han utilizado documentos HTML estáticos para los cuales se creaban las posibles respuestas ante requisiciones del cliente. Este método requiere de un gran desarrollo de aplicaciones y de mantenimiento de las mismas. Al interactuar con las bases de datos, este proceso se complica aún más. Como la necesidad de acceder a bases de datos desde el Web se ha incrementado, han sido creadas también interfaces que manipulan sus 5 1. Introducción escritos para procesar la información, teniendo como punto común la ejecución de sentencias SQL para requerir datos. Aplicaciones de interfaz para la interacción de bases de datos con el Web han surgido ya. Los productos iniciales son simplemente modelos del ambiente cliente/servidor, con una capa adicional para crear resultados HTML que pueden ser vistos a través del Web, por medio de un procesamiento de los datos de la forma introducidos por el cliente. Además, al usar estas interfaces se puede crear el programa principal de la aplicación. Como puede observarse, estas herramientas permiten construir poderosas aplicaciones en experimentados el logren Web, un pero se desarrollo requiere a gran que escala. programadores También, el mantenimiento de las mismas es significativamente más complejo y extenso. Una de las estrategias más famosas para la creación de aplicaciones de interacción con el Web, es la de descargar del Web, aplicaciones o componentes funcionales que se ejecutarán dentro del navegador. Con ellas se realizará un procesamiento complejo del lado del cliente, lo cual requiere un gran esfuerzo para crear las piezas de la aplicación. Estas estrategias poseen dos características principales: garantizan la seguridad tanto en los sistemas de distribución como en la comunicación que se establece con tales aplicaciones, a través de Internet. También han aparecido bibliotecas que incluyen motores propios de servidor que corren de forma conjunta con el servidor Web, lo cual facilita el desarrollo de nuevas aplicaciones. Una aplicación que posibilita interconectar al Web con una base de datos tiene muchas ventajas, además de que las funciones que cumplen actualmente los servidores Web y las herramientas de desarrollo de 6 1. Introducción aplicaciones Web, hacen más fácil que nunca la construcción de aplicaciones más robustas. Tal vez el mayor beneficio del desarrollo de estas aplicaciones en el Web sea la habilidad de que sean para múltiples plataformas, sin el costo de distribuir múltiples versiones del software. Cada una de las interfaces para comunicar al Web con bases de datos, ha sido creada basándose en una tecnología de integración especial, a través de procesos de interconexión especiales, que serán descritos en el siguiente apartado. 1.2 MOTIVACIONES DEL TRABAJO ? El interés por la programación de sistemas de bases de datos aplicados a una tecnología en auge como lo es Internet, con la fina lidad de que este medio no sea un escaparate para presentar información, sino un medio para consulta y actualización de bases de datos. ? Conocer y comparar las diferentes tecnologías para manejo de bases de datos en Internet, a fin de aplicar una de ellas en una aplicación específica. ? Desarrollar una aplicación de uso general que puede operarse en Internet o en una Intranet derivada de la selección y estudio de las tecnologías para integrar bases de datos en el Web. ? Profundizar los conocimientos adquiridos durante la maestría en Telemática en las materias orientadas a la programación, manejo de bases de datos y redes de computadoras. 7 1. Introducción 1.3 OBJETIVO 1.3.1 OBJETIVO GENERAL Analizar las tecnologías para integración de bases de datos en Internet, afín de instrumentar una aplicación práctica. 1.3.2 OBJETIVOS ESPECÍFICOS ? Estudiar las tecnologías para la integración de bases de datos en el Web : Java DBC, CGI y ASP. ? Comparar las tecnologías anteriores lo cual permitan seleccionar una de ellas a fin de realizar una aplicación práctica ? Instrumentar la aplicación de control de inventario la cual permita: controlar los inventarios de insumos informáticos para la Administración Regional Jurídica de Ingresos de Occidente. ? Poder trasladar fácilmente una aplicación desarrollado para una Intranet a Internet, de la cual se obtendrían los beneficios que ofrece la internacionalización del acceso. ? Permitir el desarrollo de grupos colaborativos al contar con consultas y actualización a bancos de información vía Internet. ? Cubrir el interés personal que existe por investigar el manejo de bases de datos en el Web, a fin de mejorar los conocimientos en este ramo. 8 1. Introducción 1.4 JUSTIFICACIÓN ? Considérese que por motivos de crecimiento de información y de utilización ya no es posible tener almacenada en una PC única con una base de datos, se decide comprar otra PC y repartir la base de datos entre las dos máquinas, pero pasado un tiempo se decide unir otra PC según las necesidades; en un momento se da cuenta que ya tiene 10 PC, donde cada una cuenta con una base de datos especial y las cosas van bastante lentas por que están cargadas de datos. En éste momento quizá se actualice el sistema con Windows NT y un servidor SQL y se desarrolle un aplicación lo cual subsanará en gran parte las necesidades de crecimiento. Pero en dos años el servidor SQL ya no es suficiente, por lo que decide por una base datos mayor con un sistema operativo Unix pero las aplicaciones en Visual Basic ya no funcionaran por lo que tendrá que invertirse mucho dinero y tiempo para actualizar los sistemas. Este escenario podrá repetirse mucha veces, por lo que lo ideal es un lenguaje estándar que funcione igual en cualquier máquina, sin importar hacia dónde se transfiera la base de datos, ni desde qué máquina se trate de accesar. El WWW es una solución, ya que se puede accesar a la información desde cualquier parte del mundo o simplemente desde una red local, así mismo permite una estructura de aplicaciones en un lenguaje estándar: HTML, interfaz gráfica de usuario (GUI de las siglas en inglés), soporte de diferentes plataformas, así como soporte de red; con lo que da al usuario potentes herramientas para accesar sus datos con un mínimo de gasto y esfuerzo y, utilizando herramientas que funcionan sin importar el tipo de base de datos, sistema operativo o equipo de cómputo que se utilice. 9 1. Introducción ? El actualizar una página de Internet o mantener actualizados los datos de la información presentada suele ser una tarea fácil, ya que en ocasiones sólo se requiere de modificar dos a tres líneas; pero cuando éstos cambios son constantes, suele convertirse en una tarea repetitiva, ya que implica en mantener una persona probablemente todo el tiempo de su trabajo realizando tal tarea o si la actualización se realiza en lapsos de tiempo muy breves durante todo el día esto resultaría imposible. En consecuencia con la utilización de páginas creadas a través de consultas a bases de datos es una elección que disminuye considerablemente el tiempo de actualización de páginas de Internet 1.5 ALCANCES 1.5.1 TEÓRICOS ? Documentar las tecnologías actuales para manejo de bases de datos. ? Documentar el análisis y diseño de una aplicación en el cual el acceso a las bases de datos será a través de Internet. ? Presentar el código fuente de la aplicación desarrollada a fin de que sirva de referencia bibliográfica. 10 1. Introducción 1.5.2 PRÁCTICOS ? Se realizará una aplicación de uso general, a fin de poner en práctica los conocimientos adquiridos sobre las técnicas para integrar bases de datos en el Web. ? Se instalará una red que permita la utilización de la aplicación desarrollada como simulación de uso en una Intranet. ? Controlar los inventarios de insumos informáticos dentro de la Administración Regional Jurídica de Ingresos de Occidente. 1.6 RESULTADOS ESPERADOS ? Despertar el interés en los usuarios de Internet e Intranet por aprovechar los recursos con que cuentan y no solo crear páginas de consulta de información, sino una página que permita consultar y modificar bases de datos. 1.7 IMPACTO SOCIO-ECONÓNICO Con la integración de bases de datos en el Web, los usuarios de Internet o Intranet pueden obtener un medio que puede adecuarse a sus necesidades de información, con un costo, inversión de tiempo, y recursos mínimos. Asimismo, las bases de datos serán usadas para permitir el acceso y manejo de la variada información que se encuentra a lo largo de la red. 11 1. Introducción 1.8 METODOLOGÍA I. Investigación bibliográfica II. Análisis de las tecnologías para manejo de bases de datos en Internet. III. Selección de la tecnología de manejo de bases de datos en el Web. IV. Selección de lenguaje de programación así como manejador de bases de datos. V. Análisis y diseño de la aplicación de control de inventario de insumos informáticos sobre Internet o una Intranet. VI. Desarrollo de la aplicación bajo las pautas establecidas en el diseño. VII. Pruebas y correcciones. VIII. Implantación definitiva. IX. Presentación de resultados y discusión de resultados. X. Elaboración de material para presentación de los resultados de la investigación. 12 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet 2. ANALISIS DE HERRAMIENTAS DE DESARROLLO Y MANEJO DE BASES DE DATOS EN PÁGINAS EN INTERNET A continuación se analizan tres tecnologías de las más utilizadas a fin de compararlas y elegir una de ellas como herramienta de implementación y con esto, desarrollar una aplicación práctica. Las tecnologías a describir son : ? Java DBC ? CGI ? ASP 2.1 CONECTIVIDAD DE BASES DE DATOS JAVA (JDBC) 2.1.1 DEFINICION El primer trabajo estandarizado en conectividad-DBMS de Java aparece en el borrador de la especificación conocida como la especificación de la API (siglas de Application Programming Interface) de Conectividad de Bases de Datos Java (JDBC). JDBC: crea una interfaz a nivel de programación para comunicaciones con base de datos en una manera uniforme, similar en concepto al componente ODBC de Microsoft, el cual se ha convertido en el estándar para PCs y LANs. El estándar JDBC por sí mismo está basado en el nivel de interfaz de llamadas X/Open SQL, la misma base del ODBC. Ésta es una de las razones por las que el desarrollo inicial del JDBC está progresando tan rápido. Las clases objeto para las transacciones abiertas con estas bases de datos son escritas completamente en Java para permitir una mayor y más 13 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet cercana interacción que se obtendrá incrustando llamadas a funciones en lenguaje C en programas Java, como se tiene que hacer con ODBC. De ésta manera se puede mantener la seguridad y robustez, y la potabilidad que hace a Java tan interesante. De cualquier manera para promover su uso y mantener un nivel de compatibilidad como respaldo, JDBC puede ser implementada encima de ODBC y otras API comunes de SQL existentes. 2.1.2 JDBC SOBRE INTERNET Una de las principales preocupaciones de JDBC es el como funcionará sobre Internet. Sun está presionando para un intensivo uso comercial de grandes redes como Internet, y los distribuidores de base de datos también reconocen esa importancia. Algunos tópicos acerca de la seguridad son mencionados en las especificaciones del lenguaje Java, sin embargo, deben tomarse en cuenta otros elementos como el direccionamiento de instancias específicas a través de Internet. Por esta razón, JDBC “presta” la sintaxis URL (Uniform Resource Locator) para bases de datos de direcciones globalmente únicas. La mayoría de los usuarios deberán reconocer esquemas URL como http://www.javaworld.com, que indica una dirección WWW, JDBC sigue una sintaxis similar. Revisemos todos los elementos de URL : Una ULR completa consta de varios elementos como se puede observar en el siguiente ejemplo : http://host.domain.com:80/directory/directory/filename http: Indica el esquema URL, este ejemplo indica que es de HyperText Transport Protocol. 14 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet Host.domain.com: Es la dirección única del hosts Internet, único para cada máquina. 80: Indica el numero de puerto del host Internet en el que los servicios están ubicados, el puerto número 80 es el default para los servicios http. /.../.../…/Filename: Es la estructura de directorios donde reside el archivo que ha de ser recuperado. La estructura URL de JDBC es muy similar: jdbc:odbc://host.domain.com:400/databasefile Note que en adición al esquema principal JDBC, esta estructura también incluye un subprotocolo para ODBC. El subprotocolo indica como el manejador JDBC accesará a la base de datos, en este caso, el archivo de base de datos es accesado a través del puente JDBC-ODBC. El resto es el mismo para URL estándares, indicando el nombre del hosts, puerto, y localización y nombre de la base de datos. 2.1.3 PARA PROGRAMADORES Para auxiliar a los desarrolladores de Base de Datos a entender mejor el JDBC, se proporcionan los siguientes detalles de la interfaz. Las operaciones asíncronas que ocasionalmente son construidas dentro de otras APIs de base de datos como instrucciones específicas de SQL y mecanismos adicionalmente ya son cubiertos por la naturaleza multifuncional de Java. EL programador puede crear hilos "threads" (como en modo protegido) separados desde el principal para cada una de las 15 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet actividades asíncronas. De cualquier manera, todas las operaciones que utilizan java.sql classes deberán ser escritas en código-multihilo "code multithread", aún si los objetos mismos accesan a las operaciones a través de hilos simples single threads. El cómo la implementación funciona se deja al controlador (Driver). Cada transacción inicia con un método BeginTransaction y puede ser volcado o abortado en caso de ser necesario. Una vez volcado o abortado todos las instrucciones asociadas a esa transacción se cerrarán. SQL ha sido extendido para proveer la funcionalidad faltante en la especificaciones de estándares originales. Para realizar esto, JDBC provee un mecanismo para incrustar sentencias extendidas SQL similar como las que están disponibles en ODBC. La sintaxis para esto es : {keyword ... parameters ...} Para compensar las características de bases de datos específicas, los fabricantes están autorizados para extender las sentencias básicas para sus propios diseños. De cualquier manera, las sentencias básicas deben de ser soportados como mínimo para la compatibilidad con JDBC. 2.1.4 PROCESAMIENTO Por lo general, las aplicaciones Web son procesadas completamente en el lado del servidor, lo cual no es precisamente lo más apropiado, ya que significa un uso excesivo de memoria, manteniendo al usuario en la espera mientras termina de ejecutarse. Pero los na vegadores Java (del lado del usuario) pueden ejecutar aplicaciones, y no sólo desplegar documentos HTML, poniendo a correr el proceso en el lugar apropiado. 16 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet Las aplicaciones clásicas proveen de información acerca de los tipos de formato (tipos MIME). Los navegadores del Web rápidos serán capaces de aprender cómo tratar con nuevos protocolos y dar formato dinámicamente a los datos. 2.1.5 SEGURIDAD Java está diseñado para proveer la máxima seguridad posible en redes públicas, con múltiples formas de seguridad ante virus, posibles invasiones o accesos incorrectos, archivos basura, etc. Java es como una versión de C++, en la cual no se puede causar cualquier daño. Es funcional como C y modular como C++. 2.1.6 RESUMEN JDBC sigue una especificación establecida y una implementación probada para comunicación de base de datos en las aplicaciones. La solución de puenteo hacia sistema actuales ODBC, permite a los usuarios mantener compatibilidad con versiones anteriores que pueden no contar con JDBC. Los mayores distribuidores están implementando componentes JDBC para sus bases de datos disponible en relativamente poco tiempo. JDBC aun esta en etapa de desarrollo. Es cierto que existe prisa en todos los desarrollos de Java. Aparentemente la competencia se esta gestando por Microsoft. Active X y Visual Basic compromete a Microsoft para ofrecer los servicios de línea en el mundo de los Applet. El problema de la neutralidad de plataforma es evidentemente en esta alternativa; de cualquier modo, existen grandes desarro llos para Visual Basic esto detiene el potencial para aplastar otros esfuerzos. 17 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet 2.2 DESARROLLO DE PÁGINAS DINÁMICAS CON COMMON GATEWAY INTERFASE (CGI) 2.2.1 DEFINICIÓN CGI no es un lenguaje. Es solo un simple protocolo que puede utilizarse para comunicar formas del Web y programas. Un programa CGI puede ser escrito en cualquier lenguaje que pueda leer STDIN (siglas de Standar Input, o entrada de datos estándar), escribir a STDOUT (siglas de Standar Output, o salida de datos estándar ) y leer variables del ambiente, por ejemplo; virtualmente cualquier lenguaje de programación, incluyendo C, Perl, Clipper, Visual Basic y hasta scripts de Unix. 2.2.2 CGI SOBRE INTERNET En la mayoría de los casos, lo que se desea saber es como llamar a los programas. Cuando se necesita procesar información de una forma, se necesita especificar el nombre del programa CGI dentro de la etiqueta <FORM> de una página HTML. Los otros métodos para llamar programas CGI son la etiqueta de liga <A> y la etiqueta de imagen <IMG>, y con Server Side Includes (SSI), también requieren que se les especifique el nombre del programa CGI en la etiqueta HTML. El nombre del programa CGI se incluye en el atributo ACTION de la etiqueta <FORM>, como se muestra a continuación : <FORM METHOD=POST ACTION="http:/bciencias.ucol.mx/cgi-bin/nombre-del - programa.cgi"> 18 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet También se pueden llamar a los programas CGI asignándolos al atributo HREF de una etiqueta <A>, como se muestra: <A HREF = "http:/bciencias.ucol.mx/cgi-win/nombre-del-programa.cgi"> Enviar</A> También se pueden llamar a los programas CGI desde una etiqueta <IMG> de HTML. Si se incluye la trayectoria del programa CGI como el atributo SRC, el servidor Web ejecutará el programa CGI y regresarán la salida como una imagen. El programa CGI deberá regresar su salida en un formato gráfico o redireccionando la salida a otra imagen. <IMG SRC=""http:/bciencias.ucol.mx/cgi-win/nombre-del-programa.cgi"> La mayoría de los servidores Web son capaces de manejar los Server Side Includes (SSI). Server Side Includes son comandos del servidor Web que residen dentro de la etiqueta HTML. Cuando el servidor Web revisa el archivo HTML, ejecuta todos los comandos Server Side Includes y incluye los resultados en lugar de los comandos. Server Side Includes permiten incluir otro objeto dentro de la página Web simplemente añadiendo una etiqueta HTML. Estos objetos incluidos pueden ser muchas cosas diferentes, como otro documento HTML, una imagen, o un programa CGI. Todos los comandos Server Side Include son de la forma : <!--#comando etiqueta1="valor1" etiqueta2="valor2" --> Para ejecutar un programa CGI desde un Server Side Include, se utiliza el comando EXEC . El comando EXEC tiene dos etiquetas validas, CMD y CGI. La etiqueta CMD ejecuta el valor asociado con /bin/sh (el Bourne shell de UNIX ). La etiqueta CGI llama el programa CGI el cual su trayectoria 19 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet esta asociada con el valor. A continuación la línea de código que ejecuta e incluye la salida del programa CGI " incluyeme.cgi" : <!--#exec cgi="/cgi-bin/incluyeme.cgi" --> 2.2.3 PARA PROGRAMADORES La secuencia típica de pasos para elaborar un programa CGI son: ? Leer los datos de entrada comúnmente estos datos son introducidos por una Forma. ? Procesar la información. ? Escribir la página HTML resultante al STDOUT Cuando el usuario envía la forma, el programa recibe los datos en un conjunto de pares nombre - valor . Los nombres son los que se definen en las etiquetas INPUT (o etiquetas SELECT o TEXTAREA ), y los valores son cualquier cosa que el usuario escribió o seleccionó. Este conjunto de pares nombre - valor se envía al programa como una sola cadena de caracteres, la cual se necesita separar. Este paso no es muy complicado, y ya existen una gran cantidad de rutinas que lo implementan. "nombre1=valor1&nombre2=valor2&nombre3=valor3" Así que solo se necesita separar los ampersons y los signos de igualdad. Así que, solo se necesita hacer dos cosas: 20 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet ? Convertir todas los signos de "+" a espacios, y convertir todas las secuencias "%xx" al caracter cuyo valor ascii es "xx", en hexadecimal. Por ejemplo, convertir "%3d" , ya que 3d hexadecimal es 61 en decimal equivale a "=". Es necesario este último paso por que la cadena original esta codificada en URL, para permitir signos de igualdad, ampersons y otros símbolos, puedan incluirse en los datos del usuario. Pero, ¿De donde se obtiene esta cadena?. Eso depende del método HTTP en que fue enviada la información de la forma: ? Si se utilizo el método GET , la cadena se encuentra en la variable de ambiente QUERY_STRING. ? Si se utilizo el método POST , se obtiene del STDIN. El número exacto de bytes que se deben leer se encuentra en la variable de ambiente CONTENT_LENGTH. Antes de comenzar el programa, se necesita escoger cual lenguaje de programación utilizar. Para la mayo ría de los proyectos, escoger un lenguaje es solo materia de preferencia. Mientras los amantes de Unix prefieren los shell scripts, Perl o C, un usuario Windows preferirá utilizar Visual Basic, C o tal vez un archivo por tareas de DOS. Se debe escoger un lenguaje de programación que sea familiar, pero a su vez que sea una buena elección para el sistema en que se correrá, y que pueda ejecutar las operaciones para las cuales fue escrito el programa. Al escoger cual lenguaje de programación utilizar, se deben de tomar en consideración en que plataforma correrá. La mayoría de los lenguajes 21 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet comunes están disponibles para la mayoría de las plataformas para las cuales existen servidores Web. El ejemplo mas obvio para la cual ésto no se cumple es AppleScript. Esta claro que, si el servidor Web no corre en una maquina Apple, no se debería de escribir los programas CGI en AppleScript, aun si es el lenguaje de programación favorito. De cualquier manera, si el Web Server corre en una maquina Apple Macintosh, AppleScript es una opción poderosa ya que permite una interacción con otros programas en Macintosh más fácilmente que C o C++. Finalmente, asegurar que el lenguaje elegido sea apropiado para la tarea que se quiere realizar. Para procesar información de una forma, cualquiera de los lenguajes comunes trabajará bien, pero cuando se vuelven programas más complicados, tales como acceso a bases de datos, Perl o C son claramente la opción correcta en UNIX, y no un shell script. Un programa CGI debe: ? Ser ejecutable (o en el caso de utilizar lenguajes interpretados como Perl, incluir la llamada al intérprete) ? Estar ubicado en el directorio cgi-bin o win-cgi. La ubicación en cada servidor puede variar y esta definida por el administrador del servidor. ? Sea capaz de acceder a los archivos que necesita. Como la aplicación corre desde el directorio cgi-bin o win-cgi, todas las referencias relativas que hagan van a estar referenciadas al mismo. Por las dudas, cuando se tenga que retornar una página HTML completa, es más eficaz utilizar el URL completo (http://....) . ? Tener puestos los permisos del programa correctamente. El programa debe de poder ser corrido por cualquier persona. 22 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet 2.2.4 PROCESAMIENTO En el momento en que accedemos a una página del tipo HTML, podemos apreciar distintos elementos que permitirán que nuestros deseos o necesidades puedan ser transmitidos a las personas que manejan esa página. La mecánica es simple, la información es enviada a un programa, el programa CGI, procesada y en consecuencia es generada una salida. El script eventualmente retornará una página HTML o una imagen que es mostrada como resultado de la ejecución. Este último caso es el de los contadores, que a través de un pequeño programa en C, "pegan" los distintos dígitos que representan la cantidad de accesos que ha tenido esa página en una UNICA imagen .GIF . Para diferenciar estos dos tipos de salida se envía un "header" al comienzo de la transmisión de la respuesta que las identifica según la siguiente especificación (extensiones MIME): Tipo de Información retornada Texto Una página HTMl Content-type: text/html Una imagen .GIF Content-type: image/gif 2.2.5. SEGURIDAD Muchos servidores los configura el administrador del sistema y se ejecutan bajo un nombre de usuario inocuo, de manera que si un intruso llega a conseguir entrada ilícita al sistema, no podrá hacer mucho daño porque el nombre de usuario HTTP tiene acceso limitado. Sin embargo si se está ejecutando un servidor HTTP bajo su nombre de usuario, debe tenerse en cuenta que el servidor HTTP tiene los mismos privilegios. Algunas precauciones básicas que deben tomarse en cuenta: 23 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet ? Ningún programa CGI permitir a los visitantes transferir comandos para ejecución directamente al sistema operativo. ? Poner un archivo index.html en todos los directorios disponibles para el servidor HTTP; esto evitará que puedan ser listados los contenidos de los directorios. ? Consultar frecuentemente los registros de entrada al servidor para detectar a tiempo intentos de accesos sospechosos. ? Si no son necesarios los servicios ftp, nfs, uucp bórrelos archivos, o si esto es requerido en el servidor, mantenga fuera del árbol de documentos los archivos de datos y programas CGI usados, ya que esto evitará que puedan ser accesados con GET o POST. ? Utilizar contra señas de acceso a programas CGI que tengan acceso a bases de datos. 2.2.6 RESUMEN ? Un programa CGI puede ser escrito en cualquier lenguaje que pueda leer STDIN (siglas de Standar Input, o entrada de datos estándar ), escribir a STDOUT (siglas de Standar Output, o salida de datos estándar ) y leer variables del ambiente ? La mayoría de los programas CGI están escritos en AppleScript, C, C++, Perl, TCL, cualquier shell de Unix o Visual Basic. Estos no son los únicos lenguajes a utilizar, pero son por mucho los más comunes. Mientras se puede escoger cualquier lenguaje que se desee, existen dos buenas razones para considerar alguno de los más comunes. 24 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet ? Primero, será más rápido elaborar programas CGI ya que existen rutinas disponibles. Muchos programadores del World Wide Web han escrito programas CGI para tareas comunes. Algunos han hecho sus programas disponibles gratuitamente a través de Internet. Se pueden encontrar estos programas buscando en varios recetarios en el Web. ? Segundo, si se utilizan uno de los lenguajes comunes de programación CGI, es más fácil obtener ayuda para su depuración. Se pueden enviar las preguntas y leer las respuestas en grupos como USENET o listas de correo electrónico. Si se utiliza uno de los lenguajes populares, más personas serán capaces de ayudarte con tus problemas. 25 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet 2.3 ACTIVE SERVER PAGES (ASP). 2.3.1 DEFINICION ASP, es esencialmente, código VBSCript que se ejecuta en el servidor. El código genera instrucciones HTML cuando un usuario accede a la página que lo contiene. Esta es la clave de ASP: el cliente nunca ve el código, sólo las instrucciones HTML resultantes, que pueden ser relacionadas por cualquier navegador. 2.3.2 ASP SOBRE INTERNET Para enviar datos a un servidor Web, el cliente utiliza un formulario con etiquetas <FORM>. Estos formularios incluyen distintos campo de entrada de datos similares a cuadros de texto. El programa cliente empaqueta los datos y posteriormente los envía al servidor; el proceso de envío de cualquier formulario está controlado por dos atri butos de la etiqueta <FORM>: METHOD y ACTION. EL atributo METHOD determina la forma en la que se envían los datos al servidor, el atributo cuanta con dos valores GET y POST. El primero envía los datos como parte integrante del Localizador Uniforme de Recursos (URL) de la página destino, y POST permite que el navegador empaquete los datos contenidos en el formulario y que los envíe al servidor. El atributo ACTION especifica cual será la página destino de los datos que se han enviado. El siguiente ejemplo envía los datos a una página denominada DATOS:ASP, utilizando el método POST: <FORM METHOD="POST" ACTION=http://www.ucol.mx/datos.asp"> <P><INPUT TYPE= "TEXT" NAME= "TXTnombre"> </P> <P><INPUT TYPE= "TEXT" NAME= "TXTdomicilio"> </P> <P><INPUT TYPE= "SUBMIT"></P> </FORM> 26 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet El control denominado TYPE= "SUBMIT" es un botón que deberá ser pulsado por el usuario para enviar los datos del formulario. Otra forma de enviar los datos al servidor sobre Internet, es utilizando la etiqueta <A>. La etiqueta <A> utiliza el atributo HREF para designar una página destino y para transportar los datos cuando el usuario pulse sobre el vínculo. Para separar el nombre de la página destino de los datos a enviar se utiliza el signo de interrogación (?) separados por el carácter (&). Regresando al ejemplo anterior don del formulario enviaba los campos TXTnombre y TXTdomicilio , a continuación se muestra como se realiza utilizando un hipervínculo: <A HREF= "http://www.ucol.mx/datos.asp?TXTnombre=Juan & TXTdomicilio=Colima"> Pulse aquí para enviar los datos al formulario .... </A> 2.3.3 PARA PROGRAMADORES La estructura del código ASP se encuentra encerrada entre caracteres especiales (signos menor y mayor que y porcentajes) <%......%>, los cuales definen al código para el servidor, lo que significa que el código se evaluará antes de que la página se envíe al navegador. El siguiente código muestra un ejemplo sencillo : <%@ LANGUAGE="VBSCRIPT" %> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <html> <head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=iso-8859-1"> <meta NAME="GENERATOR" CONTENT="Microsoft FrontPage 3.0"> <title>Ejemplo simple de código ASP</title> </head> 27 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet <body BGCOLOR="#FFFFFF"> <% Dim strSaludo If Hour(Now) < 14 Then strSaludo = "¡Buenos días!" ElseIf Hour(Now) > 13 And Hour(Now) < 20 Then strSaludo = "Buenas tardes" ElseIf Hour(Now) > 19 Then strSaludo = "¡Buenas noches!" End If %> <h1><%=strSaludo%></h1> </body> </html> La gran ventaja de utilizar ASP es que el código resultante es simplemente HTML, por lo cual se puede apreciar en cualquier navegador y se mostrará correctamente tanto en Netscape Navigator como en Internet Explorer. También resulta interesante la línea de código donde se genera las instrucciones HTML, donde se utiliza una variable para escribir el saludo: <h1><%=strSaludo%></h1> La variable strSaludo está encerrada entre los signos mayor que y porcentaje y, además, está precedida por un signo de igualdad. El signo de igualdad juega un papel importante en ASP, le dice a ASP que inserte en la página el valor actual de la variable como código HTML, por lo tanto, el valor del saludo se inserta en este punto y se verá en el navegador como simple texto, como se muestra a continuación (suponiendo que es más tarde de las 13:00 horas y antes de las ocho de la noche): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <html> <head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=iso-8859-1"> <meta NAME="GENERATOR" CONTENT="Microsoft FrontPage 3.0"> 28 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet <title>Ejemplo simple de código ASP</title> </head> <body BGCOLOR="#FFFFFF"> <h1><Buenas tardes</h1> </body> </html> 2.3.4 PROCESAMIENTO Active Server Pages (ASP) incluye secuencias de comandos en sus páginas HTML y crear así un contenido dinámico e interactivo en el sitio Web. Anteriormente, las secuencias de comandos escritas en los lenguajes VBScript y JScript se procesaban en los exploradores de Web preparados para ello. Active Server Pages permite que sea el servidor Web el que procese los comandos de VBScript y JScript. Cualquier explorador que pueda establecer contacto con el servidor Web admitirá los resultados dinámicos generados por ASP, tanto si admite VBScript o JScript 2.3.5 SEGURIDAD El código es seguro: cada página puede utilizar las listas de control de acceso (ACL) en el sistema de seguridad de Windows NT. También, dado que el código se ejecuta en el servidor, el cliente de Web nunca ve el código sólo los resultados. Esta propiedad le protege de usuarios que quieran mirar o apropiarse de su código. Además, como puede administrar los servidores, puede mantener código desautorizado fuera del servidor. 29 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet 2.3.6 RESUMEN La tecnología Active Server Pages o ASP, es la nueva tecnología Internet más interesante ya que permite crear aplicaciones independientes de la plataforma utilizada en cualquier navegador. Una de las características más importantes es que la programación ASP se realiza en el servidor, el código se evalúa dinámicamente cuando se solicita el acceso a la página, y el código HTML resultante se envía al navegador que se ha conectado. Esto hace que ASP sea una opción ideal para cualquier aplicación que se desea ejecutar en Internet, donde cualquier navegador puede acceder a sus páginas. Sin embargo, ASP no está limitado al máximo común divisor, ya que puede añadir de programa, controles ActiveX y HTML dinámico a la salida del ASP. Las páginas ASP son por lo tanto tan flexibles y potentes como se desee. 30 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet 2.4 SELECCIÓN Y JUSTIFICACIÓN DE HERRAMIENTA DE DESARROLLO Para elegir la herramienta que nos permita de una manera mas eficiente desarrollar nuestra aplicación, resumiremos brevemente cada una de las características comunes en cada una de las tecnologías descritas en las secciones anteriores : JDBC: Acceso a Internet Accesible ya que se realiza atraves de la dirección URL. Jdbc:odbc://host.domain.com:400/databasefile Programación. Las operaciones de base de datos multifuncional de Java, así mismo JDBC provee un mecanismo para incrustar sentencias extendidas SQL Procesamiento. Se realiza en el cliente ya que los navegadores Java pueden ejecutar aplicaciones, y no sólo desplegar documentos HTML, poniendo a correr el proceso en el lugar apropiado. Seguridad.- Proveer la máxima seguridad posible en redes públicas, con múltiples formas de seguridad ante virus, posibles invasiones o accesos incorrectos, archivos basura, etc Tabla 2-1. Características de JDBC 31 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet CGI Acceso a Internet Se accesan a través de las etiquetas <FORM>, <A>, <HREF> y <IMG> de una página HTML. Programación. Un programa CGI puede ser escrito en cualquier lenguaje que pueda leer STDIN, escribir a STDOUT y leer variables del ambiente como C, C++, Perl, shell de Unix o Visual Basic. Procesamiento. La información es enviada a un programa CGI, el programa retorna una página HTML o una imagen que es mostrada como resultado de la ejecución. Seguridad.- Contando precauciones en la configuración del servidor y restringido acceso a los datos se considera segura. Tabla 2-2. Características de CGI 32 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet ASP Acceso a Internet Para enviar datos a un servidor Web, el cliente utiliza un formulario con etiquetas <FORM>. El programa cliente empaqueta los datos y posteriormente los envía al servidor; el proceso de envío de cualquier formulario está controlado por dos atributos de la etiqueta <FORM>: METHOD y ACTION. Programación. La estructura del código ASP se encuentra encerrada entre caracteres especiales (signos menor y mayor que y porcentajes) <%......%>, los cuales definen al código para el servidor, lo que significa que el código se evaluará antes de que la página se envíe al navegador Procesamiento. Active Server Pages permite que sea el servidor Web el que procese los comandos de VBScript y JScript. Cualquier explorador que pueda establecer contacto con el servidor Web admitirá los resultados dinámicos generados por ASP, tanto si admite VBScript o JScript Seguridad.- El código se ejecuta en el servidor, el cliente de Web nunca ve el código sólo los resultados. Tabla 2-3. Características de ASP 33 2. Análisis de herramientas de desarrollo y manejo de bases de datos en páginas en Internet En resumen : Se calificará marcando con Bueno, Regular y Malo JDBC CGI ASP Regular Bueno Bueno Programación Malo Bueno Bueno Procesamiento Bueno Bueno Bueno Seguridad Bueno Regular Bueno Acceso a Internet Tabla 2-4. Comparación de JDBC, CGI, ASP En conclusión se selecciona como técnica de manejo de base de datos a ASP para desarrollar una aplicación práctica, la cual se describirá en los capítulos siguientes, así como describir claramente el acceso a los datos utilizando esta técnica. 34 3. Acceso a bases de datos con Active Server Pages 3. ACCESO A BASES DE DATOS CON ACTIVE SERVER PAGES Una vez seleccionada la tecnología Active Server Pages como forma de acceso a bases de datos en el Web, se profundizará en esta herramienta, a través de ejemplos simples, así como el de analizar el entorno requerido para su implementación. 3.1 OBJETOS Y COMPONENTES Al nivel más básico, crear una página ASP consiste sólo en escribir código del lado del servidor para producir el resultado deseado. Sin embargo, VBScript no es un lenguaje plenamente funcional, y se quedará corto cuando se intenta crear páginas complejas, VBScript no cuenta con funciones intrínsecas con las que se pueda acceder a ninguna fuente de datos externa, por lo cual el lenguaje se complementa con objetos y componentes ASP. Los objetos y componentes ASP no son más que componente s ActiveX , algo similar a los DLL utilizados con Microsoft Visual Basic. La diferencia existente entre objetos ASP y componentes ASP está relacionada con la forma en que se encuentran empaquetados. Los objetos ASP son elementos ActiveX que se encuentran siempre disponibles en VBScript. No se tiene que crear explícitamente objetos ASP para su empleo. ASP puede manejar los objetos Application, Session, Request, Response y Server. Por otro lado, los componentes ASP son DLL que existen fuera del mundo ASP. Estos componentes se pueden generar en cualquier lenguaje, pero Microsoft ha incluido algunos disponibles componentes ASP de gran utilidad en Visual InterDev. Los componentes ASP no estarán disponibles a menos que se haya codificado expresamente. ASP puede manejar los 35 3. Acceso a bases de datos con Active Server Pages componentes denominados Database Access, File Access, Browser Capabilities, Ad Rotator y Content Linking. 3.2 EL ARCHIVO GLOBAL.ASA Al diseñar aplicaciones Internet independientemente de la tecnología que se utilice, existe la dificultad para crear auténticas aplicaciones. La interacción entre un navegador y un servidor Web es, básicamente, una transación en la que el servidor pasa a una página Web al cliente y aquél se olvida de que el cliente existe. Cuando, posteriormente, el cliente solicita otra pagina Web, el servidor no recuerda la primera petición. En base a lo anterior el problema esencial para todas las aplicaciones Web es el siguiente: ¿Como se debe definir una aplicación?. Definir una aplicación en el entorno de Microsoft Windows es bastantes simple. La aplicación se ejecuta cuando se realiza una doble pulsación sobre su icono asociado, y la aplicación finaliza cuando se selecciona la opción salir del menú archivo. Entre estos dos sucesos los datos se almacenarán en variables. Sin embargo el proceso no es mismo en las aplicaciones Internet. ¿Cómo se determina cuando comienza o acaba una aplicación? Si un usuario se conecta a un servidor y ve una página, se podría decir que la aplicación ha comenzado. ¿ Pero que ocurre cuando el usuario salta a otro servidor y vuelve al primero cinco minutos después? ¿Sigue estando viva la aplicación? ¿Qué ocurre si el usuario abandona el primer servidor durante una hora? ¿y dos horas?. Este problema de definir el principio y el final de una aplicación afecta a la capacidad de gestionar correctamente variables y el flujo de trabajo. Para evitar el problema mencionado, Active Server Pages proporciona una 36 3. Acceso a bases de datos con Active Server Pages solución. ASP utiliza un archivo especial, denomiando GLOBAL.ASA, para definir el principio y el final de una aplicación, así como el principio y el fina de una sesión de usuario. GLOBAL.ASA es responsable de detectar cuatro sucesos claves en su servidor: Aplication_OnStart. Aplication_OnEnd, Session_OnStart y Session_OnEnd. GLOBAL.ASA utiliza etiquetas <SCRIPT> para designar las distintas secciones de programación. Estas tareas contienen un atributo especial, denominado RUNAT=Server, que especifica que el VBSCript contenido deberá ejecutarse en el servidor y no en el cliente. RUNAT=Server es similar, en su función, a los signos mayor que, menor que y porcentaje utilizados en la página Web para designar programación del lado del servidor. Los sucesos contenidos en GLOBAL.ASA pueden ser atrapados en el lado del servidor utilizando sintáxis estandar. Por ejemplo, para atrapar el comienzo de una aplicacion se deberá utilizar las siguientes lineas de codigo: <SCRIPT LANGUAGE=VBScript RUNAT=Server> Sub Application_OnStart ‘ Código especifico de la aplicación End Sub </SCRIPT> Una aplicación Internet se define como un directorio virtual y todas sus páginas. Si un usuario solicita una página Web contenida en un directorio virtual, denominado Librería, el usuario habrá puesto en marcha la aplicación Librería, y los sucesos Application_OnStart y Session_OnStart se introducirán en GLOBAL.ASA. Según esta definición, una aplicación puede ser utilizada simultáneamente por varios navegadores. El suceso Application_0nStart sólo se dispara una vez (cuando el primer usuario solicita una página Web contenida en el directorio virtual). Cuándo un segundo usuario solicite 37 3. Acceso a bases de datos con Active Server Pages posteriormente, otras páginas contenidas en el mismo directorio, sólo se disparará el suceso Session_OnStart. Mientras que una aplicación puede englobar a varios navegadores que acceden simultáneamente al mismo conjunto de páginas Web, una sesión se refiere a cada navegador que accede a las mismas paginas Web. Una sesión para un determinado navegador durará mientras que el usuario continúe solicitando páginas Web contenidas en dicho directorio virtual. Si en veinte minutos el usuario no vuelve a solicitar otras páginas Web, se considerará que la sesión ha terminado y se disparará el suceso Session_OnEnd. Una vez que hayan concluido todas las sesiones de usuario en el directorio virtual, se disparará el suceso Application_OnEnd. 3.3 OBJETOS DE ACTIVE SERVER PAGES ASP contiene un elevado número de objetos que permitirán gestionar prácticamente todo, desde variables hasta envíos de formularios. Su empleo es sencillo, y se les puede llamar directamente desde el código sin tener que utilizar ninguna sintaxis especial. En este apartado se analizan los objetos ASP disponibles en Visual InterDev para el diseñador de aplicaciones Internet. En el apéndice A se describen las propiedades y métodos manejados por estos objetos. 3.3.1 OBJETO APPLICATION El objeto Application permite crear variables de aplicaciones, variables que se encuentran disponibles para todos los usuarios de una aplicación. Todos los usuarios que accedan a páginas Web contenidas en el mismo 38 3. Acceso a bases de datos con Active Server Pages directorio virtual pueden compartir cualquier variable de aplicación definida en dichas paginas. El siguiente listado muestra un código ejemplo que utiliza el objeto Applicition. En este ejemplo, se utiliza una variable de aplicación para controlar c uando fue la última vez en que un usuario visitó la página. <%@ LANGUAGE="VBScript"%> <HTML> <HEAD> <TITLE>Variables de aplicación</TITLE> <HEAD> <BODY BGCOLOR="FFFFFF"> Esta página fue visitada por última vez el <%=Application("Time")%> <%Application.Lock%> <%Application("Time") = Now%> <%Application.Unlock%> </BODY> </HTML> Crear una variable de aplicación es tan sencillo como llamar al objeto Aplication seguido del nombre de la nueva variable que se desee crear. Por ejemplo, la siguiente instrucción crea una variable de aplicación denominada Empresa y define su valor como NuevaTecnología: Application("Empresa")= "NuevaTecnología" El nombre es arbitrario, y la variable puede contener cualquier tipo de información, ya sea números o te xto. Debido a que la variable se encuentra disponible simultáneamente para varios usuarios, por lo tanto para evitar la concurrencia; es decir, la situación que se produce cuando dos usuarios intentan redefinir simultáneamente la variable utilizando diferentes valores. Para evitar esta situación, el objeto Application permite el empleo de los métodos Lock y 39 3. Acceso a bases de datos con Active Server Pages Unlock. El método Lock bloquea todo objeto Application inmediatamente después de modificar el valor de una variable: Application.Lock Application("Empresa")= "NuevaTecnología" Application.Unlock Aunque las variables de aplicación son útiles para almacenar temporalmente los datos, no se pueden utilizar para almacenar datos de forma permanente. El dato almacenado en una variable de aplicación se destruye cuando se ejecuta el suceso Application-OnEnd. Tendrá que trasladar las variables de aplicación a un sistema de almacenamiento permanente, tal como una base de datos, si desea almacenar los valores después de que finalice la aplicación. 3.3.2 OB JETO SESSION ASP puede manejar variables para usuarios individuales mediante el objeto Session, que permite crear variables de sesión definidas para su uso por usuarios individualizados. El listado siguiente muestra la forma en que el archivo GLOBAL.ASA define variable de sesión. Definir variables de sesión es tan sencillo como definir variables de aplicación. Solo se tiene que llamar al objeto Session seguido por el nombre de la variable que se desea definir. La gran diferencia existente entre una variable de aplicación y otra de sesión es la visibilidad de la misma. Las variables de sesión están reservadas para un único usuario, y existe durante todo el tiempo que mantenga el usuario la sesión Web. Cuando el usuario deje de acceder a las páginas contenidas en un mismo 40 3. Acceso a bases de datos con Active Server Pages directorio virtual por un período de tiempo superior a los 20 minutos, las variables de sesión desaparecerán. <SCRIPT LANGUAGE="VBScript" RUNAT="Server"> ‘ ‘ ‘ ‘ ‘ ‘ ‘ ‘ ‘ ‘ ‘ ‘ Puede añadir manejadores especiales de suceso en este archivo, el cual se ejecutará automáticamente cuando tengan lugar sucesos especiales de Active Server Pages. Para crear estos manejadores, añada una subrutina con un nombre de la lista mostrada más abajo que se corresponde con el suceso que desee utilizar. Por ejemplo, si desea crear un manejador de suceso para Session_OnStart, deberá introducir el siguiente código en este archivo (excluyendo los comentarios): ‘ ‘ ‘ ‘ ‘ ‘ ‘ ‘ ‘ ‘ ‘ ‘ Nombre del suceso Session_OnStart Sub Session_OnStart **Introduzca su código aquí ** End Sub Session_OnEnd Application_OnStart Application_OnEnd Descripción Se ejecuta por primera vez cuando un usuario abre cualquier página de su aplicación Se ejecuta cuando finalice el tiempo de se sión de un usuario o cuando éste abandone su aplicación Se ejecuta por primera vez cuando un usuario entra en la primera página de su aplicación por primera vez Se ejecuta cuando el servidor Web se apaga </SCRIPT> <SCRIPT LANGUAGE=VBScript RUNAT=Server> Sub Session_OnStart Session("Empresa") = "NuevaTecnología" Session("Correo") = "[email protected]" End Sub </SCRIPT> Las variables de sesión se pueden crear dentro de cualquier página Web o en el archivo GLOBAL.ASA. El usuario podrá acceder a una variable de sesión desde cualquier página Web contenida en la aplicación donde se define originalmente dichas variables. Los valores asignados a las variables de sesión definidas dentro del listado anterior muestran sus valores asignados en campos de texto 41 3. Acceso a bases de datos con Active Server Pages <FORM> <P> <INPUT VALUE=> <%=Session ("EMPRESA")%>EMPRESA /P <P> <INPUT VALUE= <%=Session ("correo")%>>E-Mail <P> </FORM> El cliente almacena el identificador denominado identificador único global (GUID) y lo utiliza posteriormente para recuperar los datos almacenados en el servidor. De esta forma cada cliente puede contar con sus propios datos para cada una de las aplicaciones utilizadas en el Internet. 3.3.3 OBJETO REQUEST Una aplicación Internet difiere ciertamente en muchos aspectos de una típica aplicación cliente/servidor, pero también tienen sus similitudes; por ejemplo, ambos tipos de aplicaciones dependen totalmente de la transferencia de datos existentes entre el cliente y el servidor. Cuando un servidor Web desea enviar datos a un cliente lleva a cabo esta tarea creando una página Web y enviándola. Cuando un cliente desea devolver un dato a un servidor Web, el navegador ejecuta un proceso denominado envío de formularios. Para enviar datos a un servidor Web, el cliente utiliza un formulario con etiquetas <FORM>. Estos formularios incluyen distintos campos de entrada de datos similares a cuadros de texto. El programa cliente empaqueta los datos introducidos en los campos de datos y, posteriormente, envía el paquete de datos a la computadora back-end. El proceso de envío de cualquier formulario está controlado por dos atributos de la etiqueta <FORM>: METHOD y ACTION. El atributo METHOD de la etiqueta <FORM> determina la forma en la que se envían los datos al 42 3. Acceso a bases de datos con Active Server Pages servidor. Este atributo cuenta con dos posibles valores: POST y GET. POST le pide al navegador que empaquete todos los datos contenidos en el formulario y que los envíe al servidor. GET, por otro lado, envía los datos como una parte integrante del Localizador Uniforme de Recursos (URL) de la página destino. El atributo ACTION especifica cuál será la página destino de los datos que se han enviado. Por ejemplo, las siguientes líneas de programas envían todos los datos contenidos en los campos de texto a una página, denominada DATOS.ASP, utilizando para ello el método POST: <FORM METHOD= "POST" ACTION= "http://www.colima.com/datos.asp"> <P> <INPUT TYPE= "TEXT" NAME= "TXTNombre"></P> <P> <INPUT TYPE= "TEXT" NAME= "TXTEmail"> </P> <P><INPUT TYPE= "SUBMIT"> </P> </FORM> El control especial denominado TYPE="SUBMIT" es un botón que deberá pulsar el usuario cuando se encuentre listo para enviar el formulario. Al pulsar el botón, se provocará que el navegador empaquete los datos introducidos en los campos de texto y los envíe. El formato de los datos remitidos se encuentra estrictamente definido, por lo que el servidor sabe perfectamente lo que va a recibir del cliente. Los datos adoptarán la forma de Campo=Valor; estos pares de información se enviarán al servidor en un formato textual, claro. Si en el ejemplo anterior escribiera NuevaTecnología dentro del campo txtNombre e informes en el campo txtEMail, el archivo DATOS.ASP recibiría la siguiente cadena de texto: txtNombre=NuevaTecnología&txtEMail=Informes. En el lado del servidor, estos datos se dividirán de nuevo en campos y en valores y, finalmente, se utilizarán con el fin previsto, incluyendo acceso a 43 3. Acceso a bases de datos con Active Server Pages base de datos o creación y envío de correo electrónico. Es en este momento cuando el objeto Request entra en acción. ASP utiliza al objeto Request para esgajar los datos enviados por el programa cliente. Para utilizar el objeto Request sólo se tendrá que proporcionar el nombre del campo que se desee examinar, el objeto Request obtendrá el valor. Por ejemplo, la siguiente instrucción devolverá el valor NuevaTecnología: <%=Request.Form("txtNombre")%> Request.Form se utiliza siempre que desee examinar el contenido de un formulario enviado a una página ASP. El objeto Request sólo estará disponible para páginas ASP, y sólo puede devolver datos desde un formulario enviado directamente a su página. No podrá acceder a datos contenidos en formularios que no hayan sido enviados a su página. Muchas aplicaciones Internet utilizan envíos secuenciales de formularios para llevar a cabo tareas tales como conexión a una base de datos. Sin embargo en ocasiones puede suceder que un usuario no necesite rellenar un formulario y enviarlo, Sino que sólo desee pulsar un hipervínculo para acceder a nuevos datos. Este tipo de tareas también se puede realizar utilizando el objeto Request. Para crear un hipervínculo capaz de enviar datos necesitará utilizar un ancla; es decir, la etiqueta <A>. La etiqueta ancla utiliza el atributo HREF para designar una página destino y para transportar allí los datos cuando el usuario pulse sobre el vínculo. El signo de interrogación (?) separa el nombre de la pagina destino de los datos. Volviendo al ejemplo en el que un formulario enviará a los campos 44 3. Acceso a bases de datos con Active Server Pages txtNombre y txtCorreo. Si se desea enviar los mismos datos utilizando un hipervínculo, se deberá introducir las siguientes líneas de código: <A HREF= "http://www.colima.com/datos.asp? txtNombre=NuevaTecnología&txtCorreo=Informes"> ¡Pulse aquí para enviar datos! <A> Obsérvese que los datos unidos al hipervínculo tiene el formato Campo=Valor, al igual que sucede en un formulario que se ha enviado. Siempre que proporcione los datos en este formato, el objeto Request será capaz de subdividirlos y analizarlos. Sin embargo; no se podrá utilizar la sintaxis Request.Form con los datos enviados mediante un hipervínculo. En su lugar, se deberá utilizar Request.QueryString, que trabaja en la misma forma que Request. Form, pero que se empleará con los datos enviados mediante un hipervínculo. De esta forma, la siguiente instrucción devuelve el valor NuevaTecnología desde el hipervínculo. <%=Request.QueryString("txtNombre")%> El objeto Request tiene otros usos además de los ya indicados. Se podrá, por ejemplo, utilizar Request para recuperar toda clase de información relacionada con la aplicación cliente. Podrá acceder a cualquier cosa, desde recetas enviadas junto a la solicitud del cliente a cadenas de agente de usuario del navegador. El siguiente listado muestra un ejemplo sencillo del empleo de la colección ServerVariables perteneciente al objeto Request para determinar la cuenta de Microsoft Windows NT a la que ha accedido la aplicación cliente. <%@ LANGUAGE="VBSCRIPT" %> <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0"> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> 45 3. Acceso a bases de datos con Active Server Pages <TITLE>Variables del servidor</TITLE> </HEAD> <BODY BGCOLOR="WHITE"> <H1> Ha accedido con el nombre <%=Request.ServerVariables("LOGON_USER")%> </H1> </BODY> </HTML> Las variables del servidor proporcionan un amplio abanico de información sobre la aplicación cliente y el servidor Web. La relación completa de todas las variables pertenecientes a esta colección, y que se podrá utilizar, se encuentra en Visual InterDev. En cualquier caso, para poder acceder a cualquier variable, sólo se tendrá que leer la colección. Por ejemplo, la siguiente instrucción pro porciona la cadena de agente usuario del navegador cliente: <%=Reques.ServerVariables"AHTTP -USER-AGENT")%> 3.3.4 OBJETO RESPONSE El objeto Response gestiona el contenido proporcionado a un navegador por un ASP. De hecho aunque no se dé cuenta, utilizará el objeto Response en cada página ASP. Cuando se emplee la combinación de caracteres menor y mayor que/porcentaje/igual (<%=variable%> )para devolver el contenido generado por un ASP, el signo igual es, en realidad, la abreviatura del método Write de] objeto Response. Por lo tanto, las dos siguientes instrucciones son equivalentes: <%="NuevaTecnoloía"%> <%Response.Write "NuevaTecnología"%> Como el objeto Response se utiliza con tanta frecuencia en ASP, la abreviatura del signo de igualdad está plenamente justificada. En caso 46 3. Acceso a bases de datos con Active Server Pages contrario, tendría que escribir innumerables veces la combinación Response.Write en todas las páginas ASP. Otra útil característica del objeto Response es la propiedad Expires. Response.Expires especifica el tiempo en minutos que deberá transcurrir antes de que expire la página actual. Si se define como cero esta propiedad. la página Web expirará en el momento en que sea importada e Internet Explorer no almacenará la página en la memora caché. El almacenamiento en caché de Internet Explorer 4.0 afecta a muchos proyectos de desarrollo, y un mal uso puede impedir que su servidor funcione correctamente, IE 4.0 almacena en caché las páginas de dos formas distintas: en el disco y en la memoria. La mayoría de los diseñadores y usuarios están familiarizados con el almacenamiento en disco de las páginas y suponen que esta operación tendrá lugar, pero la mayoría de los usuarios no se percaten de que IE 4.0 también utiliza la memoria de la computadora como lugar de almacenamiento caché. De hecho, IE 4.0 recuerda en la RAM las cinco últimas paginas visitadas. Este hecho puede tener un impacto importante en la forma en que se comporte la aplicación. Supongamos, por ejemplo, la siguiente instrucción que muestra la fecha/hora en una página Web: <H1>La hora actual es <%Response.Write Now%> Bajo condiciones normales IE 4.0 solicita esta página y se ejecutará el programa en el servidor haciendo que la hora actual aparezca en la página. Sin embargo, si el navegador accede a otra página y vuelve luego acceder a la página que contenía la marca de fecha/hora. La hora no habrá cambiado. Esto se debe a que IE 4.0 a almacenado en la RAM el resultado de la página ASP y no solicita un nuevo acceso al servidor para recuperarla. Esta 47 3. Acceso a bases de datos con Active Server Pages situación continuará hasta que el usuario visite un mínimo de cinco páginas distintas. En este caso, la primera página a la que se accedió se borrará de la caché de la RAM. Podrá evitar este efecto perjudicial definiendo como 0 la propiedad Expires del objeto Response. Lo que fuerza que la página Web expire. El código contenido en el siguiente listado muestra la hora correcta siempre que se visualice el contenido de la página independientemente de que se encuentra o no en la caché de la memora RAM. Del mismo modo, el empleo de la caché de RAM puede originar efectos extraños durante la fase de diseño. Los diseñadores suelen realizar modificaciones sobre una página Web con Visual InterDev, luego ven su aspecto con un navegador por último se preguntan porque los cambios realizados no aparecen la nueva página. Este efecto suele ocurrir porque la antigua versión de la memoria RAM, y IE 4.0 no carga la página modificada. Por tanto, cuando se desarrolle páginas con Visual InterDev, siempre deberá asegurarse de cargar correctamente sus páginas en el navegador después de realizar los cambios. <%@ LANGUAGE="VBScript"%> <%Response.Expires = 0%> <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0"> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> <TITLE>Cómo obligar a que una página expire</TITLE> </HEAD> <BODY BGCOLOR="white"> <H1>Actualmente la hora es <%Response.Write Now%> </BODY> </HTML> 48 3. Acceso a bases de datos con Active Server Pages 3.3.5 OBJETO SERVER El objeto Server proporciona funciones que no están relacionadas entre sí de ninguna forma excepto en el sentido de que son útiles para el diseñador de aplicaciones Internet. Quizá la función más importante de todos los objetos Server sea el método Create0bject, que permite crear instancias de componentes Active X. El componente puede ser bien un componente integrado que se comercialice con Visual InterDev o un componente que se desarrolla en cualquier lenguaje. En cualquier caso, para poder utilizar un componente ActiveX del lado del servidor, se deberá emplear el método CreateObject. CreateObjet toma como argumento el ProgID del componente ActiveX que se desea utilizar. Un ProgID es un nombre descriptivo para un componente, tal como Hoja.Excel o Word.Basi. La siguiente instrucción muestra la forma en que deberá utilizar el método CreateObject para generar una instancia de un componente de correo electrónico cuyo ProgID sea Conector.Correo: Set MiObjeto = Server.CreateObject ("Conector.Correo") 3.4 COMPONENTES DE ACTIVE SERVER PAGES Los componentes de ASP son realmente componentes de ActiveX (como todos aquellos que pueda crear con Visual Basic, Visual C++ e, incluso, Visual J++). Estos componentes especiales, sin embargo, han sido desarrollados por Microsoft y se comercializan con Visual InterDev. Han sido diseñados para realizar tareas útiles y genéricas para servidores Web, 49 3. Acceso a bases de datos con Active Server Pages incluyendo el acceso a datos. Se podrá crear estos componentes en sus páginas Web utilizando el método CreateObject del objeto Server. Una vez creados, podrá acceder a sus propiedades y Métodos para llevar a cabo funciones diversas en su servidor. 3.4.1 COMPONENTES DE ACCESO A BASES DE DATOS El componente ASP de mayor utilidad es el denominado Database Access, también llamado objetos de datos ActiveX o ADO. Si se desea editar una base de datos en Web, se deberá emplear este componente. Y los objetos contenidos en él, para leer y escribir a fuentes de datos del tipo Open Database Connectivity (ODBC) (En el apéndice A se presenta una lista completa de los Objetos de Datos de ActiveX). El objeto Connection se crea mediante el método CreateObject del objeto Server y utiliza una variable para recibir el objeto al que se hace referencia. Una vez creado el objeto Connection, se puede utilizar para conectar con cualquier fuente de datos ODBC. El siguiente código establece una conexión con una fuente ODBC del tipo SQL Server, denominada Publicaciones: <% ‘ Declara una variable Dim objConnection ‘ Crea el objeto Connection Set objConnection = Server.CreateObject("ADODB.Connection") ‘ Abre la conexión con la fuente de datos objConnection.Open "Publicaciones", "sa", "" %> 50 3. Acceso a bases de datos con Active Server Pages En el listado anterior, objConnection es la variable utilizada como objeto de referencia, de la instancia del objeto Connection. Esta referencia tendrá acceso a todas las propiedades y métodos del objeto Connection. El método Open establece la conexión con la fuerte de datos y cuenta con tres argumentos nombre de la fuente de datos, ID del usuario y contraseña. Una vez abierta la conexión con la fuente de datos se podrá utilizar un objeto Recordset para Recuperar la información almacenada en la fuente de datos. El objeto Recorset permite ejecutar la instrucción SELECT de SQL y obtener un grupo de registros que cumplan con las condiciones indicadas en la instrucción SELECT. Al igual que sucede con el objeto Connection, se podrá crear el objeto de Recordset utilizando el objeto Server. En el siguiente ejemplo, el programa ejecuta una instrucción SELECT de SQL sobre la fuente de datos representada por la variable objConnection: <% Declara una variable Dim objRecordset ‘ Crea el objeto Recordset Set objRecordset = Server.CreateObject("ADODB.Recordset") ‘ Ejecuta la consulta SQL objRecordset.Open "SELECT *", objConnection %> Una vez que han sido extraídos los registros, se podrá emplear los metodos MoveFirst, MoveLast, MoveNext y MovePrevious para navegar por los distintos registros. El método Write del objeto Response podrá introducir los datos en una página Web que, posteriormente, importará el navegador. El listado siguiente muestra una página ASP de ejemplo que genera una lista de las editoriales contenidas en una base de datos de Publicaciones. <%@ LANGUAGE="VBScript" %> <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0"> <META HTTP-EQUIV="Content-Type" content="text/html; 51 3. Acceso a bases de datos con Active Server Pages charset=iso-8859-1"> <TITLE>Empleo de ADO</TITLE> </HEAD> <BODY> <% ' Declaración de variables Dim objConnection Dim objRecordset ' Creación de objetos Set objConnection = Server.CreateObject("ADODB.Connection") Set objRecordset = Server.CreateObject("ADODB.Recordset") ' Abrir conexión y ejecutar la consulta objConnection.Open "Publicaciones", "sa", "" objRecordset.Open "SELECT nombre_pub FROM Editores", objConnection %> <!-- Construir la lista del grupo de registros extraídos --> <SELECT SIZE=8> <% Do While Not ObjRecordset.EOF %> <!-- Crear cada entrada en la lista --> <OPTION><%=objRecordset("nombre_pub")%></OPTION> <% objRecordset.MoveNext Loop %> </SELECT> </BODY> </HTML> Administrar la información contenida en un objeto Recordset es una de las primeras tareas de programación que se debe realizar en cualquier aplicación Web orientada a datos. A menudo, una simple consulta da lugar a más filas de datos de las que se pueden mostrar razonablemente en pantalla. Por ejemplo, cuando se utiliza cualquier motor de búsqueda Internet. El sistema de búsqueda acepta una palabra clave y como resultado, muestra una lista con vínculos a los diferentes servidores que tengan relación con dicha palabra. Sin embargo, muchas veces existen miles de servidores Internet que contienen la clave introducida. Mostrar todos estos servidores en una única página Web es obviamente imposible. 52 3. Acceso a bases de datos con Active Server Pages La solución a este tipo de situaciones es la paginación. Este sistema es utilizado por casi todos los motores de búsqueda para mostrar, tan sólo, una parte de los resultados de búsqueda, es decir, unos diez registros por vez. De esta forma, el usuario puente gestionar, de forma efectiva la información obtenida. Los ADO permiten la paginación mediante el empleo de varias propiedades del objeto Recordset: PageSize. PageCount y AbsolutePage. Cuando se emplea objetos ADO para recuperar un grupo de registros se podrá especificar, que la lista de registros quede dividida en varias paginas. Al asignar el valor para la propiedad PageSize se especifica el número de filas que tendrá cada una de las paginas que mostraran la lista de registros. También se podrá calcular el número total de paginas que va ocupar dicho grupo de registros sin más que utilizar la propiedad PageCount. Si se desea acceder a una pagina con un número específico, deberá utilizar la propiedad AbsolutePage. El siguiente listado muestra un ejemplo completo de paginación que permite al usuario examinar registros en grupos de diez <%@ LANGUAGE="VBScript" %> <%Response.Expires=0%> <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0"> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> <TITLE>Registro de paginación</TITLE> </HEAD> <BODY> <% ' ¿En qué página estamos? Select Case Request.QueryString("Direction") Case "" Session("CurrentPage") = 1 Case "Next" Session("CurrentPage") = Session("CurrentPage") + 1 53 3. Acceso a bases de datos con Active Server Pages Case "Previous" Session("CurrentPage") = Session("CurrentPage") - 1 End Select ' Constantes Const adOpenKeyset = 1 ' Declaración de variables Dim objConnection Dim objRecordset ' Apertura de la base de datos Set objConnection = Server.CreateObject("ADODB.Connection") objConnection.Open "Biblio", "", "" ' Creación de la instrucción SQL Dim strSQL strSQL strSQL strSQL strSQL strSQL strSQL strSQL = = = = = = = strSQL strSQL strSQL strSQL strSQL strSQL strSQL & & & & & & & "SELECT Authors.Author, Titles.Title, " "Publishers.`Company Name` FROM Authors, " "`Title Author`, Titles, Publishers " "WHERE Authors.Au_ID = `Title Author`.Au_ID " "AND `Title Author`.ISBN = Titles.ISBN " "AND (Publishers.`Company Name` LIKE " "'%Microsoft%') ORDER BY Authors.Author" ' Creación grupo de registros Set objRecordset = Server.CreateObject("ADODB.Recordset") objRecordset.PageSize = 10 objRecordset.Open strSQL, objConnection, adOpenKeyset objRecordset.AbsolutePage = CLng(Session("CurrentPage")) ' Mostrar los resultados %> <P>Page <%=Session("CurrentPage")%> of <%=objRecordset.PageCount%></P> <TABLE BORDER> <TR> <TH> Author </TH> <TH> Title </TH> <TH> Publisher </TH> </TR> <% Dim i For i = 1 To objRecordset.PageSize %> <TR> <TD> <%=objRecordset("Author")%> </TD> <TD> <%=objRecordset("Title")%> </TD> 54 3. Acceso a bases de datos con Active Server Pages <TD> <%=objRecordset("Company Name")%> </TD> </TR> <% objRecordset.MoveNext Next %> </TABLE> <!-- Hipervínculo Siguiente --> <%If CLng(Session("CurrentPage")) < objRecordset.PageCount Then %> <P><A HREF="listado.asp?Direction=Next">Página Siguiente</A></P> <%End If%> <!-- Hipervínculo anterior --> <%If CLng(Session("CurrentPage")) > 1 Then %> <P><A HREF="listado.asp?Direction=Previous">Página anterior</A></P> <%End If%> <% ' Cierre de la base de datos objRecordset.Close objConnection.Close Set objRecordset = Nothing Set objConnection = Nothing %> </BODY> </HTML> En el ejemplo anterior se utilizan varias técnicas en las que se profundizará. En primer lugar el programa solo necesita un único archivo ASP para llevar a cabo todo el proceso de paginación. El programa llama siempre al mismo archivo ASP una vez tras otra para cada pagina de datos. Normalmente cuando se llama a una pagina Internet Explorer la localiza en la RAM. En este ejemplo, la pagina siempre se encontrara en la RAM por que se la llama de manera recursiva. Sin embargo el problema que se plantea cuando se recupera una pagina almacenada en la RAM es la que consulta no se llevará a cabo a menos que ejecuten el código del servidor. Se tendrá que evitar que IE 4.0 utilice el archivo ASP que se encuentra previamente en la RAM. Para forzar las vuelta al servidor se deberá asignar el valor 0 a la propiedad Expired del objeto Response. Esta instrucción hace que se refresque el archivo en cada petición y, como resultado se obtiene el comportamiento adecuado. 55 3. Acceso a bases de datos con Active Server Pages También se debe observar que el código ejecuta la misma consulta cada vez que se llama a la pagina, modificando únicamente la propiedad AbsolutePage. Ejecutar una y otra vez la misma consulta puede parece inútil, pero esta operación requiere menos recursos que el almacenamiento de grandes objetos Recordset en variables de sección y obligar a que su valor perdure en todas las paginas. Si en un servidor accedido por cientos de usuarios, cada uno de los cuales maneja un objeto Recordset en una variable de sesión, de esta forma pronto se colapsaría el servidor. Al emplear los objetos ADO se podrá acceder a los datos utilizando las instrucciones SQL adecuadas. Se podrá realizar las consultas utilizando procedimientos SQL almacenados en el servidor o empleando instrucciones SELECT del SQL. Las actualizaciones se ejecutarán utilizando instrucciones UPDATE de SQL y el método Execute del objeto Connection. 3.4.2 COMPONENTES DE ACCESO A ARCHIVOS El componente File Access (acceso a archivo) permite acceder a archivos de texto almacenados en un servidor Web. Este componente consta, en realidad, de dos objetos independientes: el objeto FileSystem. que se utiliza para abrir y cerrar archivos, y el objeto TextStream, que se utiliza para leer y escribir. Para abrir un archivo que se desea acceder, se deberá crear, en primer lugar, un objeto FileSystem con el método CreateObject del objeto Server. Una vez que haya creado una instancia del objeto FileSystem se podrá emplear el método CreateTextFile para crear un nuevo archivo o el método OpenTextFile para abrir un archivo existente. En cualquier caso, el 56 3. Acceso a bases de datos con Active Server Pages resultado es un objeto TextStream que permitirá leer y escribir. Las siguientes instrucciones muestran cómo utilizar los objetos para acceder a un archivo denominado DATOS.TXT: Set objFile = Server.CreateObject("Scripting.FileSystemObject") Set objStream = objFile.OpenTextFile("DATOS.TXT") Una vez creado el objeto TextStream, se podrá utilizar cualquier método disponible para leer o escribir el archivo. Sin embargo, se deberá tener en cuenta que, normalmente, cualquier archivo se abrirá para lectura o para escritura. no para realizar ambas operaciones de forma simultánea. Este hecho puede afectar en gran manera el código contenido en su página ASP, requiriéndose la apertura y el cierre de un archivo, para luego tener que volver a abrirlo para realizar una operación distinta. Además de las simples operaciones de escritura y lectura, el componente File Access también le será útil para crear contenidos dinámicos. Si se desea generar un programa que muestre un consejo o mensaje distinto cada vez que se acceda a la pagina Web, se podrá emplear el código siguiente. En este caso se muestra un ejemplo completo que mostrará aleatoriamente mensajes generados en Visual Basic. La clave para mostrar mensajes de forma aleatoria es crear un archivo de texto que contenga una lista completa de frases (una frase por línea). Posteriormente, se podrá acceder a los mensajes de forma aleatoria utilizando el método ReadLine del objeto TextStream. En la página, se introducirá una única línea utilizando el método Write del objeto Response. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> <META NAME="GENERATOR" content="Microsoft FrontPage 2.0"> <TITLE>Trucos de VB</TITLE> </HEAD> 57 3. Acceso a bases de datos con Active Server Pages <BODY BGCOLOR="#FFFFFF"> <% ' Declaración de variables Dim objArchivo Dim objCadena ' Apertura del archivo Set objArchivo = _ Server.CreateObject("Scripting.FileSystemObject") Set objCadena = _ objArchivo.OpenTextFile(Server.MapPath("/ASP") & "tips.txt") Randomize Timer intLine = Int(Rnd * 19) For i = 0 to intLine objCadena.SkipLine Next strText = objCadena.ReadLine objCadena.Close Set objCadena = Nothing Set objArchivo = Nothing %> <CENTER><H1>Truco del día de Visual Basic</H1></CENTER> <%=strText%> </BODY> </HTML> 3.4.3 COMPONENTE CAPACIDAD DEL NAVEGADOR El componente Browser Capabilities (capacidad del navegador) identifica el navegador que está accediendo al servidor y proporciona un acceso programático a la lista de funciones soportadas por el navegador. Este componente representa una importante ventaja para los diseñadores Web que intenten desarrollar aplicaciones, tanto para Internet Explorer como para Netscape Navigator. Al utilizar este componente, se podrá adaptar la página Web a un determinado navegador. El componente Browser Capabilities utiliza la cadena del agente de usuario del navegador para identificar al mismo. El navegador pasa al servidor la cadena del agente de 58 3. Acceso a bases de datos con Active Server Pages usuario cada vez que solicita el acceso a una página Web. Por ejemplo, la cadena del agente de usuario de IE 4.0 tiene el siguiente aspecto. Mozilla 4.0 (compatible; MSIE 4.0; Windows 95) Para poder determinar las funciones disponibles en un determinado navegador, el componente BrowserCapabilities compara la cadena del agente de usuario del navegador con los registros existentes en un archivo especial de inicialización, denominado BROWSCAP.INI. Cuando el componente BrowserCapabilities encuentre la cadena del agente de usuario adecuada en el archivo, todas las funciones listadas para el navegador asociado se encontrarán accesibles como propiedades del componente. El listado siguiente muestra la parte del archivo BROWSCAP.INI que se corresponde con IE 4.0. [Mozilla /4.0 (compatible; MSIE 4.0; Windows 95)] Browser =IE Version = 4.0 majorver = # 4 minorver = # 0 frames = TRUE tables = TRUE cookies = TRUE backgrounsdsounds = TRUE vbscript = TRUE javascript = TRUE javaapplets = TRUE ActiveXControls = TRUE Win16 = False beta = False AK = False SK= False AOL = False crawler = False Utilizar el componente BrowserCapabilities es similar a introducir una instrucción de compilación condicional en una página ASP. Podrá construir instrucciones If...Then sencillas que afecten en gran medida al contenido final. Por ejemplo, el siguiente listado envía una etiqueta <OBJECT> a un navegador compatible con los controles ActiveX, una etiqueta <APPLET> a 59 3. Acceso a bases de datos con Active Server Pages una navegador compatible con Java o un mensaje de texto a los navegadores que no cuenten con ninguna de las funciones anteriores. <%@ LANGUAGE="VBScript" %> <%Response.Expires=0%> <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0"> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> <TITLE>Capacidad del navegador</TITLE> </HEAD> <BODY> <CENTER> <% ' Creación del componente Capabilities del navegador Dim objNavegador Set objNavegador = _ Server.CreateObject("MSWC.BrowserType") ' Búsqueda de las funciones que se podrán utilizar %> <% If objNavegador.ActiveXControls Then %> <H1>Controles ActiveX</H1> <SCRIPT LANGUAGE="VBScript "> <!-Sub Window_OnLoad() pathBall.Target = objBall.Style End Sub --> </SCRIPT> <!-- Control estructurado de gráficos --> <OBJECT ID="objBall" STYLE="POSITION:ABSOLUTE;HEIGHT:70; WIDTH:110;TOP:0;LEFT:0;ZINDEX:0" CLASSID= "CLSID:5FD6A143-372A-11D0-A521-0080C78FEE85"> <PARAM NAME="Línea0001" VALUE="SetLineColor(255,255,255)"> <PARAM NAME="Línea0002" VALUE="SetFillColor(255,0,0,0,0,255)"> <PARAM NAME="Línea0003" VALUE="SetFillSTYLE(1)"> <PARAM NAME="Línea0004" VALUE="SetLineSTYLE(1)"> <PARAM NAME="Línea0005" VALUE="Oval(0,-25,50,50,0)"> </OBJECT> <!-- Control de camino --> 60 3. Acceso a bases de datos con Active Server Pages <OBJECT ID="pathBall" CLASSID= "CLSID:E0E3CC60-6A80-11D0-9B40-00A0C903AA7F"> <PARAM NAME=AutoStart VALUE=-1> <PARAM NAME=XSeries VALUE="0,0;30,0;45,0;52,0;55,0"> <PARAM NAME=YSeries VALUE="0,0;30,80;45,160;52,240;55,320"> <PARAM NAME=EdgeAction VALUE="1"> <PARAM NAME=TickInterval VA LUE=10> </OBJECT> <%ElseIf objNavegador.JavaApplets Then%> <H1>Aplicación Java</H1> <APPLET CODE="marquee.class" HEIGHT=40 WIDTH=400> <PARAM NAME="CAPTION" VALUE="¡El Java es maravilloso!"> </APPLET> <%Else%> <!-- Navegador textual --> <H1>¡No es compatible con ningún tipo de componentes!</H1> <%End If%> </CENTER> </BODY> </HTML> 3.4.4 COMPONENTE AD ROTATOR El componente Ad Rotator (rotor publicitario) ha sido diseñado específicamente para aquellos servidores que alquilen espacios publicitarios. Este componente proporciona un buen método para controlar la rotación de las imágenes publicitarias almacenadas en el servidor. Lee la información relacionada con los anuncios desde un archivo de texto especial que es el encargado de decir qué hay que mostrar y durante cuánto tiempo. Utilizar el componente Ad Rotator es tan simple como crear el componente y leer el archivo de texto. El siguiente listado muestra un ejemplo de su uso: <% Dim Ad Set Ad = Server.Createobject("MSWC.AdRotator") Response.Write Ad.GetAdvertisement("ADS.TXT") %> 61 3. Acceso a bases de datos con Active Server Pages El archivo de texto leído por Ad Rotator cuenta con una estructura muy clara que determina la imagen a visualizar, especifica el porcentaje de tiempo que se mostrará la imagen, y proporciona un hipervínculo que se activará cuando se pulse sobre el anuncio publicitario. 3.4.5 COMPONENTE DE VINCULACIÓN DE CONTENIDOS El componente Content Linking (vinculación de contenidos) ha sido diseñado para la publicación en línea de revistas y periódicos. Este componente enlaza páginas Web independientes, permitiendo la navegación ininterrumpida por ellas. Al igual que Ad Rotator, el componente Content Linking depende de un archivo de texto para poder crear la publicación. El archivo, conocido como Content Linking List (Lista de vinculación de contenidos) proporciona una lista de las páginas Web vinculadas y una descripción de cada una de ellas. Para emplear el componente Content Linking sólo necesitará crear el componente y leer el archivo de texto asociado. La instrucción a utilizar es la siguiente: <%Set objLinker = Server.CreateObject("MSWC.NextLink") %> Una vez creada la publicación, se podrá utilizar diversos métodos, por ejemplo GetNextURL y GetPreviousURL para navegar por las páginas. Las descripciones de cada página se podrán obtener mediante los métodos GetNextDescription y GetPreviousDescription. Estos valores pueden utilizarse para generar hipervínculos con otras páginas contenidos en la publicación. Las instrucciones necesarias son: 62 3. Acceso a bases de datos con Active Server Pages <A HREF="<ObjLinker.GetNextURL%'> <%=objLinker.GetNextDescription%> </A> 3.4.6 EMPLEO DE OTROS COMPONENTES ACTIVEX Además de poder utilizar todos los componentes proporcionados por Visual InterDev se podrá crear componentes ActiveX propios para el ASP. Una vez creado un nuevo componente, se podrá utilizarlo de la misma forma que se usa cualquier otro componente (mediante el método CreateObject o el objeto Server). Solo se tendrá que proporcionar el ProgID asociado con el componente que se acaba de crear. Esta función es una herramienta de gran potencia que permitirá extender el ASP para incluir las funciones que se necesiten 63 4. Consideraciones de implementación y desarrollo de una aplicación 4.- CONSIDERACIONES DE IMPLEMENTACIÓN Y DESARROLLO DE UNA APLICACIÓN En el presente capítulo se presentan los antecedentes que deben de considerarse para el desarrollo e implementación de una aplicación en Internet, así como la presentación de una aplicación práctica. 4.1 CONSIDERACIONES EN DISEÑO DE BASES DE DATOS PARA INTERNET 4.1.1 SEGURIDAD Uno de los principales aspectos a considerar es la seguridad brindada a los datos. Si el gateway (una de las funciones de los gateway es recibir datos transferidos desde un navegador Web mediante un servidor HTTP y transformarlos a un formato que la base de datos pueda entender) no admite a los usuarios no podrán eliminar datos accidentalmente, o intencionalmente; lo mismo aplica a la consulta e inserción de datos o la modificación de éstos. Poner una base de datos a disposición a Internet es cosa seria. La mayoría de los usuarios de Internet son personas bien intencionadas que no pretenden hacer un mal uso de las computadoras conectadas a Internet, sin embargo, hay otros que gozan dañando todo lo que pueden. Si se restringe el acceso sólo para efectuar consultas o los accesos a la base de datos son mediante una contraseña proporcionada por el gateway, evita que algún intruso haga algo desagradable en la base de datos. 4.1.2 INTEGRIDAD DE LA BASE DE DATOS Hacer inserciones, actualizaciones y eliminación en una base de datos requiere de un procesamiento más complejo que hacer simples consultas, a continuación mencionaremos algunas consideraciones a tomar en cuenta : 64 4. Consideraciones de implementación y desarrollo de una aplicación ? El código de inserción debe verificar que existan los datos en la base antes de intentar insertarlos, con el fin de evitar la duplicidad de información. ? El código de actualización debe asegurarse que la información exista, antes de tratar de modificarla, ya que otro usuario pudo haber borrado antes. ? Las eliminaciones deben quedar restringidas a un grupo reducido y confiable para evitar la eliminación de datos necesarios. 4.1.3 CONTROL DE ACCESO Las transacciones de base de datos deben escribirse con cuidado para evitar que varios usuarios puedan cambiar el mismo dato al mismo tiempo. Esto implica la utilización de transacciones que bloquen la información para asegurar que en un momento dado, sólo un usuario pueda cambiar un dato. Si las transacciones efectuadas por el gateway comprenden más de una tabla o requiere varias acciones, como inserciones y actualizaciones dentro de la misma transacción, los datos afectados deben bloquearse durante ésta para evitar que se dañe la base de datos. No importa si dos usuarios consultan la misma información al mismo tiempo porque los datos no cambian, pero en el caso de una actualización, los cambios de un usuario pueden sobreescribir las modificaciones de otro, o parte de la información puede reflejar algunos cambios, en tanto que otra parte exhibe otras modificaciones. 65 4. Consideraciones de implementación y desarrollo de una aplicación 4.2 CONSIDERACIONES EN LA DEFINICIÓN DE TABLAS DE LA BASE DE DATOS 4.2.1 EVITAR LA REDUNDANCIA DE DATOS Una solución a este problema es dividir la tabla con información redundante en dos tablas, creando a la tabla con la información redundante con una llave primaria, la cual sirva de referencia para la tabla de consulta. 4.2.2 INDEXAR LAS TABLAS Una vez que los registros contengan claves primarias debe crearse un índice en cada clave. Los índices agilizan las búsquedas y disminuyen la cantidad de trabajo que el servidor de la base de datos debe hacer al buscar los datos. La información sin índices requiere que el motor de la base busque en todos los registros y los compre con el valor que se desea encontrar. 4.2.3 UTILIZAR RESTRICCIONES REFERENCIALES Crear reglas que indique a la base cuándo están completos los datos escritos, así como indicar cuando un campo de un registro depende de otro almacenado en otro registro. Ya que las restricciones referenciales funcionan tanto en la inserción de datos como en la eliminación es recomendable evitar ciclos referenciales ya que si no se creará un interbloqueo que evitará la eliminación de datos. 66 4. Consideraciones de implementación y desarrollo de una aplicación 4.2.4 PRESERVACIÓN DE LA INTEGRIDAD DE LOS DATOS Las eliminaciones descuidadas, o las restricciones referenciales no cumplidas pueden dejar trozos de información inútil estorbando en una base de datos, que afectan al rendimiento y ocupan espacio. Asegurar la integridad de la información requiere disciplina y cuidado extremo durante el diseño del esquema de la base y las dependencias entre los datos, cualquier inserción, actualización y eliminación debe efectuarse en el orden correcto, y debe cubrir todas las tablas y campos que constituyen un registro completo, de otra forma, pueden dejarse trozos de datos incoherentes después que se lleven a cabo los procesos. Cualquier aplicación que manipule los datos debe ejecutar transacciones meticulosamente y corroborar cada paso para asegurar que cada fase se ha llevado a cabo con éxito antes de proceder con la siguiente; si ocurre algún error, la información debe devolverse a su estado original para evi tar la inserción o el borrado de una parte del registro. 67 4. Consideraciones de implementación y desarrollo de una aplicación 4.3 APLICACIÓN DE CONTROL DE INVENTARIO EN LA ADMINISTRACIÓN REGIONAL JURÍDICA DE INGRESOS DE OCCIDENTE 4.3.1 OBJETIVO Desarrollar una aplicación que permita mantener actualizado los inventarios de insumos informáticos en la Administración Regional Jurídica de Ingresos de Occidente, a fin de poder dotar y distribuir equitativamente los insumos en la región. 4.3.2 INFRAESTRUCTURA UTILIZADA Para la implementación de la aplicación se utilizó la infraestructura de red o Intranet interna de la Secretaría de Hacienda y Crédito Público dentro de la cual pertenece la Administración Local Jurídica de Ingresos de Colima 4.3.3 MANEJADOR DE BASE DE DATOS Para el almacenamiento de los datos se construyó una base de datos, ya que éste cuenta con las siguientes bondades: ? Soporta todos los atributos de un modelo relacional, como son llave primaria, relaciones entre tablas, así como control de integridad referencial. ? Tiene ambiente gráfico e interactivo e incluye macros y capacidades de programación automáticas para procesar tareas sobre los datos. 68 4. Consideraciones de implementación y desarrollo de una aplicación ? Tiene una programación orientada a objetos, Puede ser usado como Front End para otras tecnologías ODBC cliente-servidor como son: Oracle, Sybase o Microsoft SQL server. ? Sigue el estándar SQL (Structure Query Language) para consultas y manipulación de datos. ? Está basado en un sofisticado motor de base de datos llamado JET (Joint Engine Technology) de alto desempeño. ? Puede importar o encadenar datos de varias fuentes, incluyendo documentos HTML. Los datos fuentes pueden residir en un servidor FTP o HTML. ? Cuenta con un tipo de dato HiperLink que permite que se inserten direcciones del Web en las tablas de la base de datos. Entre otras son las capacidades de Access que lo hacen una buena herramienta de manejo de base de datos. Por ello de creó la base de datos insumos, (la cual de describe en el apéndice B), la cual permita registrar los insumos de cada una de las Administraciones Locales. 69 4. Consideraciones de implementación y desarrollo de una aplicación 4.4 DESCRIPCIÓN DE LA APLICACIÓN DE CONTROL DE INSUMOS La aplicación se incluye en la página de la Administración Regional Jurídica de Ingresos de Occidente (fig. 4-1), dentro del capítulo de Informática (fig. 4-2), validando por una clave de usuario solo a los encargados del control de los insumos (fig. 4 -3). Figura 4-1. Página de la Administración Regional Jurídica de Ingresos de Occidente 70 4. Consideraciones de implementación y desarrollo de una aplicación Figura 4-2. Capítulo de Informática de la Página de la Administración Regional Jurídica de Ingresos de Occidente. Figura 4-3. Control de Acceso a usuarios. 71 4. Consideraciones de implementación y desarrollo de una aplicación A continuación se describen las opciones que forman la herramienta que se describe, así como la presentación del código básico utilizado en cada opción. El código fuente total utilizado de describe en el apéndice C. El código utilizado para el control de acceso es el siguiente: <form action="insumosmenu.asp" method="post" name="Formacusar"> <div align="center"><center><p><font face="Arial" color="#800000"><strong><small>Clave de Acceso:</small></strong></font> <input id="passwd" name="passwd" type="password" maxlength="10" size="20"> <input id="submit1" name="submit1" type="submit" value="Identificar"></p> </center></div> </form> </font> y la validación en la base de datos se realiza mediante el siguiente: Set cn=Server.CreateObject("ADODB.Connection") Set rs=Server.CreateObject("ADODB.Recordset") cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos" rs.Open "Select * from usuarios where cla_usuario = '" & Request.Form("passwd") & "'", cn 4.4.1 ENTRADA DE DATOS Los movimientos registrados a los insumos al inventario se realizan a través de la siguiente forma (fig 4-4): 72 4. Consideraciones de implementación y desarrollo de una aplicación Figura 4-4. Registro de movimientos al inventario. Esta forma es generada por el siguiente código: <form method="post" action="insumoguardarmov.asp" onsubmit="return FrontPage_Form1_Validator(this)" name="FrontPage_Form1"> <p style="line-height: 7px"><font face="Arial" size="2"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Insumo</strong></font>: <select id="insumo" name="insumo" style="HEIGHT: 22px; WIDTH: 291px" size="1" tabindex="1"> <% rs.MoveFirst do while not rs.EOF %> <option value="<%=rs("cod_insumo")%>"><%=rs("des_insumo")%></option> <% rs.movenext Loop rs.movefirst %> </select> <input type="text" name="txtinsumo" size="20" id="txtinsumo" style="background-color: rgb(255,255,255); color: rgb(255,255,255); border: medium none" value="<%=rs("cod_insumo")%>"></p> <p style="line-height: 7px"><strong><font face="Arial" size="2">Movimiento</font></strong> : <select id="movimiento" name="movimiento" style="HEIGHT: 22px; WIDTH: 120px" size="1" tabindex="2"> <option value="Entrada">Entrada</option> <option value="Salida">Salida</option> </select><input type="text" name="txtmovimiento" size="20" id="txtmovimiento" 73 4. Consideraciones de implementación y desarrollo de una aplicación style="background-color: rgb(255,255,255); color: rgb(255,255,255); border: medium none" value="Entrada"></p> <p style="line-height: 7px"><strong><font face="Arial" size="2">&nbsp;&nbsp;&nbsp; Cantidad</font></strong> : <input id="txtcantidad" name="txtcantidad" style="HEIGHT: 22px; WIDTH: 89px" size="20" tabindex="3"><input type="text" name="txtnumadm" size="20" id="txtnumadm" style="background-color: rgb(255,255,255); color: rgb(255,255,255); border: medium none" value="<%=vnuma dm%>"><input type="text" name="txtcodusu" size="20" id="txtcodusu" style="background-color: rgb(255,255,255); color: rgb(255,255,255); border: medium none" value="<%=Request.QueryString("txtcodusu")%>"></p> <p style="line-height: 7px"><strong><font face="Arial" size="2">Descripción</font></strong> : <!--webbot bot="Validation" startspan I-Maximum-Length="50" --><!-webbot bot="Validation" endspan --><textarea id="txtdesmov" name="txtdesmov" style="HEIGHT: 35px; WIDTH: 328px" rows="1" cols="31" tabindex="4"></textarea></p> <div align="left"><p style="line-height: 7px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input id="submit1" name="submit1" type="submit" value="Registrar"></p> </div> </form> 4.4.2 REPORTES A fin de emitir los resultados de los movimientos registrados se presentan los listados : 1. Inventario Regional de Jurídica de Ingresos de Occidente. fig. 4-5 2. Impresión de Insumos. fig. 4-6 3. Impresión de Movimientos. fig. 4-7 74 4. Consideraciones de implementación y desarrollo de una aplicación Figura 4-5. Inventario Regional de Jurídica de Ingresos de Occidente. Figura 4-6. Impresión de Insumos. 75 4. Consideraciones de implementación y desarrollo de una aplicación Figura 4-7. Impresión de Movimientos. El código básico para generar dichos reportes es : ? Inventario Regional de Jurídica de Ingresos de Occidente <% public cn,rs, vnuminsumos, vexpresion, vcaninsumo vnuminsumos = 0 vexpresion = "Select * from insumosinv order by des_insumo" Set cn=Server.CreateObject("ADODB.Connection") Set rs=Server.CreateObject("ADODB.Recordset") cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos" rs.Open vexpresion, cn %> <p align="center"><font color="mediumblue" face="Rockwell">Control de Insumos Informáticos ARJI Occidente</font></p> <p align="center"><strong><font color="brown" face="Rockwell">Inventario Regional Occidente</font></strong></p> <p align="center"><strong><font color="black" face="Rockwell"><%=date()%></font></strong></p> <table border="1" cellPadding="1" cellSpacing="1"> <tr> 76 4. Consideraciones de implementación y desarrollo de una aplicación <td width="1100"><font face="Arial" size="2"><strong>Descripción del Insumo</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Occ</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Gdl</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Sur</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Zap</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Ags</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Guz</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Col</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Ptv</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Tpc</strong></font></td> <td width="60"><p align="center"><font face="Arial" size="2"><strong>TOTAL</strong></font></td> </tr> <%if rs.EOF = false then rs.MoveFirst do while not rs.EOF%> <tr> <td><font face="Arial" size="2"><%=rs("des_insumo")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo00")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo01")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo02")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo03")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo04")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo05")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo06")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo07")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo08")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo")%></font></td> </tr> <% vnuminsumos = vnuminsumos + rs("can_insumo") rs.MoveNext Loop end if rs.close%> </table> 77 4. Consideraciones de implementación y desarrollo de una aplicación ? Impresión de Insumos. <% public cn,rs, vnuminsumos, vexpresion, vcaninsumo vnuminsumos = 0 vexpresion = "Select * from usuarios where cod_usuario = '" + Request.QueryString("txtcodusu") + "'" Set cn=Server.CreateObject("ADODB.Connection") Set rs=Server.CreateObject("ADODB.Recordset") cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos" rs.Open vexpresion, cn rs.movefirst vcaninsumo = "can_insumo" + rs("adm_usuario") %> <p align="center"><font color="mediumblue" face="Rockwell">Control de Insumos Informáticos ARJI Occidente</font></p> <p align="center"><strong><font color="brown" face="Rockwell">Impresión de Inventario</font></strong></p> <p align="center"><font color="red"><%=rs("nom_usuario")%></font></p> <p align="center"><strong><font color="black" face="Rockwell"><%=date()%></font></strong></p> <%rs.close vexpresion = "Select * from insumosinv where " + vcaninsumo + " <> 0 order by des_insumo" rs.Open vexpresion%> <table border="1" cellPadding="1" cellSpacing="1" width="75%"> <tr> <td><font face="Arial" size="2"><strong>Descripción del Insumo</strong></font></td> <td><p align="center"><font face="Arial" size="2"><strong>Cantidad</strong></font></td> </tr> <%if rs.EOF = false then rs.MoveFirst do while not rs.EOF%> <tr> <td><font face="Arial" size="2"><%=rs("des_insumo")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs(vcaninsumo)%></font></td> </tr> <% vnuminsumos = vnuminsumos + rs(vcaninsumo) rs.MoveNext Loop end if rs.close%> </table> 78 4. Consideraciones de implementación y desarrollo de una aplicación ? Impresión de Movimientos. <% public cn,rs, vnuminsumos, vexpresion, vnumadm vnuminsumos = 0 vexpresion = "Select * from usuarios where cod_usuario = '" + Request.QueryString("txtcodusu") + "'" Set cn=Server.CreateObject("ADODB.Connection") Set rs=Server.CreateObject("ADODB.Recordset") cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos" rs.Open vexpresion, cn rs.movefirst vnumadm = rs("adm_usuario") %> <p align="center"><font color="mediumblue" face="Rockwell">Control de Insumos Informáticos ARJI Occidente</font></p> <p align="center"><strong><font color="brown" face="Rockwell">Movimientos al Inventario</font></strong></p> <p align="center"><font color="red"><%=rs("nom_usuario")%></font></p> <p align="center"><strong><font color="black" face="Rockwell"><%=date()%></font></strong></p> <%rs.Close rs.Open "Select insumosinv.des_insumo,insumosmov.can_movinsumo, insumosmov.fec_movinsumo,insumosmov.des_movinsumo from insumosmov,insumosinv where insumosmov.adm_movinsumo = '" + vnumadm + "' and insumosmov.cod_movinsumo=insumosinv.cod_insumo order by insumosmov.fec_movinsumo", cn %> <table border="1" cellPadding="1" cellSpacing="1" width="611"> <tr> <td width="215"><font face="Arial" size="2"><strong>Descripción del Insumo</strong></font></td> <td width="69"><font face="Arial" size="2"><strong><p align="center">Cantidad</strong></font> </td> <td width="113"><font face="Arial" size="2"><strong>Fecha</strong></font> </td> <td width="190"><strong><font face="Arial" size="2">Descripción</font></strong></td> </tr> <%if rs.EOF = false then rs.MoveFirst do while not rs.EOF%> <tr> <td width="215"><font face="Arial" size="2"><%=rs("des_insumo")%></font></td> <td width="69"><p align="center"><font face="Arial" size="2"><%=rs("can_movinsumo")%> </font></td> <td width="113"><font face="Arial" size="2"><%=rs("fec_movinsumo")%></font></td> <td width="190"><font face="Arial" size="2"><%=rs("des_movinsumo")%></font> </td> </tr> 79 4. Consideraciones de implementación y desarrollo de una aplicación <% vnummov = vnummov + 1 rs.MoveNext Loop end if%> </table> 80 5. Elección de la tecnología más adecuada 5. ELECCIÓN DE LA TECNOLOGÍA MÁS ADECUADA Si se desea diseñador páginas Web con manejo de bases de datos, se podrá constatar que existe un número elevado de opciones para crear diseños empresariales que puedan ejecutarse en un navegador. Las tecnologías actuales presentan un panorama muy completo que dificultan la selección del grupo de herramientas más adecuado para llevar a cabo un determinado proyecto. Este capítulo se examina algunos de los temas clave involucrados en las soluciones basadas en Web y proporcionan criterios que serán útiles para seleccionar las tecnologías necesarias para crear una aplicación. 5.1 CONSIDERACIONES SOBRE LA PLATAFORMA CLIENTE Sin ninguna duda, el tema más importante a tener en cuenta a la hora de realizar una selección tecnológica es el navegador destino. Se deberá identificar los distintos navegadores que serán compatibles con la solución. Si el objetivo de la aplicación es proporcionar acceso público desde Internet, deberá dirigirse a la audiencia más amplia posible. Esto no significa que deberá ser compatible con todos los navegadores existentes. Si se intenta conseguir este objetivo, sólo podrá desarrollar páginas HTML simples sin marcos o tablas. Una solución escrita para el mínimo común denominador ofrece pocas funcionalidades o un aspecto visual poco atractivo. En la mayoría de los casos, ser compatible con Microsoft Internet Explorer y Netscape Navigator será suficiente para alcanzar el 90 por 100 de la audiencia deseada. Sin embargo, las sucesivas versiones de estos navegadores soportan diferentes niveles tecnológicos. Si se desea que su aplicación sea compatible con versiones anteriores de IE o NN (anteriores a 81 5. Elección de la tecnología más adecuada la 3.0) algunas de las técnicas más modernas no funcionarán correctamente. Incluso, limitar la solución atendiendo a la versión del navegador puede no ser suficiente para resolver el problema. El sistema operativo es también un tema a tener en cuenta en la elección. Por ejemplo, IE 3.0 sobre Microsoft Windows 3.11 no reconocerá la etiqueta <OBJECT>. Obviamente, las plataformas destino se convierten en el foco principal de la elección tecnológica. Se Podrá examinar casi infinitas combinaciones de navegadores y de sistemas operativos, pero aconsejamos que se centre en las soluciones más habituales y se tenga en cuenta la sugerencia de crear aplicaciones de amplio espectro. Para evitar el debate, supondremos que una solución independiente de la plataforma equivale a una aplicación que pueda leerse tanto en Internet Explorer como en Netscape Navigator, versiones 4.0 y posteriores. Incluso, en este dominio tan limitado, se encontrará suficiente opciones 5.2 COMPATIBILIDAD CON HTML Dentro de su limitado campo, todos los navegadores a los que se están haciendo referencia son compatibles con el estándar HTML 3.2. Esto no significa que se pueda utilizar cualquier etiqueta HTML. Muchas etiquetas no forman parte del estándar HTML y son propiedad privada de un determinado navegador. Por ejemplo, la etiqueta <LAYER>, de Netscape Navigator 4.0 (también conocido como Communicator) es un buen ejemplo de etiqueta que no es compatible con ningún otro navegador. <LAYER> se utiliza para crear capas invisibles en la versión del HTML Dinámico del Communicator. 82 5. Elección de la tecnología más adecuada Sin embargo, si se limita a manejar el estándar HTML 3.2 y posteriores, y se ignora las etiquetas propias de algunos navegadores, se conseguirán buenas aplicaciones. 5.3 COMPATIBILIDAD CON HTML DINÁMICO HTML Dinámico es naturalmente una nueva función de Internet Explorer 4.0 y no se encuentra presentada en las versiones anteriores de este programa Netscape Communicator, también es compatible con una versión de HTML dinámico o que puede generar algo de confusión con independencia de la implementación de esa tecnología. Aunque Netscape utiliza el mismo nombre para su tecnología de posicionamiento dinámico, esta tecnología es básicamente diferente del HTML dinámico que podrá encontrar en IE 4.0 En el caso de Communicator el usuario puede crear capas de contenidos que se podrán desplazar y cambiar de tamaño de forma dinámica. Estas capas se pueden crear utilizando una etiqueta <STILE> con un atributo de posición definido como ABSOLUTE o utilizando la etiqueta <LAYER>. Aunque se podrá crear en Communicator efectos que serán similares a los conseguidos en IE 4.0 o superior, se tendrá que realizar grandes esfuerzos si se desea crear una aplicación utilizando HTML dinámico que puede ejecutarse tanto en IE como en Communicator. 83 5. Elección de la tecnología más adecuada 5.4 COMPATIBILIDAD CON PROGRAMACIÓN En este caso, la elección es clara. Si desea utilizar la programación cliente para los productos de Microsoft y Netscape, te ndrá que utilizar JavaScript, lenguaje reconocido por todos los navegadores destino. Sin embargo; deberá tener en cuenta que JScript de Internet Explorer no actúa en la misma forma que el JavaScript de Navigator en lo que se refiere al trato de las mayúsculas y minúsculas. Internet Explorer también difiere de Netscape Navigator en la implementación de su modelo de objetos del navegador. Hablando en términos generales, el modelo de objetos de IE 4.0 y superior es bastante más rico que el que se podrá encontrar en cualquier otro navegador. Sin embargo, la mayor parte de este modelo se utiliza para unir la programación con el HTML dinámico. Por lo tanto, si se utiliza el modelo de objetos del navegador más allá de los simples objetos Window, Document y Form, se deberá tener cuidado para asegurarse de que el programa es ejecutable en todas las plataformas destino. 5.5 COMPATIBILIDAD CON ACTIVEX No obstante que ActiveX es desarrollado por Microsoft, Communicator ofrece cierto nivel de compatibilidad para las tecnologías ActiveX. Communicator es capaz de manejar documentos desarrollados con aplicaciones tales como Microsoft Word y Microsoft Excel, gracias a Automation. Esta función permite convertir documentos como parte de cualquier servidor para hacerlos compatibles con el navegador. Sin embargo, cualquier versión de Navigator anterior a Communicator no será compatible con los documentos ActiveX. 84 5. Elección de la tecnología más adecuada 5.6 JAVA Java es otra área donde la compatibilidad se encuentra bastante extendida. Sin embargo, deberá tene r en cuenta que Internet Explorer versión 3.0 y Netscape Navigator versión 3.0 son compatibles únicamente con la versión 1.0 del Kit de Desarrollo Java (JDK). La versión más reciente de Java, se encuentra plenamente soportada en IE. 4.0 o posterior así como en Netscape Communicator. 5.7 CONSIDERACIONES DEL LADO DEL SERVIDOR Las plataformas que pueden funcionar como servidores Web se clasifican en tres grandes categorías Windows, no-Windows y Proveedores de Servicios Internet. Las plataformas Windows son, obviamente, las herramientas que deberá seleccionar como el back end de cualquier aplicación Web. Active Server Pages, sólo se encuentra disponible bajo la plataforma Windows (aunque hay compañías que han creado versiones para otros sistemas). El problema se plantea cuando no pueda utilizar Windows. Internet Information Server y ASP como una solución Back.end. En este caso. deberá pensar en utilizar otras tecnologías disponibles. Las plataformas no -Windows pueden importar progamas clientes utilizando VBScript y JavaScript. También se podrá emplear componentes cliente de ActiveX. Aunque el servidor puede que no entienda los componentes, el navegador podrá solicitar la carga de un archivo, por lo que todo lo que tendrá que hacer será ocuparse de que los archivos se encuentren disponibles en el servidor y de que Internet Explorer pueda utilizarlos. Java también es eficaz. Una vez más, siempre que los archivos se 85 5. Elección de la tecnología más adecuada encuentren en el servidor, el navegador podrá recuperarlos. Lo que perderá con las plataformas no-Windows es la facilidad del uso y las prestaciones de Active Server Pages. Tal vez tenga que enfrentarse a tecnologías antiguas como la Common Gateway iterface (CGI). Si se está utilizando un Proveedor de Servicios Internet (ISP), se seguirá disponiendo de las tecnologías cliente. Siempre que pueda cargar programas, archivos DLL y archivos el CLASS, podrá utilizar VBScript, Javascript, ActiveX y Java. Algunos ISP también son compatibles con ASP en sus servidores. 86 6. Conclusiones 6 CONCLUSIONES ? Seleccionar una tecnología es una decisión en la que influyen muchos factores. Es decir, se tendrá que decidir si desea ejecutar una aplicación en Internet o en una Intranet, así como se debe verificarse el correcto funcionamiento del servidor utilizando todas las versiones disponibles de los navegadores a los que espera dar soporte. No se tendrá la seguridad absoluta de que el servidor se comporta en la forma deseada si no realiza una completa serie de pruebas basándose en múltiples plataformas. ? La seguridad es, ciertamente uno de los temas más importantes en un servidor Web. Sin seguridad, la información a través de Internet es susceptible al fraude y otros usos indebidos por parte de intermediarios. ? Con la integración de bases de datos en el Web, los usuarios de Internet o Intranet pueden obtener un medio que puede adecuarse a sus necesidades de información, con un costo, inversión de tiempo, y recursos mínimos, disminución del tiempo de actualización de páginas de Internet cuando la información presentada se localiza en bases de datos, así como, mejorar la capacidad de publicación de información presentada en Internet cuando esta es creada dinámicamente por consultas a bancos de información. 87 Apéndice A. Propiedades y métodos de los objetos y componentes de ASP APÉNDICE A PROPIEDADES Y MÉTODOS DE LOS OBJETOS Y COMPONENTES ACTIVE SERVER PAGES Control tabular de datos (TDC) Propiedades Nombre CharSet DataURL Descripción Una expresión de cadena que describe el conjunto de caracteres utilizado por el archivo de datos. Si no se suministra ningún valor, como archivo de entrada se tomará latin1.Si se opta por el valor por defecto o se introduce explícitamente el valor """, el Control Tabular de Datos será capaz de detectar automáticamente si el dato de entrada es un archivo Unicode. Es una cadena que especifica la dirección Internet del archivo de datos. Sintaxis Objeto.CharSet = Valor Objeto.DataURL = valor 88 Apéndice A. Propiedades y métodos de los objetos y componentes de ASP EscapeChar FieldDelim FilterColumn FilterCriterion FilterValue Language RowDelim Carácter especial que niega el efecto de otros caracteres utilizados para ejecutar funciones tales como la delimitación de campo y columna. Por ejemplo, si TextQualifier se define como " (comillas dobles) y se define la propiedad EscapeChar como \ (barra invertida), el siguiente archivo de datos se interpretará de forma correcta: "Este es un dato" "Un buen \ "dato\" es bueno" El carácter utilizado para marcar el final del campo de datos. El carácter por defecto es una coma. El nombre de una columna para filtrar el registro. Se utiliza conjuntamente con las propiedades FilterCriterion y FilterValue. Operador lógico que determina que registros se van amostrar. Este operador puede ser =, <>, <, >, >=, <=. Una expresión utilizada para comparar con la propiedad FilterColumn utilizando la propiedad ilterCriterion Una cadena que especifica que especifica el lenguaje del archivo textual de datos. El carácter utilizado para especificar el final de una fila de datos. Por defecto el retorno de carro. Objeto.EscapeChar = valor Objeto.FieldDelim = valor Objeto.FilterColumn = NombreColumna ObjetoFilterCriterion = Operador Objeto.FilterValue = valor Objeto.Languaje = lenguaje Objeto.RowDelim = valor 89 Apéndice A. Propiedades y métodos de los objetos y componentes de ASP SortAscending SortColumn TextQualifier Métodos Nombre Reset Un calor boleano que determina cómo la propiedad SortColumn utilizará a la columna especificada para ordenar los datos contenidos en el archivo de datos. Los valores son True o False. La columna que se utilizará con la propiedad SortAscending para clasificar las filas contenidas en el archivo de datos. Carácter utilizado para delinear las cadenas de texto contenidas en el archivo. El carácter utilizado por defecto es " (comillas dobles). Valor boleano que especifica si la primera fila en el archivo de datos contiene nombres para columnas. Objeto.SortAscending = boleano. Descripción Sintaxis Un método que obliga al TDC a reordenar los datos basándose en los nuevos valores de las propiedades. Objeto.Reset Objeto.SortColumn = NombreColumna Objeto.UseHeader = boleano Control avanzado de datos (ADC) Propiedades Nombre Connect Descripción La cadena utilizada para identificar la fuente de datos para el ADC. Sintaxis Objeto.Connect = "DSN=fuentedatos; UID=Idusuario; PWD=conraseña;" 90 Apéndice A. Propiedades y métodos de los objetos y componentes de ASP RecordSet Server SQL Métodos Nombre CancelUpdate MoveFirst, MoveLast, MoveNext, MovePrevious Refresh Una propiedad que permite acceder a los registros indicados contenidos en el ADC. Propiedad que indica el nombre del servidor y el protocolo utilizado para acceder a los datos. Instrucción SQL equivalente para el grupo de registros resultante. Objeto.RecordSet Objeto.Server = valor HTTP <PARAM NAME="server" VALUE="http//awebsrvr:puer to" HTTPS <PARAM NAME="server" VALUE="https//awebsrvr:pue rto" DCOM <PARAM NAME="server" VALUE="nombremáquina" In-process <PARAM NAME="server" VALUE="" Objeto.SQL = valor Descripción Sintaxis Método que cancela todos los cambios realizados en el grupo de registros. Métodos para navegar por las filas del conjunto de registros. Objeto.CancelUpdate Método que fuerza una nueva consulta sobre la base de datos. SubmitChanges Método que envía al servidor los cambios realizados Objeto.MoveFirst Objeto.MoveLast Objeto.MoveNext Objeto.MovePrevious Objeto.Refresh Objeto.SubmitChanges 91 Apéndice A. Propiedades y métodos de los objetos y componentes de ASP Objeto Application Métodos Nombre Lock UnLock Descripción Evita el acceso al conjunto de variables de la aplicación Permite acceder al conjunto de variables de la aplicación. Sintaxis Application.Lock Application.UnLock 92 Apéndice A. Propiedades y métodos de los objetos y componentes de ASP Objeto Session Propiedades Nombre SessionID Timeout Métodos Nombre Abandon Descripción Devuelve el número ID de la sesión actual Define o devuelve la duración de la sesión en minutos Descripción Termina sesión. inmediatamente Sintaxis Session.SessionID Session.Timeout Sintaxis la Session.Abandon 93 Apéndice A. Propiedades y métodos de los objetos y componentes de ASP Objeto Response Propiedades Nombre Buffer Descripción Sintaxis Response.Buffer=True|False Determina si la página de salida se encuentra en el buffer. ContentType Especifica el tipo de contenido Response.ContentType = "Text/HTML" HTTP para la respuesta actual. Cookies Permite escribir nuevos Response.Cookies (nombrecookies)(clave) = valores en la colección de valor cookies del cliente. Expires Define la cantidad de tiempo Response.Expire = tiempo que deberá transcurrir para que expire una página almacenada en la caché. Si se define como cero el borrado es inmediato. ExpiresAbsolute Define la cantidad de tiempo Response.ExpiresAbsolute = #Fecha# en el que expirará la página caché. Status Define la línea de estado Response.Status = <<401-No encontrado>> devuelta por el servidor. Se podrá utilizar para definir mensajes del tipo <<401 - No encontrado>>. Métodos Nombre Descripción Sintaxis AddHeader Permite la inclusión de una Response.AddHeader name, value cabecera particular en la página Web. AppendToLog Permite la inclusión de Response.AppendToLog string información al registro del servidor BinaryWrite Escribe datos binarios en una página para que sean utilizados por los objetos clientes. Response.BinaryWrite data 94 Apéndice A. Propiedades y métodos de los objetos y componentes de ASP Clear End Flush Redirect Write Borra la salida ASP almacenada en el buffer Finaliza el procesamiento ASP y envía el resultado al cliente. Vacía el buffer y envía el resultado al cliente. Indica al cliente que se conecte a una dirección URL distinta. Escribe la salida en la página HTML. El signo igual sirve como anotación taquigráfica. Response.Clear Response.End Response.Flush Response.Redirect URL Response.Write data 95 Apéndice A. Propiedades y métodos de los objetos y componentes de ASP Objeto Server Propiedades Nombre ScriptTimeout Métodos Nombre CreateObject HTMLEnconde MapPath URLEncode Descripción Define cuanto tiempo se estará ejecutando unprograma antes de que aparezca un mensaje en el cliente. Sintaxis Server.ScriptTimeout = tiempo Descripción Sintaxis Crea una instancia de un Variable = Server.CreateObject componente Active X para (ProgID) utilizarlo en ASP. = Proporciona código HTML Variable Server.HTMLEncode (cadena) para una cadena determinada Devuelve toda la estructura de Ruta = Server.MapPath (directoriovirtual) directorio para un nombre de directorio virtual Proporciona codificación URL Variable = Server.URLEncode (cadena) para una cadena dada. 96 Apéndice A. Propiedades y métodos de los objetos y componentes de ASP Objetos de datos Active X Objeto Command Connection Error Field Parameter Recordset Descripción Ejecuta una operación contra una fuente de datos ODBC, la operación puede ser una instrucción SQL o un procedimiento que se encuentre almacenado. Establece una conexión con una fuente de datos ODBC. Devuelve errores del controlador ODBC Permite acceder a un campo específico dentro de un grupo de registros. Permite pasar valores a un objeto Command Representa un grupo de registros devuelto por un objeto Command. 97 Apéndice B. Base de datos insumos. APÉNDICE B BASE DE DATOS INSUMOS Tabla: insumosinv Columnas Nombre Tipo Tamaño cod_insumo Texto 10 des_insumo Texto 50 can_insumo Número (entero) 2 can_insumo00 Número (entero) 2 can_insumo01 Número (entero) 2 can_insumo02 Número (entero) 2 can_insumo03 Número (entero) 2 can_insumo04 Número (entero) 2 can_insumo05 Número (entero) 2 can_insumo06 Número (entero) 2 can_insumo07 Número (entero) 2 can_insumo08 Número (entero) 2 98 Apéndice B. Base de datos insumos. Tabla: insumosmov Columnas Nombre Tipo Tamaño cod_movinsumo Texto fec_movins umo Fecha/Hora 8 can_movinsumo Número (entero) 2 des_movinsumo Texto 100 adm_movinsumo Texto 2 15 99 Apéndice B. Base de datos insumos. Tabla: usuarios Columnas Nombre Tipo Tamaño cod_usuario Texto 2 nom_usuario Texto 50 cla_usuario Texto 15 tip_usuario Texto 1 jef_usuario Texto 2 adm_usuario Texto 50 100 Apéndice C. Código fuente, control de insumos. APÉNDICE C CÓDIGO FUENTE DE APLICACIÓN DE CONTROL DE INSUMOS default.htm <html> <head> <meta NAME="GENERATOR" Content="Microsoft FrontPage 3.0"> <title></title> </head> <body> <p align="center"><font color="mediumblue" face="Rockwell">Control de Insumos Informáticos ARJI Occidente</font></p> <p align="center"><img src="http://oodc69cc/insumosocc/key.jpg" width="121" height="37" alt="key.jpg (49216 bytes)"></p> <font color="mediumblue" face="Rockwell"> <form action="insumosmenu.asp" method="post" name="Formacusar"> <div align="center"><center><p><font face="Arial" color="#800000"><strong><small>Clave de Acceso:</small></strong></font> <input id="passwd" name="passwd" type="password" maxlength="10" size="20"> <input id="submit1" name="submit1" type="submit" value="Identificar"></p> </center></div> </form> </font> <p align="center"><a href="insumosinvreg.asp"><small><font face="Verdana">Inventario Regional Jurídica de Occidente</font></small></a></p> <p align="center"><img src="insumos.jpg" width="322" height="163" alt="insumos.jpg (24660 bytes)"></p> </body> </html> 101 Apéndice C. Código fuente, control de insumos. Insumosmenu.asp <%@ Language=VBScript %> <html> <head> <meta NAME="GENERATOR" Content="Microsoft FrontPage 3.0"> <title></title> <script LANGUAGE="VBScript"> <!-'Cambio de color Sub registro_OnMouseOver() registro.Color = "blue" End Sub Sub registro_OnMouseOut() registro.Color = "Purple" End Sub Sub inventario_OnMouseOver() inventario.Color = "blue" End sub Sub inventario_OnMouseOut() inventario.Color = "Purple" End sub Sub movimientos_OnMouseOver() movimientos.Color = "blue" End sub Sub movimientos_OnMouseOut() movimientos.Color = "Purple" End Sub --> </script> </head> <body> <% public cn,rs,vopcion vopcion = "INICIALIZADA" Set cn=Server.CreateObject("ADODB.Connection") Set rs=Server.CreateObject("ADODB.Recordset") cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos" rs.Open "Select * from usuarios where cla_usuario = '" & Request.Form("passwd") & "'", cn %> <form action="insumosmov.asp" method="post" name="insumos"> <div align="center"><center><p><font color="mediumblue" face="Rockwell">Control de Insumos Informáticos ARJI Occidente</font></p> </center></div><div align="ce nter"><center><p><small><strong><font face="Arial">Usuario : </font></strong></small><font id="administracion" color="red"><%if rs.EOF then%> Clave de acceso NO registrada.... </font></p> 102 Apéndice C. Código fuente, control de insumos. </center></div><div align="center"><center><p>&nbsp;<img src="candado.jpg" width="79" height="96" alt="candado.jpg (47969 bytes)"></p> </center></div><div align="center"><center><p><font id="administracion" color="red"><%else if rs("tip_usuario") <> "l" then%> No autorizado en este módulo.... </font></p> </center></div><div align="center"><center><p>&nbsp;<img src="candado.jpg" width="79" height="96" alt="candado.jpg (47969 bytes)"></p> </center></div><div align="center"><center><p><font id="administracion" color="red"><%else%> <%=rs("nom_usuario")%></font></p> </center></div><table border="0" width="100%" height="149"> <tr> <td width="38%" height="125" rowspan="3"><div align="center"><center><p><img src="insumos.jpg" width="155" height="65" alt="wpe1.jpg (19749 bytes)" style="HEIGHT: 80px; WIDTH: 165px"></td> <td width="62%" height="21" align="center"><div align="left"><p><font ID="registro" face="Rockwell" color="#800080"><a href="insumosmov.asp?txtcodusu=<%=rs("cod_usuario")%>&amp;txtnumadm=<%=rs("a dm_usuario")%>">Movimientos de Insumos</a></font></td> </tr> <tr align="center"> <td width="62%" height="21"><div align="left"><p><font ID="inventario" face="Rockwell" color="#800080"><a href="insumosimp.asp?txtcodusu=<%=rs("cod_usuario")%>">Impresión de Insumos</a></font></td> </tr> <tr align="center"> <td width="62%" height="21"><div align="left"><p><font ID="movimientos" face="Rockwell" color="#800080"><a href="insumosimpmov.asp?txtcodusu=<%=rs("cod_usuario")%>">Impresión de Movimientos</a></font></td> </tr> </table> <div align="center"><center><p>&nbsp; </p> </center></div><%rs.Close end if end if%> </form> </body> </html> 103 Apéndice C. Código fuente, control de insumos. insumosmov.asp <%@ Language=VBScript %> <html> <head> <meta NAME="GENERATOR" Content="Microsoft FrontPage 3.0"> <script LANGUAGE="VBScript"> <!-sub insumo_Onclick() FrontPage_Form1.txtinsumo.value=FrontPage_Form1.insumo.value end sub sub movimiento_Onclick() FrontPage_Form1.txtmovimiento.value=FrontPage_Form1.movimiento.value end sub --> </script> <title> </title> </head> <body> <% public cn, rs, vexpresion, vnomusu, vnumadm Set cn=Server.CreateObject("ADODB.Connection") Set rs=Server.CreateObject("ADODB.Recordset") cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos" vexpresion = "select * from usuarios where cod_usuario = '" + Request.QueryString("txtcodusu") + "'" rs.Open vexpresion, cn vnomusu = rs("nom_usuario") vnumadm = rs("adm_usuario") rs.close vexpresion = "Select * from insumosinv order by des_insumo" rs.Open vexpresion, cn %> <font color="mediumblue" face="Rockwell"> <p align="center" style="line-height: 7px">Control de Insumos Informáticos ARJI Occidente</font></p> <p align="center" style="line-height: 7px"><font color="brown" face="Arial"><strong>Movimientos al Inventario</strong></font></p> <p align="center" style="line-height: 7px"><small><strong><font face="Arial">Usuario : </font></strong></small><font id="administracion" color="red"><%=vnomusu%> </font></p> <form method="post" action="insumoguardarmov.asp" onsubmit="return FrontPage_Form1_Validator(this)" name="FrontPage_Form1"> <p style="line-height: 7px"><font face="Arial" size="2"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Insumo</strong></font>: <select id="insumo" name="insumo" style="HEIGHT: 22px; WIDTH: 291px" size="1" tabindex="1"> <% 104 Apéndice C. Código fuente, control de insumos. rs.MoveFirst do while not rs.EOF %> <option value="<%=rs("cod_insumo")%>"><%=rs("des_insumo")%></option> <% rs.movenext Loop rs.movefirst %> </select> <input type="text" name="txtinsumo" size="20" id="txtinsumo" style="background-color: rgb(255,255,255); color: rgb(255,255,255); border: medium none" value="<%=rs("cod_insumo")%>"></p> <p style="line-height: 7px"><strong><font face="Arial" size="2">Movimiento</font></strong> : <select id="movimiento" name="movimiento" style="HEIGHT: 22px; WIDTH: 120px" size="1" tabindex="2"> <option value="Entrada">Entrada</option> <option value="Salida">Salida</option> </select><input type="text" name="txtmovimiento" size="20" id="txtmovimiento" style="background-color: rgb(255,255,255); color: rgb(255,255,255); border: medium none" value="Entrada"></p> <p style="line-height: 7px"><strong><font face="Arial" size="2">&nbsp;&nbsp;&nbsp; Cantidad</font></strong> : <input id="txtcantidad" name="txtcantidad" style="HEIGHT: 22px; WIDTH: 89px" size="20" tabindex="3"><input type="text" name="txtnumadm" size="20" id="txtnumadm" style="background-color: rgb(255,255,255); color: rgb(255,255,255); border: medium none" value="<%=vnumadm%>"><input type="text" name="txtcodusu" size="20" id="txtcodusu" style="background-color: rgb(255,255,255); color: rgb(255,255,255); border: medium none" value="<%=Request.QueryString("txtcodusu")%>"></p> <p style="line-height: 7px"><strong><font face="Arial" size="2">Descripción</font></strong> : <!--webbot bot="Validation" startspan I-Maximum-Length="50" --><!-webbot bot="Validation" endspan --><textarea id="txtdesmov" name="txtdesmov" style="HEIGHT: 35px; WIDTH: 328px" rows="1" cols="31" tabindex="4"></textarea></p> <div align="left"><p style="line-height: 7px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input id="submit1" name="submit1" type="submit" value="Registrar"></p> </div> </form> </body> </html> 105 Apéndice C. Código fuente, control de insumos. insumosguardamov.asp <%@ Language=VBScript %> <html> <head> <meta NAME="GENERATOR" Content="Microsoft FrontPage 3.0"> <title></title> </head> <body> <p align="center"><font color="mediumblue" face="Rockwell">Control de Insumos Informáticos ARJI Occidente</font></p> <%if Request.Form("txtcantidad") = "" or Request.Form("txtdesmov") = "" then%> <p align="center"><big><font color="#A54136"><strong>Faltan datos para el registro ....</strong></font></big></p> <p align="center"><img src="stop.gif" width="121" height="153" alt="wpe1.jpg (5305 bytes)"> </p> <p align="center"><a href="insumosmov.asp?txtcodusu=<%=Request.Form("txtcodusu")%>"><font face="Verdana" color="#0000FF">Regresar</font></a></p> <%else public cn1, cn2 public rs1, rs2 public vcantidad, vcanmov, vexpresion if Request.Form("txtmovimiento")= "Salida" then vcantidad =" - " + Request.Form("txtcantidad") vcanmov = "-" + Request.Form("txtcantidad") else vcantidad =" + " + Request.Form("txtcantidad") vcanmov = Request.Form("txtcantidad") end if vexpresion = "update insumosinv set can_insumo" + Request.Form("txtnumadm")+ "= can_insumo" + Request.Form("txtnumadm") + vcantidad + ", can_insumo = can_insumo " + vcantidad + " where cod_insumo = '" + Request.Form("txtinsumo") + "'" Set cn1=Server.CreateObject("ADODB.Connection") Set rs1=Server.CreateObject("ADODB.Recordset") cn1.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos" rs1.Open vexpresion , cn1 vexpresion = "insert into insumosmov (cod_movinsumo, can_movinsumo, des_movinsumo, fec_movinsumo, adm_movinsumo) values ('" vexpresion = vexpresion + Request.Form("txtinsumo") + "'," + vcanmov + ",'" + Request.Form("txtdesmov") + "',date(), '" + Request.Form("txtnumadm") + "')" Set cn2=Server.CreateObject("ADODB.Connection") Set rs2=Server.CreateObject("ADODB.Recordset") cn2.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos" 106 Apéndice C. Código fuente, control de insumos. rs2.Open vexpresion, cn2 cn1.Close cn2.Close %> <p align="center"><font color="#BB3E3E"><big><strong>Movimiento registrado ...</strong> </big></font></p> <p align="center"><img src="siga.gif" width="121" height="153" alt="wpe2.jpg (5286 bytes)"></p> <p align="center"><a href="insumosmenur.asp?txtcodusu=<%=Request.form("txtcodusu")%>"><font face="Verdana" color="#0000FF">Regresar</font></a></p> <%end if%> </body> </html> 107 Apéndice C. Código fuente, control de insumos. insumosimp.asp <%@ Language=VBScript %> <html> <head> <meta NAME="GENERATOR" Content="Microsoft FrontPage 3.0"> <title></title> </head> <body> <% public cn,rs, vnuminsumos, vexpresion, vcaninsumo vnuminsumos = 0 vexpresion = "Select * from usuarios where cod_usuario = '" + Request.QueryString("txtcodusu") + "'" Set cn=Server.CreateObject("ADODB.Connection") Set rs=Server.CreateObject("ADODB.Recordset") cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos" rs.Open vexpresion, cn rs.movefirst vcaninsumo = "can_insumo" + rs("adm_usuario") %> <p align="center"><font color="mediumblue" face="Rockwell">Control de Insumos Informáticos ARJI Occidente</font></p> <p align="center"><strong><font color="brown" face="Rockwell">Impresión de Inventario</font></strong></p> <p align="center"><font color="red"><%=rs("nom_usuario")%></font></p> <p align="center"><strong><font color="black" face="Rockwell"><%=date()%></font></strong></p> <%rs.close vexpresion = "Select * from insumosinv where " + vcaninsumo + " <> 0 order by des_insumo" rs.Open vexpresion%> <table border="1" cellPadding="1" cellSpacing="1" width="75%"> <tr> <td><font face="Arial" size="2"><strong>Descripción del Insumo</strong></font></td> <td><p align="center"><font face="Arial" size="2"><strong>Cantidad</strong></font></td> </tr> <%if rs.EOF = false then rs.MoveFirst do while not rs.EOF%> <tr> <td><font face="Arial" size="2"><%=rs("des_insumo")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs(vcaninsumo)%></font></td> </tr> <% vnuminsumos = vnuminsumos + rs(vcaninsumo) 108 Apéndice C. Código fuente, control de insumos. rs.MoveNext Loop end if rs.close%> </table> <p align="center"><strong><font face="Arial" size="2">Total de Partes : <%=vnuminsumos%></font></strong></p> <p align="center"><a href="insumosmenur.asp?txtcodusu=<%=Request.QueryString("txtcodusu")%>"><fon t face="Verdana" color="#0000FF">Regresar</font></a></p> </body> </html> 109 Apéndice C. Código fuente, control de insumos. insumosimpmov.asp <%@ Language=VBScript %> <html> <head> <meta NAME="GENERATOR" Content="Microsoft FrontPage 3.0"> <title></title> </head> <body> <% public cn,rs, vnuminsumos, vexpresion, vnumadm vnuminsumos = 0 vexpresion = "Select * from usuarios where cod_usuario = '" + Request.QueryString("txtcodusu") + "'" Set cn=Server.CreateObject("ADODB.Connection") Set rs=Server.CreateObject("ADODB.Recordset") cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos" rs.Open vexpresion, cn rs.movefirst vnumadm = rs("adm_usuario") %> <p align="center"><font color="mediumblue" face="Rockwell">Control de Insumos Informáticos ARJI Occidente</font></p> <p align="center"><strong><font color="brown" face="Rockwell">Movimientos al Inventario</font></strong></p> <p align="center"><font color="red"><%=rs("nom_usuario")%></font></p> <p align="center"><strong><font color="black" face="Rockwell"><%=date()%></font></strong></p> <%rs.Close rs.Open "Select insumosinv.des_insumo,insumosmov.can_movinsumo, insumosmov.fec_movinsumo,insumosmov.des_movinsumo from insumosmov,insumosinv where insumosmov.adm_movinsumo = '" + vnumadm + "' and insumosmov.cod_movinsumo=insumosinv.cod_insumo order by insumosmov.fec_movinsumo", cn %> <table border="1" cellPadding="1" cellSpacing="1" width="611"> <tr> <td width="215"><font face="Arial" size="2"><strong>Descripción del Insumo</strong></font></td> <td width="69"><font face="Arial" size="2"><strong><p align="center">Cantidad</strong></font> </td> <td width="113"><font face="Arial" size="2"><strong>Fecha</strong></font> </td> <td width="190"><strong><font face="Arial" size="2">Descripción</font></strong></td> </tr> <%if rs.EOF = false then rs.MoveFirst 110 Apéndice C. Código fuente, control de insumos. do while not rs.EOF%> <tr> <td width="215"><font face="Arial" size="2"><%=rs("des_insumo")%></font></td> <td width="69"><p align="center"><font face="Arial" size="2"><%=rs("can_movinsumo")%> </font></td> <td width="113"><font face="Arial" size="2"><%=rs("fec_movinsumo")%></font></td> <td width="190"><font face="Arial" size="2"><%=rs("des_movinsumo")%></font> </td> </tr> <% vnummov = vnummov + 1 rs.MoveNext Loop end if%> </table> <p align="center"><strong><font face="Arial" size="2">Total de Movimientos : <%=vnummov%></font></strong></p> <p align="center"><a href="insumosmenur.asp?txtcodusu=<%=Request.QueryString("txtcodusu")%>"><fon t face="Verdana" color="#0000FF">Regresar</font></a></p> </body> </html> 111 Apéndice C. Código fuente, control de insumos. insumosinreg.asp <%@ Language=VBScript %> <html> <head> <meta NAME="GENERATOR" Content="Microsoft FrontPage 3.0"> <title></title> </head> <body> <% public cn,rs, vnuminsumos, vexpresion, vcaninsumo vnuminsumos = 0 vexpresion = "Select * from insumosinv order by des_insumo" Set cn=Server.CreateObject("ADODB.Connection") Set rs=Server.CreateObject("ADODB.Recordset") cn.Open "DSN=dsninfocc;SERVER=oodc69c;DATABASE=insumos" rs.Open vexpresion, cn %> <p align="center"><font color="mediumblue" face="Rockwell">Control de Insumos Informáticos ARJI Occidente</font></p> <p align="center"><strong><font color="brown" face="Rockwell">Inventario Regional Occidente</font></strong></p> <p align="center"><strong><font color="black" face="Rockwell"><%=date()%></font></strong></p> <table border="1" cellPadding="1" cellSpacing="1"> <tr> <td width="1100"><font face="Arial" size="2"><strong>Descripción del Insumo</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Occ</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Gdl</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Sur</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Zap</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Ags</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Guz</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Col</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Ptv</strong></font></td> <td width="50"><p align="center"><font face="Arial" size="2"><strong>Tpc</strong></font></td> <td width="60"><p align="center"><font face="Arial" size="2"><strong>TOTAL</strong></font></td> </tr> 112 Apéndice C. Código fuente, control de insumos. <%if rs.EOF = false then rs.MoveFirst do while not rs.EOF%> <tr> <td><font face="Arial" size="2"><%=rs("des_insumo")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo00")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo01")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo02")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo03")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo04")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo05")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo06")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo07")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo08")%></font></td> <td><p align="center"><font face="Arial" size="2"><%=rs("can_insumo")%></font></td> </tr> <% vnuminsumos = vnuminsumos + rs("can_insumo") rs.MoveNext Loop end if rs.close%> </table> <p align="center"><strong><font face="Arial" size="2">Total de Partes : <%=vnuminsumos%></font></strong></p> <p align="center"><a href="default.htm"><font face="Verdana" color="#0000FF">Regresar</font></a></p> </body> </html> 113 Apéndice D. Glosario de términos de Internet. APÉNDICE D GLOSARIO DE TÉRMINOS DE INTERNET ActiveDesktop La integración de Microsoft Internet Explorer con el sistema operativo Microsoft Windows ADO.- Objetos de Datos Un grupo de componentes ActiveX diseñados para ActiveX acceder a las fuentes de datos ODBC utilizando el estándar OLEDB. Ancho de banda La cantidad de datos, medidos en bits por segundo, que pueden pasar a través de una determinada red. Backbone La serie principal de conexiones en una red. Canal Una tecnología que permite a ciertos servicios enviar datos a Microsoft Internet Explorer. Cliente Una aplicación o una computadora que se comunica con y solicita información de un servidor. com Una extensión de direcciones Internet que indica que el servidor Web es un servidor comercial. Componente con Se trata de un componente de ActiveX que le funciones de navegador permitirá identificar el tipo y la capacidad de un navegador. Componet Object Model Tecnología que permite la comunicación entre los (COM) objetos de software. Todos los componentes de ActiveX están basados en COM. Conexión anónima Se trata de una conexión con un servidor Web que se ha establecido sin declarar una cuenta ni una contraseña. Una cuenta anónima permitirá a cualquier navegador conectarse con un servidor pero, por cuestiones de seguridad, restringirá las funciones de acceso disponibles. Content Linking, Un componente ActiveX utilizado para enlazar componente entre sí distintas páginas Web con un formato de libro o de revista. Cortafuegos Un sistema de seguridad que protege la información y que evita el acceso fraudulento a computadoras o a redes informáticas. 114 Apéndice D. Glosario de términos de Internet. Chatting Dirección Dirección IP DNS.- Sistema de nombres de dominio Dominio edu File Access, componente FTP.- Protocolo de transferencia de archivos Gateway (pasarela) GIF.- Formato de Intercambio Gráfico Gopher Host.- Huésped HTML Dinámico. Comunicación directa y en tiempo real con otros usuarios sobre Internet. La localización de un usuario en Internet. Típicamente esta dirección tiene el formato usario@host, donde usuario es el nombre de su cuenta y host es el nombre del dominio en que se encuentra (por ejemplo, [email protected]). Un número dividido en cuatro partes utilizado para identificar de forma unívoca a cada computadora conectada a la red. Cada parte puede tener un máximo de tres dígitos, y las distintas partes se separan entre sí mediante un punto. El formato de esta dirección es xxx.xxx.xxx.xxx; un ejemplo es 99.42.20.201 Un sistema que traduce los nombres alfa numéricos de las computadoras a las direcciones del Protocolo Internet (IP). Un nombre alfanumérico único para un servidor Internet Una extensión de direcciones Internet que indica que el servidor Web es un centro educativo. Un componente ActiveX utilizado para acceder a archivos de texto desde un programa. Un estándar de comunicaciones que permite la transferencia de archivos entre computadoras conectadas a Internet. FTP es compatible con Microsoft Internet Information Server. Una computadora que conecta una red con otra cuando las dos redes manejan diferentes protocolos de comunicaciones. Un formato gráfico comprimido que facilita la distribución de gráficos por Internet. Un sistema de transferencia de archivos que permite realizar búsquedas basándose en menús. El Microsoft Internet Information Server es compatible con Gopher. Un servidor Web al que se pueden conectar los usuarios. La tecnología que permite tratar a cada una de las etiquetas contenidas en una página Web como un objeto programable. 115 Apéndice D. Glosario de términos de Internet. HTML.-Lenguaje de Construcción Hipertexto HTTP.- Protocolo de Transferencia Hipertexto IDC.- Conector a Base de Datos de Internet El estándar de codificación para crear páginas Web. El estándar de codificación para transferir páginas Web entre computadoras. Una versión especial del interfaz ISAPI para Microsoft Internet Information Server, diseñado para permitir la edición de bases de datos. IIS.- Internet Information Un servidor Web diseñado para utilizar con Server Microsoft Windows NT Server. Proporciona servicios WWW, FTP y Gopher. Internet Explorer IP.- Protocolo Internet El navegador Web de Microsoft. El estándar de comunicaciones que es la base de Internet. IP permite que la información se envíe en forma de paquetes a través de Internet y que se desempaquete en la computadora de destino. ISAPI. - lnterfaz de Programación de lnterfaces de Internet Server Grupo de llamadas a funciones que proporciona acceso a las funciones de Microsoft Internet Information Server. Se utilizan varias aplicaciones ISAPI en IIS para editar bases de datos: Internet Database Connector, OLEISAPI y dbWeb. LAN.- Red de área local Un grupo de computadoras conectadas en red que, en general, se encuentran distribuidas por un único edificio u oficina. NNTP.- Protocolo de Un estándar de comunicaciones para distribuir y transferencia Network recuperar artículos del servicio News. El mayor News sistema de distribución News es Usenet. ODBC Conectividad de Tecnología independiente de las bases de datos base de datos abiertas cuyo objetivo es permitir un acceso sencillo a los datos. Utiliza la sintaxis SQL para interactuar con las bases de datos. OLEDB Especificación que define un grupo de interfaces estándar para acceder a datos. Los Objetos de Datos de ActiveX (ADO) soportan el estándar OLEDB. Paquete Una pieza de información electrónica enviada a través de Internet. Cada paquete contiene la dirección de destino, la dirección del remitente, datos e información para el manejo de errores. 116 Apéndice D. Glosario de términos de Internet. Ping POP3.- Protocolo Post Office RDSI.- Red Digital de Servicios Integrados Resolución del nombre Un breve mensaje enviado de una computadora a otra con el propósito de chequear los enlaces de comunicaciones. Un sistema que permite enviar correo electrónico a un usuario a través de Internet. Un mecanismo de transferencia de datos que soporta una velocidad de transferencia de datos de hasta 64 Kb por segundo a través de una línea telefónica normal. El proceso de transformar un nombre de dominio en una dirección IP. Servicios de datos remotos El servicio que permite acceder mediante Web a una fuente de datos ODBC utilizando el Control Avanzado de Datos (ADC) Servidor espejo Servidor FTP que tiene copias de los mismos archivos almacenados en otro servidor. Estos servidores se suelen utilizar para descargar de trabajo al servidor principal de centros Internet de gran popularidad. SMTP.- Protocolo Un estándar de comunicaciones para enviar correo Simple de Transferencia electrónico a través de la red. de Correo Socket Un enlace de comunicaciones con Internet. Se pueden abrir simultáneamente varios sockets (enchufes) sobre una única computadora. SQL.- Lengua je Interfaz de bases de datos estándar que permite estructurado de tener acceso y manipular una gran variedad de consulta productos de bases de datos procedentes de distintos fabricantes. SQL Server Manejador de base de datos de Microsoft que utiliza la s intaxis SQL Subscripción El proceso que consiste en localizar periódicamente nuevos servidores Internet e importar información de los mismos para su empleo posterior. TCP/IP.- Protocolo de Un estándar de comunicaciones para todas las Control de computadoras conectadas en Internet. Transferencia/Protocolo Internet 117 Apéndice D. Glosario de términos de Internet. Tecnologías ActiveX Un conjunto de productos y tecnologías producidos por Microsoft para permitir la comunicación entre los distintos objetos de software. URL.- Localizador Dirección Internet que especifica un servidor o un Uniforme de Recursos archivo. Suele constar de la siguiente información: protocolo, nombre de host, estructura de carpetas y un nombre de archivo por ejemplo: http://volcan.ucol.mx/maestría/default.htm World Wide Web (W3C) Consorcio industrial que promociona los estándares de Internet. 118 Bibliografía BIBLIOGRAFÍA Microsoft Visual Basic Web Databasic Interactive Curso Gunnit S. Khurana Satwant S. Gadhok Ed. Waite Group Press Programación de Active Server Pages Scot Hiller Daniel Mezick Ed. Microsoft Press Creación de servidores de base de datos para Internet con CGI Jeff Rowwe Ed. Pretice Hall El libro de CGI William E. Weinman Ed. Pretice Hall 119 Bibliografía INTERNET http://www.geocities.com/SiliconValley/Lakes/2227/jdbc.html http://www.eupmt.es/~maumarma/presentacio/ppframe.htm http://pegasus.uniandes.edu.co/~pfiguero/CursoJava/JDBC/home.html http://www.abits.com/Productos/desplegando.htm http://www.abits.com.mx/Productos/soluciones_jdbc.htm http://mipagina.euskaltel.es/gsagarduy/asp/introasp4.html http://www.ofifc.org/Eli/ASP/GenericArticle.asp http://195.53.26.42/atrasados/1997/11_julago97/Revista/iis30.htm http://highland.dit.upm.es:8000/CGI/cgi.html http://www2.interplanet.es/aspsamp/tutorial/atumd1.asp http://www.web.sitio.net/faqcgi/i.html 120