简化HttpRequest事件代码
到上一节位置,我们的代码已经有点长了,这只是一个页面而已哦。
随着页面的增加,代码会十倍甚至百倍成长,而Foxtable的代码编辑器并不适合编辑超长的代码,所以最好使用自定义函数,一个页面做成一个函数,方便管理。
关于自定义函数,大家可以参考:自定义函数
用上一节的任务作为例子,我们采用自定义函数来实现:
1、定义函数
首先定义一个名为saletj的自定义函数,代码为:
Dim
e As
RequestEventArgs
= args(0)
If
e.PostValues.ContainsKey("tj")
AndAlso e.PostValues("tj")
= "按年月统计"
Then
Dim y
As Integer
= 0
Dim
m As
Integer = 0
Integer.TryParse(e.PostValues("year"),
y)
'获取用户输入的年
Integer.TryParse(e.PostValues("month"),
m)
'获取用户输入的月
If
y = 0 OrElse
m = 0 Then
e.WriteString("请输入正确的年月!")
Else
Dim fl
As String =
"d:\web\temp\" &
y &
m &
".htm"
'合成文件名
If FileSys.FileExists(fl)
Then
'如果文件存在
Dim ifo
As new
FileInfo(fl)
'如果不是本月,或者文件创建时间在1个小时内,则发送文件后返回
If
y <> Date.Today.Year
OrElse m <>
Date.Today.Month
OrElse (Date.Now
- Ifo.LastWriteTime).TotalHours
< 1
e.WriteFile(fl)
Return
""
End
If
End
If
'根据输入的年月,统计各产品的销售数量
Dim g
As New
SQLGroupTableBuilder("统计表1",
"订单")
'这里使用后台统计,如果数据已经全部加载可以直接用GroupTableBuilder
'g.ConnectionName = "数据源"
'外部数据表的话要指定数据源名称
g.Groups.AddDef("产品")
g.Totals.AddDef("数量")
g.VerticalTotal
= True
g.Filter
= "Year(日期)
= "
& y
&
" And Month(日期)
= "
& m
'后台统计才可以使用这种表达式的哦
Dim dt
As DataTable
= g.Build(False)
'统计数据,将结果保存为网页,然后发送这个网页
Dim sb
As New
StringBuilder
sb.AppendLine(y
& "年"
& m
& "月各产品销售数量: <br/><br/>")
For Each
dr As
DataRow In
dt.DataRows
sb.AppendLine(dr("产品")
& ":"
& dr("数量")
& "<br/>")
Next
sb.AppendLine("<br/>")
sb.AppendLine("统计时间:"
& Date.Now)
'在网页显示统计时间,提醒用户这可能不是最新的结果
FileSys.WriteAllText(fl,
sb.ToString,
False, Encoding.UTF8)
'记得用UTF8格式保存网页
e.WriteFile(fl)
'发送保存的网页
End
If
Else
Dim sb
As New
StringBuilder
sb.AppendLine("<form
enctype='multipart/form-data' action='saletj.htm' method='post'
id='form1'
name='form1'>")
sb.AppendLine("请输入要统计的年月:</br></br>")
sb.AppendLine("<input
name='tj' id='tj' value='按年月统计'
hidden>")
sb.AppendLine("年:
<input type='number' name='year' id='year' min='1999' max='2018'><br/><br/>")
sb.AppendLine("月:
<input type='number' name='month' id='month' min='1' max='12'><br/><br/>")
sb.AppendLine("<input
Type='submit' name='Sumbit' id='Sumbit' value='开始统计'>")
sb.AppendLine("</form>")
e.WriteString(sb.ToString)
End
If
上面的代码和上一节相比, 变化非常小,只有两处,首先在第一行位置插入了一行代码:
Dim e As RequestEventArgs = args(0)
RequestEventArgs是HttpRequest事件的e参数类型。
其次是将代码中的
Return
改为了
Return ""
2、修改HttpRequest事件代码
接下来将HttpRequest事件的代码改为:
Select
Case e.Path
Case "saletj.htm"
Functions.Execute("saletj",e)
End
Select
由于主要的工作已经转移到自定义函数中,所以HttpRequest变得很简洁。
为便于讲述,接下来的例子并不会采用自定义函数,但是实际开发的时候,建议大一点的系统,都应该采用自定义函数,如果所有代码都写在HttpRequest事件中,你将痛苦不堪。