一个经典示例

实现网络环境下实现复杂编号,一直是个不轻松的任务,Foxtable 2017之前的实现方法,你可以参考:

网络环境下的复杂编号

用OpenQQ实现网络环境下的编号

可以看到,即使有了OpenQQ,完成这个任务还是比较麻烦。

我们现在改用HttpServer+HttpClient来实现,你会发现代码简单了很多。

我们用其中最复杂的一个例子为例讲述。

假定有个名为"工程"的表,需要按月自动生成编号,根据工程代码按顺序编号,前4位是工程代码,然后是4位年,2位月,最后4位是顺序号,如下图所示:

重要提示:客户端和服务端必须分开两个项目运行,否则会锁死。

设计步骤:

1、服务端项目的HttpRequest事件代码:

Static bhs As new Dictionary(of String,Integer) '这个字典用于记录每个前缀的下一序号
If
  e.Path"bianhao.htm"
    If e.PostValues.ContainsKey("制单日期") AndAlso e.PostValues.ContainsKey("工程代码") Then
        Dim max As Integer
        Dim bh As String
        Dim prefix As String = e.PostValues("工程代码") & "-" &  Format(CDate(e.PostValues("制单日期")), "yyyyMM")
        If bhs.ContainsKey(prefix) = False Then '如果字典中不存在次前缀的序号,
            Dim cmd As New SQLCommand
            'cmd.ConnectionName = "数据源名称" '外部表请设置数据源名称'
            cmd.CommandText = "Select max(单据编号) From {工程} Where 单据编号 Like '" & prefix & "%'"
           
bh = cmd.ExecuteScalar
            If bh IsNot Nothing Then
                bh = bh.SubString(12)
                Integer.TryParse(bh,max)
            End If
            bhs.Add(prefix,max)
        Else
            max = bhs(prefix)
        End If
        max = max + 1
        bhs(prefix) = max
        e.WriteString(Prefix & "-" & Format(max,"0000"))
   
End If
End
If

2、在客户端项目工程表的DataColChanged事件加上代码:

Select Case e.DataCol.name
    Case "工程代码","制单日期"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("工程代码") = False AndAlso dr.IsNull("制单日期") = False Then
           
Dim hc As new HttpClient("http://127.0.0.1/bianhao.htm")
            hc.FormData.Add(
"
工程代码",dr("工程代码"))
            hc.FormData.Add(
"
制单日期",dr("制单日期"))
            dr(
"
单据编号") = hc.GetData()
       
End If
End
Select


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