การจัดการข้อมูลแบบสากลและการให้บริการโดยใช้ HTML ล้วนๆ อย่างไรก็ตาม ในการรวบรวมข้อมูล คุณต้องมีที่เก็บข้อมูล เพื่อหลีกเลี่ยงปัญหาต่างๆ ที่มาพร้อมกับการใช้เซิร์ฟเวอร์ฐานข้อมูล คุณสามารถรวบรวมข้อมูลนี้ในรูปแบบ XML นี่คือโครงสร้างพื้นฐานของโครงการของเรา:
<ผู้ใช้>
<ไมล์/>
ในตอนแรกฉันจำกัดข้อมูลไว้ที่ชื่อ นามสกุล และชื่อกลาง แนวคิดพื้นฐานเบื้องหลังหน้านี้ก็คือได้รับข้อมูลผู้ใช้ในหน้านี้ หลังจากที่ความต้องการข้อมูลผู้ใช้ได้รับการตอบสนองแล้ว กระบวนการจะต้องถูกย้ายไปยังขั้นตอนการรวบรวมเชิงตรรกะถัดไป เพื่อให้ทุกอย่างง่ายขึ้น ฉันจะรวมฟังก์ชันการทำงานของผู้ใช้ไว้ในคลาส ASP
ฟังก์ชั่นรวมกลุ่ม(vVar, vAlt)
ถ้า vVal = "" หรือ VarType(vVal) = 1 หรือ VarType(vVal) = 0 แล้ว
รวมตัว = vAlt
อื่น
รวมตัว = vVal
สิ้นสุดถ้า
CUser คลาส
ฟังก์ชันสิ้นสุด
m_SQL ส่วนตัว, m_DOM
คุณสมบัติสาธารณะรับ DOM()
ตั้งค่า DOM = m_DOM
บันทึกผู้ใช้ย่อยสาธารณะ
คุณสมบัติสุดท้าย
()
m_SQL.บันทึก "save_user", m_DOM
ย่อยย่อย
()
m_DOM.loadXML "
ถ้าไม่ใช่ m_DOM.selectSingleNode("//error") ก็ไม่มีอะไรเลย
ตรวจสอบ=เท็จ
อื่น
ตรวจสอบ=จริง
สิ้นสุดถ้า
ฟังก์ชั่นสิ้นสุด
การรวบรวมข้อมูลย่อยส่วนตัว (dom, oCollection)
Dim nItem, โหนด, parent_node, n, sKey
สำหรับ nItem = 1 ถึง oCollection.Count
sKey = oCollection.Key (nItem)
ตั้งค่า parent_node = dom.selectSingleNode("//" & sKey & "s")
ถ้าไม่ใช่ parent_node ก็ไม่มีอะไรแล้ว
สำหรับ n = 1 ถึง oCollection(sKey).Count
ตั้งค่าโหนด = parent_node.selectSingleNode(sKey & _
"[สตริง(.)='" &
oCollection(sKey)(n) & "']")
ถ้าโหนดไม่มีอะไรแล้ว
ตั้งค่าโหนด = dom.createNode(1, sKey, "")
ตั้งค่าโหนด = parent_node.appendChild (โหนด)
สิ้นสุดถ้า
node.text = Coalesce (oCollection (sKey) (n), "")
ต่อไป
อื่น
ตั้งค่าโหนด = dom.selectSingleNode("//" & sKey)
ถ้าไม่ใช่โหนดก็ไม่มีอะไรแล้ว _
node.text = Coalesce (oCollection (sKey), "")
สิ้นสุดถ้า
ต่อไป
สิ้นสุด
ย่อยส่วนตัวย่อย Class_Initialize()
ตั้งค่า m_SQL = CSQL ใหม่
ตั้งค่า m_DOM = Server.CreateObject("MSXML2.DOMDocument")
m_DOM.async = เท็จ
ถ้า VarType(Request ("txtUserXML")) = 0 หรือ Request ("txtUserXML") = "" จากนั้น
m_DOM.loadXML คำขอ ("txtUserXML")
อื่น
m_DOM.load "
สิ้นสุดถ้า
collectData m_DOM, คำขอ. แบบฟอร์ม
collectData m_DOM, คำขอ QueryString
สิ้นสุด
ย่อยส่วนตัวย่อย Class_Terminate()
ตั้งค่า m_SQL = ไม่มีเลย
ตั้ง m_DOM = ไม่มีเลย
สิ้นสุด ย่อย
สิ้นสุด คลาส คลาส
CSQL
m_DAL ส่วนตัว, m_Stream
ฟังก์ชั่นสาธารณะบันทึก (sStoredProc, oDOM)
'adVarChar = 200
m_DAL.RunSP Array(m_DAL.mp("@xml_param", 200, 8000, oDOM.xml))
ฟังก์ชั่นสิ้นสุด
ฟังก์ชั่นสาธารณะ validateUser(oDOM)
ตั้งค่า m_Stream = m_DAL.RunSPReturnStream("validate_user", Array(_
m_DAL.mp("@xml_param", 200, 8000, oDOM.xml)))
validateUser = m_Stream.ReadText(-1)
m_Stream.ปิด
ฟังก์ชั่นสิ้นสุด
คลาสย่อยส่วนตัว_เริ่มต้น ()
ตั้งค่า m_DAL = Server.CreateObject("MyPkg.MyDAL")
m_DAL.GetConnection "สตริงการเชื่อมต่อบางส่วน"
ตั้งค่า m_Stream = Server.CreateObject("ADODB.Stream")
สิ้นสุด
ย่อยส่วนตัวย่อย Class_Terminate()
ตั้งค่า m_DAL = ไม่มีเลย
ตั้งค่า m_Stream = ไม่มีเลย
จบ
หมวดย่อยจบคลาส
คลาส CSQL สร้างขึ้นจากคอมโพเนนต์ data access layer (m_DAL) MyPkg.MyDAL ส่วนประกอบนี้สร้างขึ้นจากส่วนประกอบของ Fitch และ Mather DAL ซึ่งสามารถพบได้ใน MSDN วิธีนี้เราจะสร้างสะพานเชื่อมระหว่าง SQL Server และโค้ดของคุณ
เมื่อวัตถุ CUser ถูกเตรียมใช้งาน จะรวบรวมข้อมูลคำขอและใช้ฟังก์ชันย่อย collectData() เพื่อนำข้อมูลที่รวบรวมไปไว้ในโหนดที่สอดคล้องกันใน UserDOM (โค้ดนี้ฉันจะไม่อธิบายเพราะมันค่อนข้างเข้าใจง่ายในตัวเอง) หลังจากรวบรวมข้อมูลแล้ว (หรือไม่) เราจะใช้ XSL เพื่อแปลงเนื้อหาข้อมูลให้เป็นเลย์เอาต์
*จำเป็นต้องระบุข้อมูลที่เป็นสีแดง
<แบบอักษร>
ชื่อ:
แบบอักษร>
อินพุต>
<แบบอักษร>
มิชิแกน:
แบบอักษร>
<ประเภทอินพุต = "ข้อความ" ชื่อ = "mi">
อินพุต>
<แบบอักษร>
นามสกุล:
แบบอักษร>
อินพุต>
สไตล์ชีทนี้จะแปลงเนื้อหาเป็นรูปแบบ การตรวจสอบข้อผิดพลาดเป็นสิ่งสำคัญ และขั้นตอนการจัดเก็บจะตรวจสอบข้อมูลโดยพิจารณาว่าจำเป็นต้องประมวลผลหรือไม่ ส่งกลับโหนด "ข้อผิดพลาด" สำหรับแต่ละฟิลด์ที่ไม่สามารถเว้นว่างได้ แต่ไม่มีข้อมูลที่เติมไว้ ผลลัพธ์ของ XML นี้มีดังนี้:
สไตล์ชีทนี้จะเปลี่ยนเนื้อหาให้เป็นเลย์เอาต์ การตรวจสอบข้อผิดพลาดเป็นสิ่งสำคัญ และขั้นตอนการจัดเก็บจะตรวจสอบข้อมูลโดยพิจารณาว่าจำเป็นต้องประมวลผลหรือไม่ ส่งกลับโหนด "ข้อผิดพลาด" สำหรับแต่ละฟิลด์ที่ไม่สามารถเว้นว่างได้ แต่ไม่มีข้อมูลที่เติมไว้ ผลลัพธ์ของ XML นี้มีดังนี้:
โปรดทราบว่าหากมีข้อผิดพลาดในการจับคู่ชื่อโหนด ผลลัพธ์ที่ได้จะเป็นสีแดง เราจำเป็นต้องมี ASP ต่อไปนี้เพื่อรวมสิ่งก่อนหน้านี้ทั้งหมด
<%@ ภาษา=VBScript %>
-
ตัวเลือกที่ชัดเจน
ติ่มซำผู้ใช้
ตั้งค่า oUser = NewCUser
ถ้า oUser.validate() แล้ว
ตั้งค่า oUser = ไม่มีเลย
เซิร์ฟเวอร์โอน "NextPage.asp"
สิ้นสุดถ้า
-
<ร่างกาย>
<รูปแบบวิธีการ = "POST" action = "GetUser.asp" name = "thisForm" id = "thisForm">
-
Response.Write xslTransform(oUser.DOM, "user.xsl")
-
<ประเภทอินพุต = "ซ่อน" ชื่อ = "txtUserXML" id = "txtUserXML"
ค่า="<%=oUser.DOM.xml%>">
<ประเภทอินพุต = "ส่ง" ค่า = "ส่ง">
แบบฟอร์ม>
ร่างกาย>
-
ตั้งค่า oUser = ไม่มี
ฟังก์ชัน xslTransform(vXML, XSLFileName)
หรี่ m_xml, m_xsl
ถ้า VarType(vXML) = 8 แล้ว
ตั้งค่า m_xml = m_dom
m_xml.loadXML vXML
ElseIf VarType(vXML) = 9 จากนั้น
ตั้งค่า m_xml = vXML
สิ้นสุดถ้า
ถ้า m_xml.parseError.errorCode <> 0 แล้ว _
ข้อผิดพลาดเพิ่ม vbObjectError, "XMLTransform(...)", m_xml.parseError.reason
ตั้งค่า m_xsl = Server.CreateObject("MSXML2.DOMDocument")
m_xsl.async = เท็จ
m_xsl.โหลดเซิร์ฟเวอร์ MapPath (XSLFileName)
ถ้า m_xsl.parseError.errorCode <> 0 แล้ว _
ข้อผิดพลาดเพิ่ม vbObjectError, "XMLTransform(...)", m_xsl.parseError.reason
xslTransform = m_xml.transformNode(m_xsl)
ตั้งค่า m_xsl = ไม่มีเลย
ฟังก์ชันสิ้นสุด
-
รหัส ASP จะสร้างวัตถุ CUser และกรอกข้อมูลหากมีข้อมูล HTML ที่เป็นผลลัพธ์จะถูกสร้างขึ้นผ่านการแปลง XSL โดยใช้ DOM ของ CUser การแปลงจะรวมอยู่ในฟังก์ชันที่เรียกว่า xslTransform นอกจากนี้ อย่าลืมจัดเก็บ CUser DOM ที่เป็นผลลัพธ์ไว้ในองค์ประกอบ ที่ซ่อนอยู่ หรือคุณสามารถจัดเก็บ CUser DOM ลงในตัวแปรเซสชันและนำออกมาระหว่างการเริ่มต้นได้
หลังจากกรอกหน้านี้แล้ว คุณสามารถสร้างเพจอื่นๆ ตามโค้ดโครงร่างก่อนหน้าได้ ตอนนี้คุณได้สร้างสถานการณ์จำลองการคัดลอกและวางสำหรับการรวบรวมข้อมูลแล้ว ส่วนที่สวยงามที่สุดของโซลูชันนี้คือเอาต์พุตทั้งหมดเป็น HTML ล้วนๆ โดยไม่มีคุณสมบัติหรือสไตล์ชีตเฉพาะเบราว์เซอร์ และเนื่องจากฟังก์ชันการทำงานรวมอยู่ในคลาสต่างๆ คุณสามารถใช้ XSLT เพื่อสร้างเลย์เอาต์และโค้ดทำงานได้ค่อนข้างเร็ว
-------------------------------------------------- -------------------------------------------------- ----------------------------------
ผู้เขียนบทความนี้: Phillip Perkins เป็นผู้รับเหมาของ Ajilon Consulting ประสบการณ์ของเขามีตั้งแต่การควบคุมเครื่องจักรและไคลเอ็นต์/เซิร์ฟเวอร์ ไปจนถึงแอปพลิเคชันอินทราเน็ต