Gestión y servicio universal de datos utilizando HTML puro. Sin embargo, para recopilar datos, necesita un depósito de datos. Para evitar muchos de los problemas que surgen con el uso de un servidor de base de datos, puede recopilar estos datos en XML. Aquí está la estructura básica de nuestro proyecto:
<usuario>
<primer_nombre/>
<apellido/>
<mi/>
</user>
Inicialmente limité los datos al nombre, apellido y segundo nombre. La idea básica detrás de esta página es que la información del usuario se obtiene en esta página. Una vez satisfechas las necesidades de información del usuario, el proceso debe pasar al siguiente paso lógico de recopilación. Para simplificar las cosas, incluiré la funcionalidad del usuario en una clase ASP.
Función fusionarse (vVar, vAlt)
Si vVal = "" O VarType(vVal) = 1 O VarType(vVal) = 0 Entonces
Fusionarse = vAlt
Demás
Fusionarse = vVal
Terminar si
de función final
CUser
Privado m_SQL, m_DOM
Propiedad pública Obtener DOM()
Establecer DOM = m_DOM
Propiedad final
Public Sub saveUser()
m_SQL.save "guardar_usuario", m_DOM
Finalizar la función pública secundaria
validar()
m_DOM.loadXML "<root>" & m_SQL.validateUser(m_DOM) & "</root>"
Si no m_DOM.selectSingleNode("//error") no es nada, entonces
validar=Falso
Demás
validar=Verdadero
Terminar si
Función final
Sub privada recolectar datos (dom, oCollection)
Dim nItem, nodo, parent_node, n, sKey
Para nItem = 1 a oCollection.Count
sClave = oCollection.Key(nArtículo)
Establecer parent_node = dom.selectSingleNode("//" & sKey & "s")
Si no parent_node no es nada, entonces
Para n = 1 a oCollection(sKey).Count
Establecer nodo = parent_node.selectSingleNode(sKey & _
"[cadena(.)='" &
oColección(sKey)(n) & "']")
Si el nodo no es nada, entonces
Establecer nodo = dom.createNode(1, sKey, "")
Establecer nodo = parent_node.appendChild(nodo)
Terminar si
nodo.text = Coalesce(oCollection(sKey)(n), "")
Próximo
Demás
Establecer nodo = dom.selectSingleNode("//" & sKey)
Si el nodo no es nada, entonces _
nodo.text = Coalesce(oCollection(sKey), "")
Terminar si
Próximo
Finalizar subclase
subprivada_Initialize()
Establecer m_SQL = Nuevo CSQL
Establecer m_DOM = Server.CreateObject("MSXML2.DOMDocument")
m_DOM.async = Falso
Si VarType(Request ("txtUserXML")) = 0 O Solicitud ("txtUserXML") = "" Entonces
Solicitud m_DOM.loadXML ("txtUserXML")
Demás
m_DOM.load "<root>" & Server.MapPath("user.xml") & "</root>"
Terminar si
recopilar datos m_DOM, solicitud.formulario
recopilar datos m_DOM, Solicitud.QueryString
Finalizar
subsubclase privada_Terminate()
Establecer m_SQL = Nada
Establecer m_DOM = Nada
Fin Sub
Fin
Clase Clase CSQL
Privado m_DAL, m_Stream
Función pública guardar (sStoredProc, oDOM)
'adVarChar = 200
m_DAL.RunSP Array(m_DAL.mp("@xml_param", 200, 8000, oDOM.xml))
Función final
Función pública validar usuario (oDOM)
Establecer m_Stream = m_DAL.RunSPReturnStream("validar_usuario", Array(_
m_DAL.mp("@xml_param", 200, 8000, oDOM.xml)))
validarUsuario = m_Stream.ReadText(-1)
m_Stream.Cerrar
Función final
Subclase privada_Initialize()
Establecer m_DAL = Server.CreateObject("MyPkg.MyDAL")
m_DAL.GetConnection "alguna cadena de conexión"
Establecer m_Stream = Server.CreateObject("ADODB.Stream")
Finalizar
subsubclase privada_Terminate()
Establecer m_DAL = Nada
Establecer m_Stream = Nada
Clase final
subfinal
La clase CSQL se construye en base a un componente MyPkg.MyDAL de la capa de acceso a datos (m_DAL). Este componente está construido en base a los componentes DAL de Fitch and Mather, que se pueden encontrar en MSDN. De esta manera construimos un puente entre SQL Server y su código.
Cuando se inicializa el objeto CUser, recopila los datos de la Solicitud y utiliza la subfunción CollectData() para colocar los datos recopilados en un nodo correspondiente en UserDOM. (No explicaré el código porque es bastante fácil de entender por sí solo). Después de recopilar los datos (o no), usaremos XSL para transformar el contenido de los datos en un diseño.
<?xml versión="1.0"?>
<xsl:hoja de estilo xmlns:xsl=http://www.w3.org/1999/XSL/Transform
versión="1.0">
<xsl:método de salida="html"/>
<xsl:coincidencia de plantilla="/">
<xsl:if prueba="//error">
<font color="red">*La información en rojo es obligatoria<br/></font>
</xsl:si>
<xsl:apply-templates select="//usuario"/>
</xsl:template>
<xsl:template match="usuario">
<fuente>
<xsl:nombre del atributo="color">
<xsl:elegir>
<xsl:when test="//error[.='first name']">rojo</xsl:when>
<xsl:de lo contrario>negro</xsl:de lo contrario>
</xsl:elegir>
</xsl:atributo>
Nombre de pila:
</font>
<tipo de entrada="texto" nombre="primer_nombre">
<xsl:nombre del atributo="valor"><xsl:valor-de
seleccionar="first_name"/></xsl:atributo>
</entrada><br/>
<fuente>
<xsl:nombre del atributo="color">
<xsl:elegir>
<xsl:cuando prueba="//error[.='mi']">rojo</xsl:cuando>
<xsl:de lo contrario>negro</xsl:de lo contrario>
</xsl:elegir>
</xsl:atributo>
MI:
</font>
<tipo de entrada="texto" nombre="mi">
<xsl:nombre del atributo="valor"><xsl:valor-de seleccionar="mi"/></xsl:atributo>
</entrada><br/>
<fuente>
<xsl:nombre del atributo="color">
<xsl:elegir>
<xsl:when prueba="//error[.='last_name']">rojo</xsl:when>
<xsl:de lo contrario>negro</xsl:de lo contrario>
</xsl:elegir>
</xsl:atributo>
Apellido:
</font>
<tipo de entrada="texto" nombre="apellido">
<xsl:nombre del atributo="valor"><xsl:valor-de
seleccionar="apellido"/></xsl:atributo>
</entrada><br/>
</xsl:template>
</xsl:stylesheet>
Esta hoja de estilo convertirá el contenido en un diseño. La verificación de errores es importante y los procedimientos almacenados verifican los datos determinando si necesitan procesamiento. Devuelve un nodo de "errores" para cada campo que no puede estar vacío pero que no tiene datos completos. El resultado de este XML es aproximadamente el siguiente:
<usuario>.</usuario><errors><error>primer nombre</error>.
Esta hoja de estilo transformará el contenido en diseño. La verificación de errores es importante y los procedimientos almacenados verifican los datos determinando si necesitan procesamiento. Devuelve un nodo de "errores" para cada campo que no puede estar vacío pero que no tiene datos completos. La salida de este XML es aproximadamente la siguiente:
<usuario>.</usuario><errors><error>primer_nombre</errors>.
Tenga en cuenta que si hay un error que coincide con el nombre del nodo, la salida producida será roja. Necesitamos el siguiente ASP para combinar todo lo anterior.
<%@ Idioma=VBScript %>
<%
Opción explícita
Atenuar usuario
Establecer oUser = NewCUser
Si oUser.validate() Entonces
Establecer oUsuario = Nada
Servidor.Transferencia "NextPage.asp"
Terminar si
%>
<html>
<cuerpo>
<método de formulario = "POST" acción = "GetUser.asp" nombre = "este formulario" id = "este formulario">
<%
Respuesta.Escribir xslTransform(oUser.DOM, "user.xsl")
%>
<tipo de entrada="oculto" nombre="txtUserXML" id="txtUserXML"
valor="<%=oUser.DOM.xml%>">
<tipo de entrada="enviar" valor="Enviar">
</formulario>
</cuerpo>
</html>
<%
Establecer oUser = Nada
Función xslTransform(vXML, XSLFileName)
Dim m_xml, m_xsl
Si VarType(vXML) = 8 Entonces
Establecer m_xml = m_dom
m_xml.loadXMLvXML
De lo contrario, si VarType (vXML) = 9, entonces
Establecer m_xml = vXML
Terminar si
Si m_xml.parseError.errorCode <> 0 Entonces _
Err.Raise vbObjectError, "XMLTransform(...)", m_xml.parseError.reason
Establecer m_xsl = Server.CreateObject("MSXML2.DOMDocument")
m_xsl.async = Falso
m_xsl.load Server.MapPath(NombreArchivoXSL)
Si m_xsl.parseError.errorCode <> 0 Entonces _
Err.Raise vbObjectError, "XMLTransform(...)", m_xsl.parseError.reason
xslTransform = m_xml.transformNode(m_xsl)
Establecer m_xsl = Nada
Función final
%>
<!--#include file="CUser.asp"-->
El código ASP crea el objeto CUser y completa los datos si los hay. Luego, el HTML resultante se crea mediante una transformación XSL utilizando el DOM de CUser. La transformación se incluye en una función llamada xslTransform. Además, recuerde almacenar el DOM de CUser resultante en un elemento <INPUT> oculto. O puede almacenar el DOM de CUser en una variable de sesión y sacarlo durante la inicialización.
Después de completar esta página, puede crear otras páginas basadas en el código esqueleto anterior. Ahora ha creado un escenario de copiar y pegar para la recopilación de datos. La parte más hermosa de esta solución es que toda la salida es HTML puro, sin propiedades ni hojas de estilo específicas del navegador. Y debido a que la funcionalidad está integrada en clases, puedes usar XSLT para generar diseños y el código se ejecuta bastante rápido.
-------------------------------------------------- ----------------------------------
El autor de este artículo: Phillip Perkins es contratista de Ajilon Consulting. Su experiencia abarca desde control de máquinas y cliente/servidor hasta aplicaciones de intranet.