简化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事件中,你将痛苦不堪。

 


本页地址:http://www.foxtable.com/mobilehelp/topics/0025.htm