Pengelolaan dan penyajian data universal menggunakan HTML murni. Namun, untuk mengumpulkan data, Anda memerlukan tempat penyimpanan data. Untuk menghindari banyak masalah yang timbul saat menggunakan server database, Anda dapat mengumpulkan data ini dalam XML. Berikut adalah struktur dasar proyek kami:
<pengguna>
<nama_depan/>
<nama_belakang/>
<mi/>
</user>
Awalnya saya membatasi data pada nama depan, nama belakang, dan nama tengah. Ide dasar dibalik halaman ini adalah informasi pengguna diperoleh di halaman ini. Setelah kebutuhan informasi pengguna terpenuhi, proses harus dipindahkan ke langkah pengumpulan logis berikutnya. Untuk mempermudah, saya akan menggabungkan fungsionalitas pengguna ke dalam kelas ASP.
Fungsi Penggabungan(vVar, vAlt)
Jika vVal = "" Atau VarType(vVal) = 1 Atau VarType(vVal) = 0 Maka
Penggabungan = vAlt
Kalau tidak
Penggabungan = vVal
Akhiri Jika
Pengguna Kelas
Fungsi Akhir
M_SQL Pribadi, m_DOM
Properti Publik Dapatkan DOM()
Tetapkan DOM = m_DOM
Akhir Properti
Publik Sub saveUser()
m_SQL.simpan "simpan_pengguna", m_DOM
Akhiri Sub
Fungsi Publik validasi()
m_DOM.loadXML "<root>" & m_SQL.validateUser(m_DOM) & "</root>"
Jika Tidak m_DOM.selectSingleNode("//error") Tidak Ada Apa-apanya
validasi=Salah
Kalau tidak
validasi=Benar
Akhiri Jika
Fungsi Akhir
Subpribadi kumpulkanData(dom, oCollection)
Redupkan nItem, simpul, simpul_induk, n, sKey
Untuk nItem = 1 Ke oCollection.Count
sKey = oKoleksi.Kunci(nItem)
Setel parent_node = dom.selectSingleNode("//" & sKey & "s")
Jika Bukan parent_node Bukan Apa-apa
Untuk n = 1 Ke oCollection(sKey).Count
Setel simpul = parent_node.selectSingleNode(sKey & _
"[string(.)='" &
oKoleksi(sKey)(n) & "']")
Jika simpul Bukan Apa-apa, Maka
Setel simpul = dom.createNode(1, sKey, "")
Setel simpul = parent_node.appendChild(node)
Akhiri Jika
simpul.teks = Penggabungan(oKoleksi(sKey)(n), "")
Berikutnya
Kalau tidak
Setel simpul = dom.selectSingleNode("//" & sKey)
Jika Bukan Node Bukan Apa-apa Maka _
node.teks = Penggabungan(oKoleksi(sKey), "")
Akhiri Jika
Berikutnya
Akhiri Sub
Privat Sub Class_Initialize()
Setel m_SQL = CSQL Baru
Setel m_DOM = Server.CreateObject("MSXML2.DOMDocument")
m_DOM.async = Salah
Jika VarType(Request ("txtUserXML")) = 0 Atau Permintaan ("txtUserXML") = "" Lalu
m_DOM.loadXML Permintaan("txtUserXML")
Kalau tidak
m_DOM.muat "<root>" & Server.MapPath("pengguna.xml") & "</root>"
Akhiri Jika
CollectData m_DOM, Permintaan.Formulir
kumpulkanData m_DOM, Permintaan.QueryString
Akhiri Sub
Pribadi Sub Class_Terminate()
Setel m_SQL = Tidak Ada
Tetapkan m_DOM = Tidak ada
Akhir Sub
Akhir
Kelas Kelas CSQL
M_DAL pribadi, m_Stream
Penyimpanan Fungsi Publik (sStoredProc, oDOM)
'adVarChar = 200
m_DAL.RunSP Array(m_DAL.mp("@xml_param", 200, 8000, oDOM.xml))
Fungsi Akhir
Fungsi Publik validasi Pengguna (oDOM)
Setel m_Stream = m_DAL.RunSPReturnStream("validasi_pengguna", Array(_
m_DAL.mp("@xml_param", 200, 8000, oDOM.xml)))
validasiPengguna = m_Stream.ReadText(-1)
m_Stream.Tutup
Fungsi Akhir
Sub Kelas Pribadi_Inisialisasi()
Setel m_DAL = Server.CreateObject("MyPkg.MyDAL")
m_DAL.GetConnection "beberapa string koneksi"
Setel m_Stream = Server.CreateObject("ADODB.Stream")
Akhiri Sub
Pribadi Sub Class_Terminate()
Tetapkan m_DAL = Tidak ada
Setel m_Stream = Tidak Ada
Akhir Sub
Akhir Kelas
Kelas CSQL dibangun berdasarkan komponen lapisan akses data (m_DAL) MyPkg.MyDAL. Komponen ini dibangun berdasarkan komponen Fitch dan Mather DAL yang dapat ditemukan di MSDN. Dengan cara ini kami membangun jembatan antara SQL Server dan kode Anda.
Ketika objek CUser diinisialisasi, ia mengumpulkan data Permintaan dan menggunakan subfungsi CollectData() untuk memasukkan data yang dikumpulkan ke dalam node terkait di UserDOM. (Kodenya tidak akan saya jelaskan karena cukup mudah untuk dipahami.) Setelah mengumpulkan data (atau tidak), kita akan menggunakan XSL untuk mengubah konten data menjadi tata letak.
<?xml versi="1.0"?>
<xsl:stylesheet xmlns:xsl=http://www.w3.org/1999/XSL/Transform
versi="1.0">
<xsl:metode keluaran="html"/>
<xsl:template kecocokan="/">
<xsl:jika tes="//kesalahan">
<font color="red">*Informasi berwarna merah diperlukan<br/></font>
</xsl:jika>
<xsl:terapkan-templat pilih="//pengguna"/>
</xsl:template>
<xsl:template match="pengguna">
<font>
<xsl: nama atribut = "warna">
<xsl:pilih>
<xsl:when test="//error[.='first name']">merah</xsl:when>
<xsl:sebaliknya>hitam</xsl:sebaliknya>
</xsl:pilih>
</xsl:atribut>
Nama depan:
</font>
<input type="teks" nama="nama_pertama">
<xsl:nama atribut="nilai"><xsl:nilai-dari
pilih="nama_pertama"/></xsl:atribut>
</masukan><br/>
<font>
<xsl: nama atribut = "warna">
<xsl:pilih>
<xsl:when test="//error[.='mi']">merah</xsl:when>
<xsl:sebaliknya>hitam</xsl:sebaliknya>
</xsl:pilih>
</xsl:atribut>
saya:
</font>
<masukan tipe="teks" nama="mi">
<xsl:attribute name="value"><xsl:value-of select="mi"/></xsl:attribute>
</masukan><br/>
<font>
<xsl: nama atribut = "warna">
<xsl:pilih>
<xsl:when test="//error[.='last_name']">merah</xsl:when>
<xsl:sebaliknya>hitam</xsl:sebaliknya>
</xsl:pilih>
</xsl:atribut>
Nama Belakang:
</font>
<input type="teks" nama="nama_akhir">
<xsl:nama atribut="nilai"><xsl:nilai-dari
pilih="nama_belakang"/></xsl:atribut>
</masukan><br/>
</xsl:template>
</xsl:stylesheet>
Stylesheet ini akan mengubah konten menjadi tata letak. Pemeriksaan kesalahan itu penting, dan prosedur tersimpan memeriksa data dengan menentukan apakah data tersebut memerlukan pemrosesan. Mengembalikan node "kesalahan" untuk setiap bidang yang tidak boleh kosong tetapi tidak memiliki data yang terisi. Output XML ini kira-kira sebagai berikut:
<user> .</user><errors><error>first_name</error>
Stylesheet ini akan mengubah konten menjadi tata letak. Pemeriksaan kesalahan itu penting, dan prosedur tersimpan memeriksa data dengan menentukan apakah data tersebut memerlukan pemrosesan. Mengembalikan node "kesalahan" untuk setiap bidang yang tidak boleh kosong tetapi tidak memiliki data yang terisi. Output XML ini kira-kira sebagai berikut:
<user> .</user><errors><error>first_name</error> .</errors>
Perhatikan bahwa jika ada kesalahan yang cocok dengan nama node, output yang dihasilkan akan berwarna merah. Kita memerlukan ASP berikut untuk menggabungkan semua hal sebelumnya.
<%@ Bahasa=VBScript %>
<%
Opsi Eksplisit
Redupkan Pengguna
Setel oUser = Pengguna Baru
Jika oUser.validate() Lalu
Tetapkan oUser = Tidak Ada
Server.Transfer "Halaman Berikutnya.asp"
Akhiri Jika
%>
<html>
<tubuh>
<form method="POST" action="GetUser.asp" name="thisForm" id="thisForm">
<%
Respon.Tulis xslTransform(oUser.DOM, "user.xsl")
%>
<input type="tersembunyi" name="txtUserXML" id="txtUserXML"
nilai="<%=oUser.DOM.xml%>">
<input type="kirim" value="Kirim">
</bentuk>
</tubuh>
</html>
<%
Setel oUser = Tidak Ada
Fungsi xslTransform(vXML, XSLFileName)
Redupkan m_xml, m_xsl
Jika VarType(vXML) = 8 Maka
Tetapkan m_xml = m_dom
m_xml.loadXML vXML
ElseIf VarType(vXML) = 9 Lalu
Setel m_xml = vXML
Akhiri Jika
Jika m_xml.parseError.errorCode <> 0 Lalu _
Err.Naikkan vbObjectError, "XMLTransform(...)", m_xml.parseError.alasan
Setel m_xsl = Server.CreateObject("MSXML2.DOMDocument")
m_xsl.async = Salah
m_xsl.load Server.MapPath(XSLFileName)
Jika m_xsl.parseError.errorCode <> 0 Lalu _
Err.Naikkan vbObjectError, "XMLTransform(...)", m_xsl.parseError.alasan
xslTransform = m_xml.transformNode(m_xsl)
Tetapkan m_xsl = Tidak ada
Fungsi Akhir
%>
<!--#include file="CUser.asp"-->
Kode ASP membuat objek CUser dan mengisi data jika ada data. HTML yang dihasilkan kemudian dibuat melalui transformasi XSL menggunakan DOM CUser. Transformasi dibungkus dalam fungsi yang disebut xslTransform. Selain itu, ingatlah untuk menyimpan DOM CUser yang dihasilkan ke dalam elemen <INPUT> yang tersembunyi. Atau Anda dapat menyimpan DOM CUser ke dalam variabel Sesi dan mengeluarkannya selama inisialisasi.
Setelah menyelesaikan halaman ini, Anda dapat membuat halaman lain berdasarkan kode kerangka sebelumnya. Sekarang Anda telah membuat skenario salin dan tempel untuk pengumpulan data. Bagian terindah dari solusi ini adalah semua keluarannya adalah HTML murni, tanpa properti atau lembar gaya khusus browser apa pun. Dan karena fungsinya digabungkan ke dalam kelas, Anda dapat menggunakan XSLT untuk menghasilkan tata letak dan kode berjalan cukup cepat.
--------------------------------------------------- -----------------------------------
Penulis artikel ini: Phillip Perkins adalah kontraktor Ajilon Consulting. Pengalamannya berkisar dari kontrol mesin dan klien/server hingga aplikasi intranet.