純粋な HTML を使用したユニバーサルなデータ管理と提供。ただし、データを収集するにはデータ リポジトリが必要です。データベース サーバーの使用に伴う多くの問題を回避するために、このデータを XML で収集できます。私たちのプロジェクトの基本構造は次のとおりです。
<ユーザー>
<名/>
<姓/>
<ミ/>
</user>
最初はデータを名、姓、ミドルネームに限定しました。このページの基本的な考え方は、ユーザー情報がこのページで取得されるということです。ユーザー情報のニーズが満たされた後、プロセスは次の論理収集ステップに移る必要があります。物事を簡単にするために、ユーザー機能を ASP クラスにラップします。
関数結合(vVar, vAlt)
vVal = "" または VarType(vVal) = 1 または VarType(vVal) = 0 の場合
合体 = vAlt
それ以外
合体 = vVal
終了の場合
終了関数
クラス CUser
プライベート m_SQL、m_DOM
パブリック プロパティ Get DOM()
DOM = m_DOM を設定します
End プロパティ
Public Sub saveUser()
m_SQL.save "save_user"、m_DOM
End Sub
パブリック関数 validate()
m_DOM.loadXML "<root>" & m_SQL.validateUser(m_DOM) & "</root>"
m_DOM.selectSingleNode("//error") が何もない場合
検証=False
それ以外
検証=真
終了の場合
終了関数
Private SubcollectData(dom, oCollection)
Dim nItem、ノード、parent_node、n、sKey
nItem = 1 の場合、oCollection.Count へ
sKey = oCollection.Key(nItem)
親ノード = 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) を設定します。
終了の場合
node.text = Coalesce(oCollection(sKey)(n), "")
次
それ以外
ノード = dom.selectSingleNode("//" & sKey) を設定します。
ノードが何もない場合は _
node.text = Coalesce(oCollection(sKey), "")
終了の場合
次
End Sub
Private Sub Class_Initialize()
m_SQL = 新しい CSQL を設定します
Set m_DOM = Server.CreateObject("MSXML2.DOMDocument")
m_DOM.async = False
VarType(Request ("txtUserXML")) = 0 または Request ("txtUserXML") = "" の場合
m_DOM.loadXML リクエスト("txtUserXML")
それ以外
m_DOM.load "<root>" & Server.MapPath("user.xml") & "</root>"
終了の場合
collectData m_DOM、Request.Form
collectData m_DOM、Request.QueryString
End Sub
Private Sub Class_Terminate()
m_SQL = なしを設定します
m_DOM = なしを設定します
End Sub
End Class
クラス CSQL
プライベート m_DAL、m_Stream
パブリック関数 save(sStoredProc、oDOM)
'adVarChar = 200
m_DAL.RunSP 配列(m_DAL.mp("@xml_param", 200, 8000, oDOM.xml))
終了関数
Public 関数 validateUser(oDOM)
Set m_Stream = m_DAL.RunSPReturnStream("validate_user", Array(_
m_DAL.mp("@xml_param", 200, 8000, oDOM.xml)))
validateUser = m_Stream.ReadText(-1)
m_Stream.Close
終了関数
Private Sub Class_Initialize()
Set m_DAL = Server.CreateObject("MyPkg.MyDAL")
m_DAL.GetConnection "何らかの接続文字列"
Set m_Stream = Server.CreateObject("ADODB.Stream")
End Sub
Private Sub Class_Terminate()
m_DAL = なしを設定します
m_Stream = なしを設定します
エンドサブ
エンドクラス
CSQL クラスは、データ アクセス層 (m_DAL) コンポーネント MyPkg.MyDAL に基づいて構築されます。このコンポーネントは、MSDN にある Fitch および Mather DAL コンポーネントに基づいて構築されています。このようにして、SQL Server とコードの間にブリッジを構築します。
CUser オブジェクトが初期化されると、Request データが収集され、collectData() サブ関数を使用して、収集されたデータが UserDOM 内の対応するノードに配置されます。 (コード自体は非常に簡単に理解できるため、説明しません。) データを収集した後 (または収集しなかった後)、XSL を使用してデータ コンテンツをレイアウトに変換します。
<?xml バージョン="1.0"?>
<xsl:stylesheet xmlns:xsl=http://www.w3.org/1999/XSL/Transform
バージョン="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<xsl:if test="//error">
<font color="red">*赤色の情報は必須です<br/></font>
</xsl:if>
<xsl:apply-templates select="//user"/>
</xsl:template>
<xsl:template match="user">
<font>
<xsl:属性名="カラー">
<xsl:選択>
<xsl:when test="//error[.='first name']">red</xsl:when>
<xsl:otherwise>黒</xsl:otherwise>
</xsl:選択>
</xsl:属性>
ファーストネーム:
</font>
<input type="text" name="first_name">
<xsl:属性名="値"><xsl:値-of
select="first_name"/></xsl:attribute>
</input><br/>
<font>
<xsl:属性名="カラー">
<xsl:選択>
<xsl:when test="//error[.='mi']">赤</xsl:when>
<xsl:otherwise>黒</xsl:otherwise>
</xsl:選択>
</xsl:属性>
ミ:
</font>
<input type="text" name="mi">
<xsl:attribute name="value"><xsl:value-of select="mi"/></xsl:attribute>
</input><br/>
<font>
<xsl:属性名="カラー">
<xsl:選択>
<xsl:when test="//error[.='last_name']">赤</xsl:when>
<xsl:otherwise>黒</xsl:otherwise>
</xsl:選択>
</xsl:属性>
苗字:
</font>
<input type="text" name="last_name">
<xsl:属性名="値"><xsl:値-of
select="last_name" /></xsl:attribute>
</input><br/>
</xsl:template>
</xsl:stylesheet>
このスタイルシートはコンテンツをレイアウトに変換します。エラー チェックは重要であり、ストアド プロシージャは、処理が必要かどうかを判断してデータをチェックします。空にすることはできないが、データが入力されていないフィールドごとに「エラー」ノードを返します。この XML の出力は大まかに次のとおりです:
<user> .</user><errors><error>first_name</errors>
このスタイルシートはコンテンツをレイアウトに変換します。エラー チェックは重要であり、ストアド プロシージャは、処理が必要かどうかを判断してデータをチェックします。空にすることはできないが、データが入力されていないフィールドごとに「エラー」ノードを返します。この XML の出力は次のとおりです:
<user> .</user><errors><error>first_name</error> .
ノード名に一致するエラーがあることに注意してください。生成される出力は赤になります。これまでのものをすべて組み合わせるには、次の ASP が必要です。
<%@ 言語=VBScript %>
<%
明示的なオプション
ディムオーユーザー
oUser = NewCUser を設定します
oUser.validate() の場合
oUser = なしを設定します
Server.Transfer "NextPage.asp"
終了の場合
%>
<html>
<本文>
<form method="POST" action="GetUser.asp" name="thisForm" id="thisForm">
<%
Response.Write xslTransform(oUser.DOM, "user.xsl")
%>
<input type="hidden" name="txtUserXML" id="txtUserXML"
value="<%=oUser.DOM.xml%>">
<input type="submit" value="Submit">
</form>
</body>
</html>
<%
oUser = Nothing を設定します。
Function xslTransform(vXML, XSLFileName)
ディム m_xml、m_xsl
VarType(vXML) = 8 の場合
m_xml = m_dom を設定します
m_xml.loadXML vXML
ElseIf VarType(vXML) = 9 then
m_xml = vXML を設定します
終了の場合
m_xml.parseError.errorCode <> 0 の場合 _
Err.Raise vbObjectError、"XMLTransform(...)"、m_xml.parseError.reason
Set m_xsl = Server.CreateObject("MSXML2.DOMDocument")
m_xsl.async = False
m_xsl.load Server.MapPath(XSLファイル名)
m_xsl.parseError.errorCode <> 0 の場合 _
Err.Raise vbObjectError、"XMLTransform(...)"、m_xsl.parseError.reason
xslTransform = m_xml.transformNode(m_xsl)
m_xsl = なしを設定します
終了機能
%>
<!--#include file="CUser.asp"-->
ASP コードは CUser オブジェクトを作成し、データがある場合はデータを入力します。結果として得られる HTML は、CUser の DOM を使用した XSL 変換によって作成されます。変換は xslTransform という関数にラップされます。また、結果の CUser DOM を非表示の <INPUT> 要素に保存することを忘れないでください。または、CUser DOM をセッション変数に保存し、初期化中にそれを取り出すこともできます。
このページを完了したら、前のスケルトン コードに基づいて他のページを作成できます。これで、データ収集用のコピーアンドペーストのシナリオが作成されました。このソリューションの最も美しい点は、すべての出力がブラウザ固有のプロパティやスタイルシートを含まない純粋な HTML であることです。また、機能がクラスにラップされているため、XSLT を使用してレイアウトを生成でき、コードは非常に高速に実行されます。
-------------------------------------------------- ----------------------------------
この記事の著者: Phillip Perkins は、Ajilon Consulting の請負業者です。彼の経験は、マシン制御、クライアント/サーバーからイントラネット アプリケーションまで多岐にわたります。