通过网页显示查询结果

通过短信查询数据,如果查询结果内容很多,例如要查询所有产品的库存,而产品的数量数十个甚至数百个,显然这时直接用短信回复是不合适的。
我们可以将结果保存为网页,然后将链接地址通过短信发给查询者,前提是你已经搭建好web服务器,而且web服务器已经安装了Foxtable,并接上了短信猫;如果条件不许可,你也可以在其他电脑接收短信,生成查询结果网页文件,并 自动上传到web服务器,最后将连接地址发给查询者。

提示: 下面的示例用到了专业报表的知识。

示例

下载我们重新设计之前的库存查询示例,如果用户指定产品,以短信的形式返回这些产品的库存和单价,如果用户没有指定产品,则以网页的形式返回所有产品的库存和单价。

1、假定web服务器已经安装了foxtable,并接上了短信猫,web目录的是:c:\myweb。
2、在c:\myweb目录下建立一个子目录"query",用于存放以网页形式生成的查询结果。
3、规定提交查询信息的格式,假定我们规定的格式如下:

格式 说明
**产品1*产品2... 指定要查询的产品,不同的产品之间,用符号*隔开,如果省略产品,表示查询全部产品:

示例:

** 表示查询所有产品
**PD01 
表示查询PD01。
**PD01*PD02 
表示查询PD01和PD02。

2、在项目事件AfterOpenProject设置代码:

FoxSms.SyncWorkMode = False '设置为异步工作模式
FoxSMS.CommPort =
3 '注意端口号千万不能搞错
FoxSMS
.OpenCom
()

3、在项目事件BeforeCloseProject事件中设置代码:

FoxSMS.CloseCom()

4、然后在短信监视器中,设置ConnectModemResult事件的代码为:

If e.Succeed = False Then
    MessageBox.Show(
"短信猫连接失败!","提示", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End
If

5、然后在短信监视器中,设置NewMessage事件的代码为:

Dim ret As String
If
e.Content = "**" '如果查询所有产品的库存
   
Dim doc As New PrintDoc '定义一个新报表
   
Dim rt As New prt.RenderTable '定义一个新表格
   
Dim fl As String = "c:\myweb\query\" & rand.NextString(8) & ".htm" '生成一个随机的网页文件名
   
Dim ColNames As String() = New String(){"产品", "数量","单价"}
    For
c As Integer = 0 To ColNames.Length - 1 '逐列设置和填入内容
       
rt.Cells(0,c).Text = ColNames(c) '列名作为标题
       
For r As Integer = 0 To DataTables("库存").DataRows.Count -1 '开始填入该列内容
            rt.Cells(r +
1, c).Text = DataTables("库存").DataRows(r)(ColNames(c))
        Next
    Next

    rt.Style.Gridlines.All = New prt.Linedef(Color.Gray)
    doc.Body.Children.Add(rt)
'将表格加入到报表
    doc.SaveHtm(fl)
'保存为网页文件
    ret = "
http://www.你的域名.com/query/" & FileSys.GetName(fl)
ElseIf
e.Content.StartsWith("**") Then '如果查询指定产品的库存
   
Dim vals() As String = e.Content.Trim("*").Split("*")
    Dim
flt As String
   
For Each val As String In vals
        If
flt > "" Then
            flt = flt &
","
       
End If
        flt = flt &
"'" & val & "'"
   
Next
    If
flt > "" Then
        Dim
drs As List(Of DataRow) = DataTables("库存").Select("产品 In (" & flt & ")")
        For
Each dr As DataRow In drs
            If
ret > "" Then
                ret = ret & vbcrlf

            End
If
            ret = ret &
"产品:" & dr("产品") & " 库存:" & dr("数量") & " 单价:" & dr("单价")
        Next
        If
ret = "" Then
            ret =
"无此产品:" & e.Content
        End
If
    End
If
End If

FoxSms.DelMsgForIndex(e.Index)
'从SIM卡删除此短信
If
ret > "" Then
    FoxSMS
.SendMsg(e.FromNumber,ret)
End If


本页地址:http://www.foxtable.com/webhelp/topics/2451.htm