doface(原著)
提起ASP很多人就認為是一堆HTML腳本和被括在<%和%>之中的一些程式碼還有就是一些JAVASCRIPT腳本等籌得在一起的一些程式碼的集合,這樣的程式碼,再加上各類的不同格式的註釋,看起來就一個字:亂。也不管別人能不能看得懂,只要是能實現自己的目的就可以了,因為ASP的程式碼也是腳本,給了客戶也不可能不被人看到其中的內容,經多包容在DLL中一部分業務邏輯,但還是覺得ASP程式碼是最不值錢的程式碼,沒有人回去購買,可以隨時從別人的網站中查看源碼的形式得到別人辛苦編寫出來的獨特風格的東東。這些原因使ASP的發展成為了一種編的快忘的也快的代碼,可讀性,維護性也是各種語言中最為差的代碼。
其實,ASP程式碼也可以像其他語言一樣的面向對象,模組化,將許多頁面整合封裝到一個類別中,運用類別中的不同方法來顯示不同的頁面,這樣你可以將同一業務邏輯下的頁面和邏輯封裝到一個類別裡,用不同的方法來實作。說了這麼多,可能大家的思路都亂了,趕快給大家一點範例來看看:
<%
'****************************************
'* 類別名稱:clsWebWorkFlowLog
'* 功能:工作流程日誌追蹤類別
'* 歷史:
'* 作成:doface
'* 日期:2003/10/24 Ver 1.0
'* 改變:
'* 日期:
'*************** *************************
class clsWebWorkFlowLog
'定義公開屬性存放Connection對象
public ActiveConnection
private oResponse
'==========================================
'= 過程名:main
'= 參 數:
'= 功能:主調函數
'= 根據不同動作參數執行不同的操作
'= 傳回值:
'==========================================
sub main()
select case Request("act")
case "list"
list()
case else
list()
end select
end sub
'==========================================
'= 過程名:list
'= 參 數:
'= 功能:顯示清單畫面
'= 傳回值:
'==========================================
sub list()
dim oRs
set oRs = ActiveConnection.execute("select *,(select name from wf_config where id=w.wf_id) as wfname from wf_log w where step_id=1 and user_id=" & session("usr")("uid"))
'(select * from wf_log where id in (select max(id),wf_id,tab_id,rec_id from wf_log group by wf_id,tab_id,rec_id where wf_id= and tab_id=))
%> <p align="left"><img border="0" src="../images/desk/workflow-new.gif" WIDTH="32" HEIGHT="32"><font color="# FF0000"><b>待辦事宜:</b></font></p>
<center>
<table bgColor="#FFFFFF" border="1" borderColorDark="#ffffff" borderColorLight="#c0c0c0" cellSpacing="0" width="99%" height="25">
<tr>
<td bgColor="#808080" height="15"><font color="#FFFFFF">流程名稱</font></td>
<td bgColor="#808080" height="15"><font color="#FFFFFF">申請人</font></td>
<td bgColor="#808080" height="15"><font color="#FFFFFF">申請時間</font></td>
<td bgColor="#808080" height="15"><font color="#FFFFFF">完成時間</font></td>
<td bgColor="#808080" height="15"><font color="#FFFFFF">狀態</font></td>
<td bgColor="#808080" height="15"><font color="#FFFFFF">操作</font></td>
</tr><%
do while not oRs.eof
dim maxID,Next_id
if glbFunc.getMaxID(oRs("id").value,ActiveConnection,maxID,Next_id) then
%><tr>
<td bgColor="#ffffff" height="19"><%=oRs("wfname")%></a></td>
<td bgColor="#ffffff" height="19"><%=session("usr")("name")%> </td>
<td bgColor="#ffffff" height="19"><%=oRs("exetime")%> </td>
<td bgColor="#ffffff" height="19"> </td>
<td bgColor="#ffffff" height="19"><%=glbFunc.getCurZT(oRs("id").value,ActiveConnection)%></td>
<td bgColor="#ffffff" height="19"><p align="left"><a href="../PubExeTab/PubExeTab.asp?act=view&tab_id=<%=oRs("tab_id")% >&id=<%=oRs("rec_id")%>"><img src="../images/action/view.gif" border="0" alt="詳細" WIDTH="16" HEIGHT=" 16"></a> <a href="javascript:newin('wfimage.asp?act=list&id=<%=oRs("wf_id")%>&bz=1&step_id=<%=next_id%>', true,false,false,false,true);"><img src="../images/action/lcchuli.gif" border="0" alt="流程追蹤" WIDTH="16" HEIGHT="16" ></a> </p></td><%
end if
%></tr><%
oRs.movenext
loop
%></table>
</center>
<%
end sub
end class
'****************************************
'* 類別結束
'****************************************
'****************************************
'ASP頁面開始
'****************************************
'輸出標準HTML頭
glbFunc.writeHEAD
dim oWebWorkFlowLog
set oWebWorkFlowLog = new clsWebWorkFlowLog
set oWebWorkFlowLog.ActiveConnection = glbFunc.getADOConnection
oWebWorkFlowLog.main
glbFunc.writeTail()
%>
可以加入更多的方法,這樣這一個類別就能完成先前多個ASP檔案的功能。訪問的時候,在.ASP之後加上參數(要存取哪個函數)即可區分出來。