在日常工作中,经常需要记住各种项目或需要修复的错误。然而,作为人类,偶尔会忘记一些重要的事情。因此,当开始使用安装了IIS的Windows XP Professional时,决定创建一个Web“待办事项列表”,以提醒所有需要完成的重要事项。
本可以将这个Web应用程序限制在浏览器窗口中,但认为能够最终利用Active Desktop会非常酷。待办事项列表将始终显示在桌面上!
当然,要使Web应用程序工作,必须拥有一个Web服务器。这个项目使用Internet Information Server和Active Server Pages来执行大部分功能。
待办事项存储在数据库中(使用的是Sybase ASA 7),作为Web服务器机器上的服务运行。只有两个表,分别是:
以下是ToDoLists数据库的详细说明:
Item表:
User表:
使用多个ASP页面来更新和显示ToDoLists数据库项。首先,新用户被引导到login.asp,他们在那里输入用户ID、名称和密码。
HTML代码如下:
<form id="FORM1" name="FORM1" action="default.asp" method="get">
<table>
<tr>
<td>User ID:</td>
<td>
<input name="U" size="5" maxlength="10">
</td>
</tr>
<tr>
<td>Password:</td>
<td>
<input type="password" name="P" size="10" maxlength="20">
</td>
</tr>
<tr>
<td>Name:</td>
<td>
<input name="N" size="20" maxlength="80">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Log In">
</td>
</tr>
</table>
</form>
FORM标签的action值将表单数据提交到default.asp,然后添加新用户,或登录现有用户,并处理应用程序的主用户界面。
用户通过default.asp登录后,可以执行三个主要功能:
这些功能分别在单独的ASP页面上执行,完成后将用户重定向回default.asp以更新主用户界面。
当用户填写“输入新项目”表单并单击“保存”按钮时,表单数据被发送到insertitem.asp,然后添加到item数据库表中。然后用户被重定向到主页面。
VBScript代码如下:
strUser = Request.QueryString("U")
strPwd = Request.QueryString("P")
strName = Request.QueryString("N")
strDesc = Request.QueryString("description")
strDueDate = Request.QueryString("due_date")
strPriority = Request.QueryString("priority")
If Len(strDesc) > 255 Then
strDesc = Left(strDesc, 255)
End If
strSelect = "INSERT INTO item (description, date_entered, date_due, priority, status, user_id) VALUES ('" + strDesc + "', today(), '" + strDueDate + "', '" + strPriority + "', 'O', '" + strUser + "')"
...
Response.Redirect("default.asp?U=" + strUser + "&P=" + strPwd + "&N=" + strName)
每个列出的项目都显示在一个嵌套在表单中的表格中。表格有三个单元格,一个用于“完成”复选框,一个用于优先级指示器(低=无,中=*,高=!),一个用于项目的描述。(目前,用户只能通过复选框更新项目是否已完成。)当用户想要标记项目为已完成时,他/她勾选复选框,表单被提交到updateitem.asp。项目在数据库中更新,然后用户被重定向到主页面。
VBScript代码如下:
strUser = Request.QueryString("U")
strPwd = Request.QueryString("P")
strName = Request.QueryString("N")
strSelect = "SELECT item_num FROM item WHERE user_id = '" + strUser + "'"
Set adorItems = Server.CreateObject("ADODB.RecordSet")
adorItems.Open strSelect, Cnxn
While Not adorItems.EOF
strStatus = Request.QueryString(CStr(adorItems("item_num")))
If strStatus = "on" Then
strUpdate = "UPDATE item SET status = 'C' WHERE item_num = " & CStr(adorItems("item_num")) + " AND user_id = '" + strUser + "'"
Else
strUpdate = "UPDATE item SET status = 'O' WHERE item_num = " & CStr(adorItems("item_num")) + " AND user_id = '" + strUser + "'"
End If
Set adorCmd = Server.CreateObject("ADODB.Command")
Set adorCmd.ActiveConnection = Cnxn
adorCmd.CommandText = strUpdate
adorCmd.Execute()
Set adorCmd = Nothing
adorItems.MoveNext()
Wend
...
Response.Redirect("default.asp?U=" + strUser + "&P=" + strPwd + "&N=" + strName)
当用户单击“删除已完成项目”按钮时,用户ID、名称和密码被发送到deletecompleted.asp,主页面上所有选中的项目将从数据库中删除。然后用户再次被重定向到主页面。
VBScript代码如下:
strUser = Request.QueryString("U")
strPwd = Request.QueryString("P")
strName = Request.QueryString("N")
strDelete = "DELETE FROM item WHERE status = 'C' AND user_id = '" + strUser + "'"
Set adorCmd = Server.CreateObject("ADODB.Command")
Set adorCmd.ActiveConnection = Cnxn
adorCmd.CommandText = strDelete
adorCmd.Execute()
...
Response.Redirect("default.asp?U=" + strUser + "&P=" + strPwd + "&N=" + strName)
要利用Active Desktop,不得不创建一个Channel Definition Format (CDF)文件,该文件用于将Web页面植入桌面。由于不希望始终看到登录页面,default.asp将通过在URL中发送用户ID、名称和密码来登录用户。这种额外的便利性使得无法为每个人提供一个通用的CDF,因此在用户登录后重写CDF文件,使CDF特定于该用户。
VBScript代码如下:
Dim objFileSys, objTextStream
Dim sText
Set objFileSys = Server.CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFileSys.OpenTextFile("drive:yourpath\todolists\todolists_ad\activedesktop.cdf", ForWriting, True)
sText = "" & _
"" & _
"- " & _
"
ToDo List " & _
"" & _
"" & _
" " & _
" " & _
" "
objTextStream.Write sText
objTextStream.Close
如果用户A在用户B登录之前登录并添加了Active Desktop频道,然后用户B登录,那么用户A的Active Desktop频道将以用户B的身份登录……这可能会引起问题,它并不完美。
要将频道添加到Active Desktop,用户单击主页面底部的“添加到Active Desktop”按钮,然后就可以了!每次用户重新启动时,待办事项列表都会清晰可见。